Quick Fix j (QFJ) 与服务器的 SSL 连接失败:使用 jks、csr 和 crt certificate_required

Quick Fix j (QFJ) SSL connection to a server fails: certificate_required using jks, csr and crt

提问人:Ggdw 提问时间:4/27/2023 更新时间:4/27/2023 访问量:127

问:

将感谢您帮助解决我遇到的SSL问题。 我正在使用快速修复 j 版本 2.3.1 作为启动器。 我正在尝试连接到使用 SSL 的服务器

我使用 keytool 生成了两个文件,一个是 .jks,另一个是 .csr,分别使用 commends:

keytool -genkey -alias ALIAS -keyalg RSA -keystore JKSNAME.jks -validity 365 -keysize 2048

keytool -certreq -alias ALIAS -keystore JKSNAME.jks -file CSRNAME.csr

然后,我将.csr文件发送到接受者端,他们发回一个.crt文件,我使用这个.crt文件使用commend生成一个新的.jks文件:

keytool -import -alias testalias -file CRTNAME.crt -keypass keypass -keystore JKSNAME2.jks 

并将结果填充到:

SocketUseSSL=Y
SocketKeyStore=JKSNAME2.jks 
SocketKeyStorePassword=****

但是在这一切之后,我无法连接到接受器,从而获得输出:

javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_required 

java.net.SocketException: Connection reset

将不胜感激任何帮助

SSL CSR JKS CRT 快速修复J

评论

0赞 dave_thompson_085 4/28/2023
您不能“生成”新的 jks。对于“自己的”证书(标识您的证书,而不是其他人/某物),必须导入 CA(?)- 将证书颁发给生成密钥对(和 CSR)的相同密钥库条目(别名)。通常,您还必须导入任何需要的链证书,但在这种情况下,可能没有任何证书。但这不是编程或开发。
0赞 Ggdw 4/28/2023
谢谢@dave_thompson_085,我做了如下操作:keytool -importcert -file CRTNAME.crt -keystore JKSNAME.jks -alias server_sign_crt,我仍然看到相同的异常。当我打开 jks 时,我看到“您的密钥库包含 2 个条目”,其中包含我用于生成 jks 文件的别名以及用于将 .crt 插入 jks (ServerSignCrt) 的别名。我不确定值得一提,但是我生成的 .csr 文件在页眉和页脚中包含 BEGIN NEW CERTIFICATE REQUEST,而接受方期望 BEGIN CERTIFICATE REQUEST 能够生成 .crt 文件,他们删除了 NEW
0赞 dave_thompson_085 4/29/2023
如果用于生成文件的别名(更重要的是文件中的密钥对)与用于导入证书的别名不同,则说明您没有按照我的说明进行操作,因此没有得到正确的结果。请阅读“相同的密钥库条目(别名)”字样。关于您的第二点,将“NEW”与“CERTIFICATE REQUEST”一起使用确实是一个有时很麻烦的问题,请参阅 rfc-editor.org/rfc/rfc7468#section-7,但就您而言,它已经得到处理,现在对您来说不是问题。
0赞 Ggdw 4/29/2023
嗨,@dave_thompson_085再次感谢您的回复,我按照您的建议做了,并使用了与我在步骤 1 和 2 中创建 .jks 和 .csr 相同的别名,当我运行 eytool -importcert -file CRTNAME.crt -keystore JKSNAME.jks -alias server_sign_crt 我得到了: keytool 错误:java.lang.Exception:无法从回复建立链, 当我打开 .crt 文件时,我可以看到文件中只有一个页眉和页脚
1赞 dave_thompson_085 5/4/2023
对不起,我忘了keytool需要全链(包括root);即使你不需要实际的中间/链证书 - 这只是我的猜测,我不确定 - 你仍然需要root。要求接受者给你,或指出你的根证书,以及链证书(如果有的话),把它放在一个文件中,然后把它,或者从顶部(根)向下,导入到密钥库中的唯一别名(不是你的密钥的别名,如果多个别名彼此不同);然后,如前所述,将服务器证书导入密钥别名。

答: 暂无答案