我有一个需要签名证书的 tomcat 服务器。我使用生成了一个密钥
密钥工具-genkey ....
然后生成一个 CSR 并将其发送给我的公司管理员。
他们给了我一个带有签名证书和证书链的 CER 文件。
我使用 keytool 在密钥库中安装了根证书、中间证书和签名证书。
但是当我在服务器中使用证书并与浏览器连接时,我在 chrome 中收到 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误。
这是我使用 openssl 调试时得到的。
$ openssl s_client -connect localhost:18443 -debug -tls1 -msg
CONNECTED(00000003) 写入 0x7fecbbc1b4d0 [0x7fecbc019000] (100 字节 => 100 (0x64)) 0000 - 16 03 01 00 5f 01 00 00-5b 03 01 5b 1c 08 e9 8a ...._...[.. [.... 0010 - 69 73 dd 18 9f 58 98 08-b3 23 dd 76 89 3c b8 7b 是...X...#.v.<.{ 0020 - 3e aa ea 61 d8 88 0f eb- af 52 45 00 00 2e 00 39 >..a.......RE....9 0030 - 00 38 00 35 00 16 00 13-00 0a 00 33 00 32 00 2f .8.5...... .3.2./ 0040 - 00 9a 00 99 00 96 00 05-00 04 00 15 00 12 00 09 ...... 0050 - 00 14 00 11 00 08 00 06- 00 03 00 ff 01 00 00 04 ...... 0060 - 00 23
.# 0064 -TLS 1.0 握手 [长度 005f],ClientHello 01 00 00 5b 03 01 5b 1c 08 e9 8a 69 73 dd 18 9f 58 98 08 b3 23 dd 76 89 3c b8 7b 3e aa ea 61 d8 88 0f eb 0 af 52 45 0e 00 39 00 38 00 35 00 16 00 13 00 0A 00 33 00 32 00 32 00 2F 00 9A 00 99 00 96 00 96 00 05 00 04 00 04 00 15 15 00 12 00 09 00 09 00 14 00 14 00 11 00 08 08 00 08 00 06 00 06 00 06 00 06 00 03 00 03 00 ff 01 00 ff 01 00 00 00 00 04444 00 04 00 04 0004 0004 0004 0004 0004 0004 0004 0004 00 0004 0004 0004 00 23 00 00 从 0x7fecbbc1b4d0 [0x7fecbc014600] 读取(5 字节 => 5 (0x5))0000 - 15 03 01 00 02 ..... 从 0x7fecbbc1b4d0 [0x7fecbc014605] 读取(2 字节 => 2 (0x2))0000 - 02 28
.( <<< TLS 1.0 Alert [length 0002], fatal handshake_failure 02 28 24316:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/ OpenSSL098-64.50.7/src/ssl/s3_pkt.c:1145:SSL 警报号 40 24316:error:1409E0E5:SSL 例程:SSL3_WRITE_BYTES:ssl 握手失败:/BuildRoot/Library/Caches/com.apple.xbs/Sources/ OpenSSL098/OpenSSL098-64.50.7/src/ssl/s3_pkt.c:566:
任何想法我做错了什么?
我已经尝试了各种方式,来自 google 和 stackoverflow。
检查输入是否正确
如果你跑步,
keytool --list -keystore <yourkeystore>
那么你应该得到一个PrivateKeyEntry
类似的东西:导入证书
如果您有签名证书和私钥,则必须将它们导出到 PKCS12 密钥库并将其导入到 Java 密钥库。如果没有密钥库中的密钥,签名证书将无法工作。
密码不匹配
不确定是否适合您的问题,但也许这会让您更接近解决方案:如果证书有问题,例如 ERR_SSL_OBSOLETE_CIPHER,您可以在 server.xml 的 SSL 连接器中添加它
在我从 IntelliJ IDE 中运行 Tomcat 切换并设置为独立运行后,上述答案帮助我诊断了“ssl 或密码不匹配”的原因。
我已经为localhost (myinitials.company.com) 以外的 URL 设置了密钥库,但试图通过https://localhost访问它。我一运行
keytool --list -keystore <yourkeystore>
,它就显示为 myinitials.company.com 设置了密钥库。我更改为该主机名,并且没有更多的 ERR_SSL_VERSION_OR_CIPHER_MISMATCH。希望这可以帮助找到此页面的其他人。