SSL套接字php代码需要转换为Java [英] SSL socket php code needs to be converted to Java
本文介绍了SSL套接字php代码需要转换为Java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个Pem文件,我使用这个PHP代码连接到c ++ SSL服务器,但现在我需要这个用Java编写的PHP代码
I have a Pem file that I use with this php code to connect to a c++ SSL server, but now I need this php code written in Java
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'cert.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('ssl://serverURL', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp) {
print "Failed to connect $err $errstr\n";
return;
}
任何想法如何在Java中读取cert.pem文件然后建立SSL套接字?
Any ideas how to read in the cert.pem file in Java and then establish the SSL socket?
谢谢!
推荐答案
你需要在您的课程路径中 Bouncy Castle 。
You will need Bouncy Castle in your classpath.
PEMReader pr = new PEMReader(new FileReader("cert.pem"));
X509Certificate cert = (X509Certificate) pr.readObject();
PEMReader kr = new PEMReader(new FileReader("privkey.pem"),
new PasswordFinder() {
public char[] getPassword() {
return "passphase".toCharArray();
}
});
KeyPair key = (KeyPair) kr.readObject();
KeyStore ksKeys = KeyStore.getInstance("JKS");
ksKeys.load(null, "passphase".toCharArray());
ksKeys.setCertificateEntry("MyCert", cert);
ksKeys.setKeyEntry("Mykey", key.getPrivate(),
"passphase".toCharArray(), new Certificate[]{cert});
KeyManagerFactory kmf = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ksKeys, "passphase".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ksKeys);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
Socket socket = sslContext.getSocketFactory().createSocket(
"localhost", 4433);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()));
out.println("Hello World");
System.out.println(in.readLine());
out.close();
in.close();
如果你运行 openssl s_server -Verify cert.pem -cert cert.pem -key privkey.pem
,它应显示:
If you run openssl s_server -Verify cert.pem -cert cert.pem -key privkey.pem
, it should show:
depth=0 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=AU/ST=Some-State/O=Internet Widgits Pty Ltd
verify return:1
Hello World
DONE
shutting down SSL
CONNECTION CLOSED
ACCEPT
这篇关于SSL套接字php代码需要转换为Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文