获取公共证书时Java套接字问题

时间:2018-04-12 05:28:56

标签: java sockets

我正在编写一个Java客户端,它将请求发送到SSL套接字上的CA(证书代理)服务器。服务器使用c ++,通信将使用TLS协议。

一旦我通过客户端在套接字上发送请求,服务器就会以Not Authorized响应并向客户端提供可信证书。现在,我已将包含(RSA私钥+证书)的可信证书保存到Java密钥库中,并再次尝试将请求发送到服务器,但仍未识别该请求并再次落入Not authorized

什么无法理解我错过了。我是否需要将一些带有客户端套接字请求的额外参数传递给服务器,以便我可以识别。一旦获得授权?我需要服务器的公共证书,我可以存入密钥库。

1 个答案:

答案 0 :(得分:0)

密钥库需要服务器证书+服务器密钥,使用以下命令生成密钥库

openssl pkcs12 -export -out keystore.pkcs12 -in bserver_cert.pem -inkey bserver_pk.pem

keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS

另请注意,无论您的证书条目是否存在于cacerts文件中,使用以下命令位于jdk / jre / lib / security / cacerts中的cacerts

keytool -list -v -keystore /path/to/cacerts  > java_cacerts.txt

看看java_cacerts.txt。通过搜索匹配的序列号,查看它是否包含浏览器中存在的相同证书。

如果它不存在,则可能是错误的原因,我们可以通过添加浏览器中找到的证书来解决此问题。 返回浏览器,导出根CA.选择" X.509证书(DER)"类型,因此导出的文件具有der扩展名。

假设该文件名为example.der,请选择别名'示例'这个证书。接下来导入文件。

keytool -import -alias example -keystore  /path/to/cacerts -file example.der

还要检查是否像这样设置环境变量

-Djavax.net.ssl.trustStore=/home/sachin/softwares/jdk1.8.0_51/jre/lib/security/cacerts
-Djavax.net.ssl.trustAnchors=/home/sachin/softwares/jdk1.8.0_51/jre/lib/security/cacerts 

愿这对你有所帮助!!!