Java &引用;没有通用的密码套件”;码头错误
我已经在Jetty中设置了ssl连接器。它在运行Windows 7的我的开发机器上运行良好,但在Linux开发服务器上失败:Chrome/IE/C#客户端无法打开网页,Jetty调试日志中显示“无通用密码套件”。 我从SslConnectionFactory获取了javax.net.ssl.SSLEngine并打印了支持的chipher套件列表,Windows/Linux机器也是如此(我运行的是相同的java 1.8.0.11)。有人能建议除了这些芯片之外还有其他芯片用于ssl握手吗Java &引用;没有通用的密码套件”;码头错误,java,ssl,cryptography,jetty,Java,Ssl,Cryptography,Jetty,我已经在Jetty中设置了ssl连接器。它在运行Windows 7的我的开发机器上运行良好,但在Linux开发服务器上失败:Chrome/IE/C#客户端无法打开网页,Jetty调试日志中显示“无通用密码套件”。 我从SslConnectionFactory获取了javax.net.ssl.SSLEngine并打印了支持的chipher套件列表,Windows/Linux机器也是如此(我运行的是相同的java 1.8.0.11)。有人能建议除了这些芯片之外还有其他芯片用于ssl握手吗 2016-
2016-01-18 10:20:11,875 DEBUG [qtp277169967-36] tty.util.ssl.SslContextFactory - SNI matching for type=host_name (0), value=x.com
2016-01-18 10:20:11,875 DEBUG [qtp277169967-36] tty.util.ssl.SslContextFactory - SNI matched x.com->X509@18479e43(cert0,h=[x.com, y.com, z.com],w=[])
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] .ssl.SniX509ExtendedKeyManager - Matched x.com with X509@18479e43(cert0,h=[x.com, y.com, z.com],w=[]) from [key]
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] .ssl.SniX509ExtendedKeyManager - Chose alias null/RSA on 119c684e[SSLEngine[hostname=1.2.3.4 port=64350] SSL_NULL_WITH_NULL_NULL]
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] .ssl.SniX509ExtendedKeyManager - Matched x.com with X509@18479e43(cert0,h=[x.com, y.com, z.com],w=[]) from [key]
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] .ssl.SniX509ExtendedKeyManager - Chose alias null/RSA on 119c684e[SSLEngine[hostname=1.2.3.4 port=64350] SSL_NULL_WITH_NULL_NULL]
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] .ssl.SniX509ExtendedKeyManager - Matched x.com with X509@18479e43(cert0,h=[x.com, y.com, z.com],w=[]) from [key]
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] .ssl.SniX509ExtendedKeyManager - Chose alias null/RSA on 119c684e[SSLEngine[hostname=1.2.3.4 port=64350] SSL_NULL_WITH_NULL_NULL]
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] ipse.jetty.io.AbstractEndPoint - onClose SelectChannelEndPoint@5bdd29a4{/10.240.68.111:64350<->8443,CLOSED,in,out,-,-,3/30000,SslConnection}{io=0/0,kio=0,kro=1}
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] lipse.jetty.io.ChannelEndPoint - close SelectChannelEndPoint@5bdd29a4{/10.240.68.111:64350<->8443,CLOSED,in,out,-,-,3/30000,SslConnection}{io=0/0,kio=0,kro=1}
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] lipse.jetty.io.ManagedSelector - Queued change org.eclipse.jetty.io.ManagedSelector$2@1fbd3777 on org.eclipse.jetty.io.ManagedSelector@5e45d242 id=2 keys=1 selected=0
2016-01-18 10:20:11,877 DEBUG [qtp277169967-36] se.jetty.server.HttpConnection -
javax.net.ssl.SSLHandshakeException: no cipher suites in common
at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1364)
at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:529)
at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:807)
at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:775)
我可以使用浏览器连接的服务器也提供了相同的芯片列表,唯一的区别在于证书
UPD 3:
我在这个unix服务器上检查了另一个CN/SAN的证书,它工作正常(只是抛出一个无效的证书主机错误)。看起来,当CN/SAN记录匹配时,它会运行额外的验证,从而导致此错误?简言之,您的客户端提供的内容和服务器具有的内容是不同的 这可能是因为您的证书是DSA格式,而您的客户端不提供DSA(要解决此问题,请确保使用更现代的证书格式,至少是RSA或更好的格式) 还有一大堆密码由于一个或另一个漏洞而被专门排除在外 使用
SSLEngine
获取“受支持”列表并不能得到真实世界的答案。它告诉您的只是Java的功能,而不是特定连接器配置的设置
使用SslContextFactory
,但询问它包含和排除的密码套件是什么。或者只需打开SslContextFactory
的调试,查看它产生的输出(其中显示了包含/排除的密码和协议)
更新:
你没有提到这是SNI证书,它大大缩小了范围
对于初学者,您必须使用Jetty 9.3+、Java 8+、服务器端没有早期版本的Jetty或Java支持SNI
最后,确保已将SecureRequestCustomizer
添加到特定于SSL/TLS的连接器中的HttpConfiguration
,并使用可选构造函数启用SNI
主机检查
在jetty distribution
上,您将执行以下操作
$mkdir snibase
$cd-snibase
$java-jar/path/to/jetty dist/start.jar——添加到start=https,部署
信息:服务器已在${jetty.base}/start.ini中初始化(传递)
信息:ssl已在${jetty.base}/start.ini中初始化(传递)
信息:https在${jetty.base}/start.ini中初始化
信息:在${jetty.base}/start.ini中初始化部署
下载:http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/plain/jetty-server/src/test/config/etc/keystore?id=master 到${jetty.base}/etc/keystore
MKDIR:${jetty.base}/webapps
信息:基本目录已修改
$grep sni start.ini
#jetty.ssl.sniHostCheck=true
$edit start.ini
$grep sni start.ini
jetty.ssl.sniHostCheck=true
简而言之,您的客户机提供的服务和服务器提供的服务是不同的
这可能是因为您的证书是DSA格式,而您的客户端不提供DSA(要解决此问题,请确保使用更现代的证书格式,至少是RSA或更好的格式)
还有一大堆密码由于一个或另一个漏洞而被专门排除在外
使用SSLEngine
获取“受支持”列表并不能得到真实世界的答案。它告诉您的只是Java的功能,而不是特定连接器配置的设置
使用SslContextFactory
,但询问它包含和排除的密码套件是什么。或者只需打开SslContextFactory
的调试,查看它产生的输出(其中显示了包含/排除的密码和协议)
更新:
你没有提到这是SNI证书,它大大缩小了范围
对于初学者,您必须使用Jetty 9.3+、Java 8+、服务器端没有早期版本的Jetty或Java支持SNI
最后,确保已将SecureRequestCustomizer
添加到特定于SSL/TLS的连接器中的HttpConfiguration
,并使用可选构造函数启用SNI
主机检查
在jetty distribution
上,您将执行以下操作
$mkdir snibase
$cd-snibase
$java-jar/path/to/jetty dist/start.jar——添加到start=https,部署
信息:服务器已在${jetty.base}/start.ini中初始化(传递)
信息:ssl已在${jetty.base}/start.ini中初始化(传递)
信息:https在${jetty.base}/start.ini中初始化
信息:在${jetty.base}/start.ini中初始化部署
下载:http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/plain/jetty-server/src/test/config/etc/keystore?id=master 到${jetty.base}/etc/keystore
MKDIR:${jetty.base}/webapps
信息:基本目录已修改
$grep sni start.ini
#jetty.ssl.sniHostCheck=true
$edit start.ini
$grep sni start.ini
jetty.ssl.sniHostCheck=true
看起来我能够修复它:在keystore中,keyfile和单独的文件中都有证书。我删除了单独的副本,它开始工作。我不知道它如何解释一个取决于主机名的问题,如果有人有相同的问题,只需发布一个解决方案。
UPD:它还帮助切换到.p12密钥库(其中只有证书链在里面,没有密钥).看起来我能够修复它:在keystore中,keyfile和单独的文件中都有证书。我删除了单独的副本,它开始工作。我不知道它如何解释一个取决于主机名的问题,如果有人有相同的问题,只需发布一个解决方案
Supported versions: TLSv1.0 TLSv1.1 TLSv1.2
Deflate compression: no
Supported cipher suites (ORDER IS NOT SIGNIFICANT):
TLSv1.0
RSA_WITH_RC4_128_MD5
RSA_WITH_RC4_128_SHA
RSA_WITH_3DES_EDE_CBC_SHA
DHE_RSA_WITH_3DES_EDE_CBC_SHA
RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
(TLSv1.1: idem)
TLSv1.2
RSA_WITH_RC4_128_MD5
RSA_WITH_RC4_128_SHA
RSA_WITH_3DES_EDE_CBC_SHA
DHE_RSA_WITH_3DES_EDE_CBC_SHA
RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
RSA_WITH_AES_128_CBC_SHA256
DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
----------------------
Server certificate(s):
XXX: CN=XXX, O=XXX, DC=XXX, DC=XXX
----------------------
Minimal encryption strength: strong encryption (96-bit or more)
Achievable encryption strength: strong encryption (96-bit or more)