按照此处的说明进行操作,并重新创建了我以前错误创建的证书。就像我现在javax.net.ssl.SSLHandshakeException: no cipher suites in common
在服务器和javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
客户端上看到的一样,情况发生了变化。
服务器是ClassFileServer.java,相应的客户端是SSLSocketClientWithClientAuth.java
有关使两端都能正常播放的任何提示,请注意,我使用的是localhost,因此我假设密码功能相同。
更新:
这是我用于生成文件的步骤,我可能会混淆密钥和信任库。
在服务器上(遵循本指南):
$ keytool -genkey -alias serverkey -keyalg RSA -keypass p@ssw0rd -storepass p@ssw0rd -keystore keystore.jks
$ keytool -export -alias serverkey -storepass p@ssw0rd -file server.cer -keystore keystore.jks
$ keytool -import -v -trustcacerts -alias clientkey -file ../client/client.cer -keystore cacerts.jks -keypass p@ssw0rd -storepass p@ssw0rd
在客户端(通过本指南):
$ keytool -genkey -alias clientkey -keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks
$ keytool -export -alias clientkey -storepass changeit -file client.cer -keystore keystore.jks
$ keytool -import -v -trustcacerts -alias serverkey -file ../server/server.cer -keystore cacerts.jks -keypass changeit -storepass changeit
由于调试超出了此站点的限制,因此不得不使用另一种介质:
客户端调试错误: http :
//pastebin.com/mHCmEqAk
服务器调试错误: http :
//pastebin.com/YZbh7H8f
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随附的默认信任库信任。
问题内容: 我正在尝试通过Java SSLSockets将安全性应用于简单的聊天应用程序。 我创建了一个自签名的CA,并用它签署了两个证书(全部使用了RSA密钥),一个证书用于服务器,一个证书用于客户端。之后,我将证书导入服务器的密钥库和客户端的密钥库。 我想使用特定的密码,但显然所有受支持的密码均无效。 我为客户提供的代码: 对于服务器: 对不起,如果我的英语有点生锈。 我的操作系统是OS X
问题内容: 我正在使用SSLServerSocket接受我的openSUSE服务器上的客户端连接,但是它们都无法连接。我总是得到SSLHandshakeException的说法。我已经激活了所有可能的套件,启用了多个协议,并尝试了最新的Oracle JRE和openjdk。另外,我还关注了论坛和相关内容上的其他几篇文章,并“解锁”了Oracle jre中的所有密码套件,并像这样更改了openjdk
我正在使用SSLServerSocket来接受我的openSUSE服务器上的客户端连接,但是它们都不能连接。我总是得到一个SSLHandshakeExc0019说。我已经激活了所有可能的套件,启用了多种协议,尝试了最新的oracle JRE和openjdk。我还关注了论坛上的其他几篇文章,并“解锁”了甲骨文jre中的所有密码套件,我像这样更改了openjdk jre的设置: 禁用:并启用: 以下是
我创建了一个自签名CA并用它签署了两个证书(都使用了RSA密钥),一个用于服务器,一个用于客户端。之后,我将证书导入服务器的密钥存储库和客户机的另一个密钥存储库。 我想使用一个特定的密码,但显然支持的密码都不起作用。 我的客户端代码:
问题内容: 我最近一直在将SSL套接字用于消息传递系统。 我终于开始使用CA颁发的证书。我将其导入到密钥库中,设置了密钥库属性,并启动了客户端,但是当我尝试发送数据时,我一直收到握手异常。 我启用了调试模式,发现这是由于造成的。有什么想法吗? 如果有帮助,它还说它忽略了TLSV1和TLSV1.1中的大约10个密码套件。 我还安装了无限强度加密策略。 客户代码 服务器代码 编辑: 我刚刚添加了密码,
问题内容: 我正在尝试在两个Java项目之间建立安全连接,但是却遇到了SSLHandshakeException(没有通用密码套件)的问题。这是在两侧创建套接字的方法: 客户: 服务器: 我有一个用keytool生成的RSA密钥。此代码从磁盘加载它。 我做错了什么? 更新: 我在此数组的两侧添加了对setEnabledCipherSuites的调用: 我得到相同的结果。 问题答案: 在服务器端,你