Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;没有通用的密码套件”;码头错误_Java_Ssl_Cryptography_Jetty - Fatal编程技术网

Java &引用;没有通用的密码套件”;码头错误

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-

我已经在Jetty中设置了ssl连接器。它在运行Windows 7的我的开发机器上运行良好,但在Linux开发服务器上失败:Chrome/IE/C#客户端无法打开网页,Jetty调试日志中显示“无通用密码套件”。 我从SslConnectionFactory获取了javax.net.ssl.SSLEngine并打印了支持的chipher套件列表,Windows/Linux机器也是如此(我运行的是相同的java 1.8.0.11)。有人能建议除了这些芯片之外还有其他芯片用于ssl握手吗

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)