Java SSL错误证书错误
我无法使用Java程序连接到安全站点。我已经从我将要连接的服务器导入了3个证书;公共、内部和根证书。我已将3个证书正确导入java cacerts。并在使用以下参数调用Java类时指定:Java SSL错误证书错误,java,ssl,ssl-certificate,Java,Ssl,Ssl Certificate,我无法使用Java程序连接到安全站点。我已经从我将要连接的服务器导入了3个证书;公共、内部和根证书。我已将3个证书正确导入java cacerts。并在使用以下参数调用Java类时指定: java -Djavax.net.debug=ssl Djavax.net.ssl.keystore=JAVACACERTS -Djavax.net.ssl.keystorePassword=changeit -server -cp $CLASSPTH -Xmx500m SendOrderResponse 但
java -Djavax.net.debug=ssl
Djavax.net.ssl.keystore=JAVACACERTS -Djavax.net.ssl.keystorePassword=changeit -server -cp $CLASSPTH -Xmx500m SendOrderResponse
但是,我得到了一个“坏证书”错误。我查看了日志的详细信息,似乎根证书不在证书链中
知道为什么会这样吗?我什么时候在Java cacerts中导入了3个证书?我假设由于证书链错误而抛出了错误的证书。看起来您没有使用客户端证书 在这种情况下,不要在客户端应用程序中设置
javax.net.ssl.keystore
参数。仅导入信任库中的根(可能是中间)证书(默认情况下,cacerts
)也应该足够了
关于keystore/truststore的更多详细信息,请参见此答案:看起来您没有使用客户端证书 在这种情况下,不要在客户端应用程序中设置
javax.net.ssl.keystore
参数。仅导入信任库中的根(可能是中间)证书(默认情况下,cacerts
)也应该足够了
有关密钥库/信任库的更多详细信息,请在此回答中回答:如果已导入证书,请尝试此操作
Set PATH=<YOUR JRE/BIN>;%PATH%
设置路径=;%路径%
然后运行java客户端如果已导入证书,请尝试以下操作
Set PATH=<YOUR JRE/BIN>;%PATH%
设置路径=;%路径%
然后运行java客户端我建议您运行:
openssl s_client -connect remoteserver:443
假设远程服务器需要或请求客户端证书身份验证,它应该向您发送可接受CA的列表
您应该发送最终由这些CA之一签名的证书。
ssl规范不要求您发送CA,但是您应该向该CA发送证书和完整的中间链。
我的经验是,两个CA证书可能看起来非常相似。在这方面,迁移到2048位没有帮助。仔细检查
作为补充说明,您的客户端收到了坏证书警报。问题在于客户端发送的证书,而不是服务器证书的验证
(编辑)
我有没有提到你发送的证书必须是有效的?特别是,
- 未过期的结束日期和合理的开始日期
- 与您连接的计算机的公共DNS服务器名称相匹配的CN:服务器可能正在客户端IP上执行反向DNS查找,并将其与发送的证书的CN相匹配
openssl s_client -connect remoteserver:443
假设远程服务器需要或请求客户端证书身份验证,它应该向您发送可接受CA的列表
您应该发送最终由这些CA之一签名的证书。
ssl规范不要求您发送CA,但是您应该向该CA发送证书和完整的中间链。
我的经验是,两个CA证书可能看起来非常相似。在这方面,迁移到2048位没有帮助。仔细检查
作为补充说明,您的客户端收到了坏证书警报。问题在于客户端发送的证书,而不是服务器证书的验证
(编辑)
我有没有提到你发送的证书必须是有效的?特别是,
- 未过期的结束日期和合理的开始日期
- 与您连接的计算机的公共DNS服务器名称相匹配的CN:服务器可能正在客户端IP上执行反向DNS查找,并将其与发送的证书的CN相匹配
openssl s\u connect-connect SERVERHOST:443
,它返回了以下错误:CONNECTED(00000003)depth=1/C=US/O=trust,Inc./OU=www.trust.net/rpa通过引用合并/OU=(C)2009委托,Inc./CN=委托证书颁发机构-L1C验证错误:num=20:无法获取本地颁发者证书验证返回:0 3110:错误:14094412:SSL例程:SSL3_读取_字节:sslv3警报错误证书:s3_pkt.c:1052:SSL警报编号42 3110:错误:140790E5:SSL例程:SSL23_写入:SSL握手失败:s23_lib.c:226:
您遇到的OpenSSL错误获取是正常的:默认情况下,它没有可信证书列表,您应该检查它的-CApath
/-CAfile
选项。您好@Bruno,谢谢您提供的信息。我已经尝试了您所说的,删除了客户端应用程序中的javax.net.ssl.keystore参数,只导入了根,还尝试了javacacerts中的中间证书,但是我仍然得到了坏的证书错误。顺便说一下,我也尝试过使用openssl s\u connect-connect SERVERHOST:443
,它返回了以下错误:CONNECTED(00000003)depth=1/C=US/O=trust,Inc./OU=www.trust.net/rpa通过引用合并/OU=(C)2009委托,Inc./CN=委托证书颁发机构-L1C验证错误:num=20:无法获取本地颁发者证书验证返回:0 3110:错误:14094412:SSL例程:SSL3\u读取字节:sslv3警报