我如何在两个java SE应用程序之间建立套接字连接,其中密钥不是来自受信任的商店或证书,而是在应用程序本身中进行硬编码。
e.g。公钥在客户端上硬编码,服务器上的私钥。如何在仍然使用标准TLS / SSL套接字api的情况下进行此操作?
答案 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.trustStore
,javax.net.ssl.trustStorePassword
以及(可选){{ 1}},请查看此答案以获取详细信息https://stackoverflow.com/a/5871352/1516873
3 - 手动设置SSLContext trustStoreManager,例如:
javax.net.ssl.trustStoreType