java - "No cipher suites in common” jetty 错误

标签 java ssl cryptography jetty

我已经在 J​​etty 中设置了 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:还有一个有趣的行为,如果我只导入一个证书,它工作正常,但浏览器中有一个 ssl 警告,表明证书是由另一个未提供的证书签名的。如果我导入整个证书链,就会出现错误。

UPD 2:我为有问题的服务器运行了 SSL 检查程序,并且有

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)

我可以使用浏览器连接的服务器提供了相同的 chiphers 列表,唯一的区别在于证书。

更新 3: 我在这个 unix 服务器上检查了另一个 CN/SAN 的证书,它工作正常(只是抛出一个无效的证书主机错误)。看起来当 CN/SAN 记录匹配时它会运行导致此错误的额外验证?

最佳答案

看起来我能够修复它:在 keystore 中, key 文件中和单独的证书。我删除了单独的副本,它开始工作了。我不知道它如何解释取决于主机名的问题,如果有人有同样的问题,只需发布​​解决方案。 UPD:它也有助于切换到 .p12 keystore (其中只有证书链在里面,没有 key )。

关于java - "No cipher suites in common” jetty 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34814158/

相关文章:

java - 关于c++中的 "static function",Java中对应的特性是什么

java - 使用 AJAX 而不是 TagLib?

ssl - 如何在 cPanel 中安装 SSL?

java - PBEWITHSHA256AND128BITAES-CBC-BC 在 RedHat 6.4 上创建 java.security.NoSuchAlgorithmException

java - badPaddingException 在 doFinal 的某些调用上。不是全部。相同的输入

c# - 如何检查 Asp.NET 应用程序是否支持 FIPS

java - itext 7 (java) 在新页面上将图像添加到现有 pdf 文档的末尾

java - 获取给定文件夹下文件的所有绝对路径

ssl - Artifactory jfrog cli 无法进行身份验证

c# - 当颁发者不是 X509Store 信任根时使用证书使用 Microsoft .NET 框架进行客户端身份验证