检查输入是否正确

检查输入是否正确

我有一台 Tomcat 服务器,需要签名证书。我使用以下方法生成了一个密钥:

密钥工具-genkey ....

然后生成 CSR 并将其发送给我的公司管理员。

他们给我返还了一份带有签名证书和证书链的 CER 文件。

我使用 keytool 在密钥库中安装了根证书、中间证书和签名证书。

但是,当我在服务器中使用证书并连接浏览器时,我在 chrome 中收到 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误。

这是我使用 openssl 调试时得到的结果。

$ openssl s_client-connect 本地主机: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 is...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 af 52 45 00 00 2e 00 39 00 38 00 35 00 16 00 13 00 0a 00 33 00 32 00 2f 00 9a 00 99 00 96 00 05 00 04 00 15 00 12 00 09 00 14 00 11 00 08 00 06 00 03 00 ff 01 00 00 04 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 警报 [长度 0002],致命的 handshake_failure 02 28 24316:错误:14094410:SSL 例程:SSL3_READ_BYTES:sslv3 警报握手失败:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.7/src/ssl/s3_pkt.c:1145:SSL 警报编号 40 24316:错误:1409E0E5:SSL 例程:SSL3_WRITE_BYTES:ssl 握手失败:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.7/src/ssl/s3_pkt.c:566:

知道我做错了什么吗?

我尝试过各种各样的方法,从谷歌到 stackoverflow。

答案1

检查输入是否正确

如果你运行它keytool --list -keystore <yourkeystore>,那么你应该得到PrivateKeyEntry类似这样的结果:

tomcat, Aug 23, 2018, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): F2:BA:29:E...

导入证书

如果你有一个已签名的证书私钥,那么您必须将它们导出到 PKCS12 密钥库并将其导入到 Java 密钥库。如果密钥库中没有密钥,签名证书将不起作用。

#export to PKCS12, set password -> it has to be the same as the java keystore password in the next step
openssl pkcs12 -export -name tomcat -in cert.cer -inkey key.pem -out tomcat.p12

#import the pkcs12 keystore. make sure, both passwords are the same
keytool -importkeystore -destkeystore tomcat.keystore -srckeystore tomcat.p12 -srcstoretype pkcs12 -alias tomcat

密码不匹配

不确定是否适合您的问题,但也许这会让您更接近解决方案:如果证书存在问题,例如 ERR_SSL_OBSOLETE_CIPHER,您可以在 server.xml 中的 SSL 连接器中添加它

useCipherSuitesOrder="true"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,
TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
TLS_SRP_SHA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
TLS_SRP_SHA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"

答案2

在我从在 IntelliJ IDE 中运行 Tomcat 切换到将其设置为独立运行后,上述答案帮助我诊断了“ssl 或密码不匹配”的原因。

我已经为除 localhost 之外的 URL(myinitials.company.com),但尝试通过https://本地主机。我一运行keytool --list -keystore <yourkeystore>,它就显示密钥库已为 myinitials.company.com 设置。我更改为该主机名,并且不再出现 ERR_SSL_VERSION_OR_CIPHER_MISMATCH。

希望这能帮助其他找到此页面的人。

相关内容