我有点羡慕我们的Ruby on Rails团队需要使用相同的Web服务,需要使用证书签署HTTPS请求。他们抓住一块宝石,用一行代码签署请求,菜肴就完成了......
但是,Java需要我们将证书导入我们的密钥库(试图避免这种情况),或者在内存中创建一个......这没关系。但是,一旦我这样做,似乎实际签署请求的唯一选择是使用HttpUrlConnection类。 HttpUrlConnection example我希望能够使用我现有的代码签署请求,该代码使用apache的DefaultHttpClient client = new DefaultHttpClient(); - 但是我没有看到使用内存密钥库让Http客户端签名请求的方法。
有人面对这个吗?
答案 0 :(得分:1)
看看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
指向的密钥库。请在HttpClient SSL Guide上了解详情。