这个问题是关于我的一个项目。我在我的Raspberry Pi上运行了一个服务器端应用程序,而客户端应用程序应该在我所有其他设备上分发。以下exzerpt显示了客户端的代码。
我一直在挖掘互联网,我收集到的是最终没有100%安全存储私钥的方法。但是,保护KeyStore中的所有密钥被认为是一种良好的做法。以下是我的解决方案,但我的问题是: KeyStore文件,client.jks
,位于JAR内部,以及硬编码密码。 client.jks
包含服务器端的公钥和客户端的私钥。
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream(KEYSTORE), PASSWORD.toCharArray());
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
keyManagerFactory.init(keyStore, PASSWORD.toCharArray());
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509");
trustManagerFactory.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
SSLSocket connection = (SSLSocket) sslContext.getSocketFactory().createSocket("localhost", 6789);
System.out.println("Connection successful!");
字符串KEYSTORE
和PASSWORD
包含KeyStore文件和密码,两者都是硬编码的。
这真的是最好的做法还是我错过了什么?为每个连接创建的新SecureRandom
对象是否足以使连接安全?
致以最诚挚的问候,谢谢你的回答!