2012-06-10 75 views
4

我有一个带有'.pfx'扩展名和密码的文件。JAVA - 使用SSL证书和HTTPS的简单GET请求

我需要做的是发送一个简单的GET请求到web服务并读取响应正文。

我需要实现一个类似的方法:

String getHttpResponse(String url, String certificateFile, String passwordToCertificate){ 
    ... 
} 

我也试过证书“没有密码”转换为格式使用OpenSSL:已

Convert a PKCS#12 file (.pfx .p12) containing a private key and certificates to PEM: 
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes 

这样的替代implementaion在我的方法可能是:

String getHttpResponse(String url, String certificateFile){ 
    ... 
} 

我会很感激你的帮助,我SPE但是我还没有找到一个可以帮助我的例子,看起来我对于SSL和其他一些基本的假设没有认识到问题。

+0

可以让我知道环境(服务器),你的工作吗? –

+0

该应用程序将在Apache Tomcat上运行。我发送请求的服务器是某种返回XML的SOAP web服务。 – dstronczak

回答

8

我终于找到了一个很好的解决方案(没有创建自定义SSL上下文):

String getHttpResponseWithSSL(String url) throws Exception { 
    //default truststore parameters 
    System.setProperty("javax.net.ssl.trustStore", "/usr/lib/jvm/java-6-openjdk/jre/lib/securitycacerts"); 
    System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 
    System.setProperty("javax.net.ssl.trustStoreType", "JKS"); 

    //my certificate and password 
    System.setProperty("javax.net.ssl.keyStore", "mycert.pfx"); 
    System.setProperty("javax.net.ssl.keyStorePassword", "mypass"); 
    System.setProperty("javax.net.ssl.keyStoreType", "PKCS12"); 


    HttpClient httpclient = new HttpClient(); 

    GetMethod method = new GetMethod(); 
    method.setPath(url); 

    int statusCode = httpclient.executeMethod(method); 
    System.out.println("Status: " + statusCode); 

    method.releaseConnection(); 

    return method.getResponseBodyAsString(); 
} 
+0

这样,设置是全局性的,只能读取一次。 – Bruno

+0

这对我来说很好。但是 - 如果我需要更改运行时的设置呢?你认为再次设置System.setProperty会是非常错误的吗? – dstronczak

+0

这并不是说它会是“错误的”,但更有可能它不起作用。 – Bruno

0

这个问题应该有你的答案:

HTTPClient-1.4.2: Explanation needed for Custom SSL Context Example

您需要使用的HttpClient创建请求,然后使用一个密钥管理器。

+0

我试过这样做,但我不确定应该使用什么文件作为“信任库”... – dstronczak

+0

根据[this](http://docs.oracle.com/javase/6/docs/api /java/security/KeyStore.html#load%28java.io.InputStream,%20char[]%29),它可以为空以创建一个空的密钥库。 – plasma147