java 禁用 HTTPS 连接的 SSL 证书验证?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12170396/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 07:53:15 来源:igfitidea点击:
Disable SSL certificate validation of HTTPS connection?
提问by Hesam
When I want to open an HTTPS connection I get SSL Exception. How to set HttpURLConnection in a way to doesn't be sensitive to this exception?
当我想打开 HTTPS 连接时,出现 SSL 异常。如何以对这个异常不敏感的方式设置 HttpURLConnection?
My code is:
我的代码是:
private String getData() {
String response = null;
String connection = "https://www.kamalan.com/";
try {
URL url = new URL(connection);
Log.i(TAG, "Try to open: " + connection);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
int responseCode = conn.getResponseCode();
Log.i(TAG, "Response code is: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
if (in != null) {
StringBuilder strBuilder = new StringBuilder();
int ch = 0;
while ((ch = in.read()) != -1)
strBuilder.append((char) ch);
// get returned message and show it
response = strBuilder.toString();
Log.i("JSON returned by server:", response);
}
in.close();
} else {
Log.e(TAG, "Couldn't open connection in getResepiItems()");
}
} catch (SSLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
回答by Raja Jawahar
Follow the below method, it works for me.
按照下面的方法,它对我有用。
URL url = new URL("Your URL");
HttpsURLConnection urlConnection =(HttpsURLConnection) url.openConnection(); urlConnection.setSSLSocketFactory(SSLCertificateSocketFactory.getInsecure(0, null));
urlConnection.setHostnameVerifier(getHostnameVerifier());
InputStream is = urlConnection.getInputStream();
OutputStream os = new FileOutputStream(downloadedFile);
byte[] data = new byte[1024];
int count;
while ((count = is.read(data)) != -1) {
os.write(data, 0, count);
}
os.flush();
os.close();
is.close();
The below method for set the Hostname
以下设置主机名的方法
private HostnameVerifier getHostnameVerifier() {
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv =
HttpsURLConnection.getDefaultHostnameVerifier();
return hv.verify("com.example.com", session);
}
};
return hostnameVerifier;
}