У меня есть приложение, которое служит для получения и обновления данных на веб-сервере, и недавно владелец приложения решил переключиться на безопасное соединение из-за сохраненной личной информации.
Сервер уже настроен как SNI, и я проверил его с помощью digicert, сервер работает нормально и Кажется, настроен правильно, но не включает путь *.host.com в свои альтернативные имена (я не уверен, нормально это или нет для SNI).
iOS работала как часы, однако на Android я получаю эту ошибку:
java.security.cert.CertPathValidatorException: якорь доверия для пути сертификации не найден.
Мой текущий метод подключения выглядит так:
URL url = new URL(postURL);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
SSLContext sc;
sc = SSLContext.getInstance("TLS");
sc.init(null, null, new java.security.SecureRandom());
conn.setSSLSocketFactory(sc.getSocketFactory());
String userpass = "bob" + ":" + "12345678";
String basicAuth = "Basic " + Base64.encodeToString(userpass.getBytes(), Base64.DEFAULT);
conn.setRequestProperty("Authorization", basicAuth);
conn.setReadTimeout(7000);
conn.setConnectTimeout(7000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.connect();
InputStream instream = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
StringBuilder everything = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
everything.append(line);
}
JSONObject jsonObject = new JSONObject(everything.toString());
return jsonObject;
Я не совсем понимаю, в чем здесь проблема, но пытаюсь подключиться к https://sni.velox.ch/ дает мне длинный ответ, который кажется успешным.
Кроме того, у меня есть ключ pem для сертификата, но я не знаю, как добавить его в этом контексте.