java 尝试读取HttpResponse的内容时SSLException
时间: 2023-06-17 15:04:09 浏览: 85
当使用Java读取HttpResponse的内容时,如果遇到SSLException,可能是因为服务器证书无法验证,或者Java没有信任该证书。
一种解决方法是通过使用SSLContext来忽略证书验证,但这可能会导致安全漏洞,因此建议尽可能使用受信任的证书。
以下是使用SSLContext忽略证书验证的示例代码:
```java
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, new SecureRandom());
CloseableHttpClient httpClient = HttpClients.custom().setSSLContext(sslContext).build();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
```
另外,如果使用的是自签名证书,还需要将证书添加到Java的信任存储中。可以使用keytool命令将证书添加到信任存储中:
```
keytool -import -alias mycert -file server.crt -keystore cacerts
```
其中,server.crt为服务器证书的文件名,cacerts为Java信任存储的文件名。默认情况下,cacerts文件位于$JAVA_HOME/jre/lib/security/cacerts。执行keytool命令时需要输入Java信任存储的密码,默认为"changeit"。
阅读全文