带有HTTPS证书的HttpClient

时间:2013-10-03 22:47:44

标签: java csr

我有点羡慕我们的Ruby on Rails团队需要使用相同的Web服务,需要使用证书签署HTTPS请求。他们抓住一块宝石,用一行代码签署请求,菜肴就完成了......

但是,Java需要我们将证书导入我们的密钥库(试图避免这种情况),或者在内存中创建一个......这没关系。但是,一旦我这样做,似乎实际签署请求的唯一选择是使用HttpUrlConnection类。 HttpUrlConnection example

我希望能够使用我现有的代码签署请求,该代码使用apache的DefaultHttpClient client = new DefaultHttpClient(); - 但是我没有看到使用内存密钥库让Http客户端签名请求的方法。

有人面对这个吗?

1 个答案:

答案 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上了解详情。