尝试使用Java中的Apache HttpClient进行GET时出错

时间:2014-07-31 09:07:08

标签: java rest apache-httpclient-4.x

我正在尝试编写一个Java代码,我需要使用Apache HttpClient从RESTful Api获取数据。 我的Web服务器具有自签名证书。我使用的代码如下:

public class WebClientDevWrapper {

    public static HttpClient wrapClient(HttpClient base) {
        try {
            ClientConnectionManager ccm = base.getConnectionManager();
            SSLSocketFactory sslsf = new SSLSocketFactory(new TrustSelfSignedStrategy());
            Scheme https = new Scheme("https", 444, sslsf);
            ccm.getSchemeRegistry().register(https);
            return new DefaultHttpClient(ccm, base.getParams());
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
    public static void main(String[] args) throws ClientProtocolException, IOException{
        HttpClient client ;
        client = new DefaultHttpClient();
        client = WebClientDevWrapper.wrapClient(client);
        HttpGet request = new HttpGet("https://localhost/restapi");
        HttpResponse response = client.execute(request);
        BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));
        String line = "";
        while ((line = rd.readLine()) != null) {
          System.out.println(line);
        }
    }
}

运行此代码时,我收到以下错误: " javax.net.ssl.SSLException:证书不包含CN或DNS subjectAlt"

请帮忙。

1 个答案:

答案 0 :(得分:0)

您需要在JAVA中导入SSL证书。使用以下行

<JAVA_HOME>\bin\keytool -import -v -trustcacerts -alias [Your Alias name] -file [Your Certificate location] -keystore [Keystore location] -keypass [Your Password] -storepass [Your Password]