在我的这个项目中,我需要在客户端和服务器之间使用SSL/TLS实现安全连接。我发现了一篇很好的文章,所以我设法完成了我的任务,没有任何问题。SSL/TLS动态密钥生成
我的问题很简单,但我无法在任何地方找到答案。在这种特殊情况下,我的客户端在SSL协议中具有相同的密钥,该协议是通过上一个链接的教程创建的,并放入某种文件中。这个过程中潜在的问题是有人可以访问该文件,并且由于每个客户端都有该密钥,所以有人可以监听所有连接。
我想问的是,每当某个客户端想要访问服务器并将生成的密钥放入服务器信任库时,是否有机会动态生成密钥?
UPDATE
public static final String PATH_TO_ANDROID_KEYSTORE = "and/client.bks";
public static final String PATH_TO_ANDROID_TRUSTSTORE = "and/clienttruststore.bks";
String pathToKeyStore = PATH_TO_ANDROID_KEYSTORE;
String pathToTrustStore = PATH_TO_ANDROID_TRUSTSTORE;
KeyStore keyStoreKeys = KeyStore.getInstance(keyStoreType);
keyStoreKeys.load(Gdx.files.internal(pathToKeyStore).read(), passphrase);
KeyStore keyStoreTrust = KeyStore.getInstance(keyStoreType);
keyStoreTrust.load(Gdx.files.internal(pathToTrustStore).read(), passphrase);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStoreKeys, passphrase);
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStoreTrust);
这是客户端代码和好像客户在他们的信任库已出口服务器的证书,但他们实际使用正在使用的OpenSSL工具生成一次密钥库中相同的私钥。
我认为他们可能共享相同的私钥,因为我只使用openssl工具生成了一次,但我也认为他们的信任库中有一个导出的服务器证书,因为这是给定文章中的目标。我使用提供的客户端代码进行了更新,因此可能会更清楚一些。 如果情况是我的客户只能共享一个私钥,那我怎么能在通信过程中获得他们自己的私钥? 顺便说一句,我真的很感激你的气喘吁吁的解释! –
您必须为客户端的每个副本分配一个不同的私钥,或者在安装时生成自己的私钥,并在某种程度上安全地在首次使用时向服务器注册该私钥。 – EJP
你能想到一些我可能想看看的代码示例吗? –