Как распечатать SSL-сертификаты, которые отправляются на сервер? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь отладить следующую ошибку:

javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
    at sun.security.ssl.ClientHandshaker.handshakeAlert
    at sun.security.ssl.SSLSocketImpl.recvAlert
    (...)

Я уже возглавлял описанную здесь проблему расширения SNI: Предупреждение рукопожатия SSL: ошибка unrecognized_name с момента обновления до Java 1.7.0

Я все еще получаю сообщение об ошибке, поэтому я хочу напечатать SSL-сертификаты, которые я отправляю на сервер для отладки.Вот мой код:

URL url = new URL(text);
HttpsURLConnection conn = (HttpsURLConnection) 
url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-length", String.valueOf(query.length()));

DataOutputStream os = new DataOutputStream(conn.getOutputStream());
os.writeBytes(query);

Certificate[] certs = conn.getLocalCertificates();
for (int i = 0; i < certs.length; i++) {
     System.out.println("########### LocalCertNr " + String.valueOf(i) + " ##############");
     System.out.println(certs[i].toString());
}

У меня проблемы с тем, что до нажатия os.writeBytes(query) соединение еще не открыто, и я не могу прочитать сертификаты, но не могу открыть его, потому что после нажатия OutputStreamили InputStream обнаруживает ошибку с начала сообщения.

Как распечатать сертификаты, которые HTTPSURLConnection отправит?

...