我有点羡慕我们的 Ruby on Rails 团队,他们需要使用相同的 Web 服务,需要使用证书对 HTTPS 请求进行签名。他们拿起一颗 gem ,用一行代码签署请求,菜肴就完成了......
然而,Java 要求我们将证书导入到我们的 keystore 中(试图避免这种情况),或者在内存中创建一个证书......这很好。但是,一旦我这样做了,实际签署请求的唯一选择似乎是使用 HttpUrlConnection 类。 HttpUrlConnection example
我希望能够使用我现有的代码签署请求,该代码使用 apache 的 DefaultHttpClient client = new DefaultHttpClient(); - 但我没有找到让 Http 客户端使用内存 keystore 签署请求的方法。
有人遇到过这种情况吗?
最佳答案
看看AuthSSLProtocolSocketFactory.java 。您应该能够像这样执行 SSL 客户端身份验证(未经测试的代码);
Protocol.registerProtocol("https",
new Protocol("https", new AuthSSLProtocolSocketFactory(keystoreUrl, keystorePassword, truststoreUrl, truststorePassword), 443));
HttpClient httpclient = new HttpClient();
GetMethod httpget = new GetMethod("https://www.whatever.com/");
try {
httpclient.executeMethod(httpget);
System.out.println(httpget.getStatusLine());
} finally {
httpget.releaseConnection();
}
您的客户端证书进入由 keystoreUrl
指向的 keystore 。阅读更多相关信息 HttpClient SSL Guide .
关于java - 带有 HTTPS 证书的 HttpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19170440/