带有自定义公钥的Java TLS / SSL套接字?

时间:2017-02-08 07:53:33

标签: java sockets ssl

我如何在两个java SE应用程序之间建立套接字连接,其中密钥不是来自受信任的商店或证书,而是在应用程序本身中进行硬编码。

e.g。公钥在客户端上硬编码,服务器上的私钥。如何在仍然使用标准TLS / SSL套接字api的情况下进行此操作?

2 个答案:

答案 0 :(得分:0)

您可以从证书和密钥文件生成JKS(Java Key Store),并将其导入JRE。

您可以使用keytool生成JKS并将其导入Keystore。

使用命令:keytool -import -alias <Your Alias> -file CertificateFile.cer -keystore <currentKeyStore>

默认情况下,您的currentKeyStore位于:JAVA_HOME-> JRE ->lib-> security-> cacerts

答案 1 :(得分:0)

生成自签名证书,私钥转到服务器,带公钥的证书转到客户端。之后,您需要在客户端正确设置SSLContext。这基本上可以通过3种方式实现。

1 - 将服务器证书CA(用于自签名CA ==证书)添加到客户端$JRE/lib/security/cacerts文件中。这不太好,因为在客户端进行JRE更新后,您可能会丢失此更改。

2 - 将服务器证书放入密钥库并设置环境变量(使用System.setProperty-D命令行选项)javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword以及(可选){{ 1}},请查看此答案以获取详细信息https://stackoverflow.com/a/5871352/1516873

3 - 手动设置SSLContext trustStoreManager,例如:

javax.net.ssl.trustStoreType