首页 > 解决方案 > 如何打印发送到服务器的 SSL 证书?

问题描述

我正在尝试调试以下错误:

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

我已经解决了这里描述的 SNI 扩展问题:SSL 握手警报:unrecognized_name error since upgrade to 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)连接之前尚未打开并且我无法读取证书,但我无法打开它,因为在点击OutputStreamInputStream点击帖子开头的错误之后。

如何打印HTTPSURLConnection要发送的证书?

标签: javassl-certificatehttpsurlconnection

解决方案


推荐阅读