我使用OpenSSL创建了一个C ++服务器和客户端。我已经设置了一个根证书,我已经签署了一个客户端和一个服务器证书。一切正常我可以双向连接和发送数据。
然后我用Java创建了一个客户端应用程序。按照本教程从我的clientcert.pem和clientkey.pem中生成JKS证书 http://www.agentbob.info/agentbob/79-AB.html
jave代码如下所示:
SSLSocketFactory factory = null;
try {
SSLContext ctx;
KeyManagerFactory kmf;
KeyStore ks;
char[] passphrase = "android".toCharArray();
ctx = SSLContext.getInstance("TLS");
kmf = KeyManagerFactory.getInstance("SunX509");
ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("keystore.ImportKey"), passphrase);
kmf.init(ks, passphrase);
ctx.init(kmf.getKeyManagers(), null, null);
factory = ctx.getSocketFactory();
} catch (Exception e) {
e.printStackTrace();
}
SSLSocket socket;
try {
socket = (SSLSocket) factory.createSocket("server", 10443);
PrintWriter out;
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())));
out.println("Hello from SSL client!");
out.println();
out.flush();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
然而,当它尝试连接时,我在调用SSL_accept(ssl)时在我的C ++服务器中收到错误。我检查了错误并打印出来: 错误:14094416:SSL例程:SSL3_READ_BYTES:sslv3警报证书未知
知道证书失败的原因吗? 是否有任何教程可以显示如何为OpenSSL和Java创建证书?