我正在编写一个简单的 Java 客户端/服务器程序,其中只需与服务器建立连接并向其发送一个句子,然后服务器发送相应的响应。这实际上是一个直接的例子。
在上述场景中,我正在寻找基于 SSL 的相互身份验证。 我需要在 java 中实现它。
如果您有任何示例或如何在 Java 中实现相同的示例,请建议我。
最佳答案
当您说“客户端/服务器”时,是指使用 Socket 吗?但 SSL 通常用于 HTTP 连接。我还没有看到它用于套接字连接。 这是 HTTP 的示例: 您必须将 PKCS12 证书加载到 keystore 中,并将该存储提供给 SSLContext。
private SSLSocketFactory getFactory( File pKeyFile, String pKeyPassword ) throws ... {
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509);
KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream keyInput = new FileInputStream(pKeyFile);
keyStore.load(keyInput, pKeyPassword.toCharArray());
keyInput.close();
keyManagerFactory.init(keyStore, pKeyPassword.toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());
return context.getSocketFactory();
}
URL url = new URL("someurl");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(getFactory(new File("file.p12"), "secret"));
关于Java相互认证-客户端服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23429775/