Ответ 1
- Используется соединение HTTPS.
- Поведение по умолчанию
- Не уверен, но читайте ниже.
Я просто написал код в качестве теста (см. все ниже). Что в итоге происходит, так это вызов URL.openConnection() даст вам класс libcore.net.http.HttpsURLConnectionImpl.
Это реализация HttpsURLConnection, но HttpsURLConnection наследуется от HttpURLConnection. Таким образом, вы видите полиморфизм на работе.
Посмотрев дальше в отладчик, кажется, что класс использует методы factory по умолчанию.
hostnameVerifier = javax.net.ssl.DefaultHostnameVerifier
sslSocketFactory = org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl
Основываясь на этом, похоже, что используется поведение по умолчанию. Я не знаю, означает ли это, если вы доверяете всему, но вы определенно устанавливаете соединение HTTPS.
Документация, в которой видны подсказки при подключении, будет автоматически доверять ЦС, которые хорошо известны, но не самоподписываются. (см. ниже) Я не тестировал это, но у них есть пример кода на как это сделать здесь.
Если приложение хочет доверять центру сертификации (CA) сертификаты, не входящие в систему, должны указывать собственный X509TrustManager через набор SSLSocketFactory, установленный на HttpsURLConnection.
Runnable r = new Runnable() {
public void run() {
try {
URL test = new URL("https://www.google.com/");
HttpURLConnection connection = (HttpURLConnection) test.openConnection();
InputStream is = connection.getInputStream();
StringWriter sw = new StringWriter();
String value = new java.util.Scanner(is).useDelimiter("\\A").next();
Log.w("GOOGLE", value);
} catch(Exception e) {
Log.e("Test", e.getMessage());
}
}
};
Thread t = new Thread(r);
t.start();