javax.net.ssl.SSLHandshakeException: no cipher suites in common
这有两个原因:
服务器没有私钥和证书,并且可能根本没有密钥库。在这种情况下,它只能使用不安全的匿名密码套件(默认情况下已禁用),并且应该保持这种状态。因此,没有可以同意与客户端一起使用的密码套件。
客户端或服务器或两者强加了对密码套件的过度限制,因此无法达成协议。
对于您的密钥库和信任库,除了您只需要执行两个导入步骤的四个导入步骤外,其他一切看起来都不错。您不需要将服务器的证书导入到服务器自己的信任库中,也不需要将客户端的证书导入到客户端的信任库中。您只需要这样:
服务器:
$ keytool -import -v -trustcacerts -alias clientkey -file ../client/client.cer -keystore cacerts.jks -keypass p@ssw0rd -storepass p@ssw0rd
客户:
$ keytool -import -v -trustcacerts -alias serverkey -file ../server/server.cer -keystore cacerts.jks -keypass changeit -storepass changeit
并且只需要它,因为您使用的是自签名证书。简单的解决方案:不用。使用CA签名的证书,该证书由Java随附的默认信任库信任。



