Я тестирую javax.net.ssl.HttpsURLConnection. Поскольку программа делает запрос HTTPS, поэтому я подумал, что должен сделать setSSLSocketFactory, чтобы сделать запрос работы.Java HttpsURLConnection успешно выполнен без установки setSSLSocketFactory
НО программа работать нормально без setSSLSocketFactory установки:
Вот мой код:
public class HttpsTest {
public static void main(String[] args) {
try {
URL requestUrl = new URL("https://www.google.com/?gws_rd=ssl");
HttpsURLConnection conn = (HttpsURLConnection) requestUrl.openConnection();
// conn.setSSLSocketFactory(sslSocketFactory);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
System.out.println("getResponseCode: " + conn.getResponseCode());
br.close();
conn.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
// RESULT:
// Some HTML return by https://www.google.com/?gws_rd=ssl
// getResponseCode: 200 OK
}
}
Что я неправильно о Https? Почему программа работала без настройки sslSocketFactory? (HttpsURLConnection необходимо sslSocketFactory для проверки открытого сертификата SSL/TLS, отправленного сервером)
Спасибо!
Спасибо EJP! – Loc
Hi EJP: Что делать, если фабрика по умолчанию не может проверить открытый сертификат, отправленный сервером? Должен ли я обрабатывать этот случай для моего запроса Https? Благодаря! – Loc
Тогда у вас есть два варианта: используйте setSSLSocketFactory() или добавьте сертификат сервера или один из центров сертификации в цепочке сертификатов сервера к хранилищу ключей JVM по умолчанию как «доверенный». Процедура для последнего будет специфичной для платформы. –