我希望能否就今天遇到的问题得到一些帮助:
我正在尝试使用我们客户的服务器验证我的客户端,我可以通过发出以下命令来执行此操作:
curl -v -k -H“Content-Type:application / json”--key privkey.pem --cert pub.cer --data @ search.json https:// .... < /强>
从上面的命令可以看出,我有以下内容:
密钥库
现在,我正在尝试在java中做同样的事情,但我不知道如何完成它。我读过的所有指南告诉我,我应该使用我拥有的密钥库。但是在遵循这些指南时我遇到了障碍。
我可以帮助或指出某个方向,我会非常感激。
提前致谢, 彼得
答案 0 :(得分:2)
听起来您需要使用HTTPS URL连接来连接需要客户端身份验证的服务器。你需要做两件事才能从那里到达那里。
首先,您需要从私钥和公共证书创建Java样式密钥库。详细说明可以在这个问题的答案中找到:
importing an existing x509 certificate and private key in Java keystore to use in ssl
您还需要将服务器的证书导入密钥库。
其次,您需要编写Java代码才能使用新创建的密钥库。通过使用密钥库创建SSLContext,并将HTTPS URL连接设置为使用此上下文中的套接字工厂来实现此目的 - 具体如下:
SSLContext sslContext
= SSLConnections.getSSLContext(keyStoreFile, keyStoreFilePassword);
httpsURLConnection.setSSLSocketFactory(sslContext.getSocketFactory());
这应该在创建HttpsURLConnection之后但在连接之前完成 - 也就是说,在你读取或写入它之前,或者在它上面调用connect()之前。
答案 1 :(得分:1)
这是我用来连接的代码。一旦执行代码con.coonect(),代码就会抛出异常。对于堆栈跟踪。
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File("C:\\keystore"));
trustStore.load(instream, "x".toCharArray());
instream.close();
URL url = new URL(httpsURL);
con = (HttpsURLConnection) url.openConnection();
SSLContext sslContext
= SSLContexts
.custom()
.useProtocol("TLSv1")
.loadTrustMaterial(trustStore, new TrustSelfSignedStrategy())
.build();
con.setSSLSocketFactory(sslContext.getSocketFactory());
con.connect();`
可以通过访问以下链接找到堆栈跟踪:
http://50.19.106.70/stacktrack.txt