You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Spring Boot 2 WebFlux启用SSL?解决无通用密码套件握手异常

搞定javax.net.ssl.SSLHandshakeException: no cipher suites in common异常

刚复现了你遇到的这个SSL握手坑,先把完整的复现流程理明白,再给你分析问题根源和解决办法:

复现步骤

  • 去start.spring.io创建Spring 2.0.1版本的项目,勾选「Reactive Web」依赖
  • 下载项目压缩包并解压
  • 执行这条keytool命令生成密钥库:
    keytool -genkeypair -keystore demo/src/main/resources/keystore.jks
    
  • 设置密钥库密码,后面所有默认项(显示[Unknown])直接回车,确认证书信息CN=Unknown, OU=Unknown,...的时候输入Yes
  • 给密钥设置和密钥库一样的密码
  • 往项目的application配置文件(不管是properties还是yml)里加SSL相关配置(你提到的内容应该是类似下面的常见配置):

    举个application.properties的例子:

    server.ssl.key-store=classpath:keystore.jks
    server.ssl.key-store-password=你设置的密码
    server.ssl.key-password=你设置的密码
    

为啥会出这问题?

no cipher suites in common说白了就是客户端和服务器能用上的加密套件完全没交集。你用默认参数生成的JKS密钥库,大概率用的是老旧的DSA算法,而Spring WebFlux(就是Reactive Web对应的框架)默认支持的加密套件里根本没这个算法;还有可能是密钥库的证书没配置对,导致服务器加载不出可用的加密套件。

怎么解决?

1. 重新生成兼容的密钥库

换RSA算法生成密钥库(这是现在主流兼容的算法),执行这条命令:

keytool -genkeypair -alias tomcat -keyalg RSA -keystore demo/src/main/resources/keystore.jks -keysize 2048

密码设置和之前一样就行,默认项直接回车确认没问题。

2. 明确配置服务器的加密套件

在application配置文件里加上支持的加密套件列表,选那些客户端和服务器都认的,比如:

server.ssl.ciphers=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384

这些套件兼容性很强,基本能覆盖大部分客户端。

3. 检查密钥库是否正常

用这条命令看看密钥库的证书信息,确认算法是RSA:

keytool -list -v -keystore demo/src/main/resources/keystore.jks

要是输出里显示Algorithm: RSA,那算法就没问题;如果是DSA,那就是根源所在了。

按照上面的步骤操作完,重启Spring应用,再访问HTTPS接口,这个握手异常应该就消失了。

内容的提问来源于stack exchange,提问作者stphngrtz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:15:30