1

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

然而,Java 要求我们将证书导入我们的密钥库(试图避免这种情况),或者在内存中创建一个……这很好。但是,一旦我这样做了,似乎真正签署请求的唯一选择就是使用 HttpUrlConnection 类。HttpUrlConnection 示例

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

有人遇到过这个吗?

4

1 回答 1

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 指南上阅读更多相关信息。

于 2013-10-04T00:42:50.873 回答