0

我有这样的java代码:

        URL url = new URL(endPoint);
        String encoding = Base64.encodeBase64String(this.key.getBytes());

        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);

这是打开一个 ssl 连接。假设endPoint确实使用自签名证书并充当原始网站。是否可以在 Java 代码中防止此类事情发生?

提前致谢。

4

1 回答 1

2

默认情况下,Java 中的 SSL 实现会根据包含在 Java VM 中的受信任证书颁发机构列表进行检查。除非您扩展默认信任库、在运行时指定不同的信任库或提供您自己的 a TrustManagerand/or实现,否则HostnameVerifier您将无法使用自签名证书与服务器建立 SSL 连接。

如果您在建立连接后出于某种原因需要访问服务器证书,您可以通过以下方式获取这些证书HttpsURLConnection

URL url = new URL("https://www.google.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.connect();

for(Certificate crt : conn.getServerCertificates()) {
    System.out.println(crt);
}
于 2012-12-11T11:40:15.903 回答