gpt4 book ai didi

java - SSLSocketFactory 和 HttpsURLConnection 在哪里工作不同?

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:48 27 4
gpt4 key购买 nike

我有一台带有自签名证书的服务器。我已经在我的计算机上使用 keytool 导入它并使用

-Djavax.net.ssl.trustStore=blabla

编译参数。当我尝试运行以下代码时:

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket("MY_URL_DIGITS", 443);
OutputStream os = socket.getOutputStream();
os.write("Test request \n".getBytes());
os.flush();
os.close();

一切顺利,我可以在服务器上看到“测试请求”。但是,当我运行时:

URL url = new URL("https://MY_URL_DIGITS");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
OutputStream os = con.getOutputStream();
os.write("Test request \n".getBytes());
os.flush();
os.close();

我有

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present

那么这两个片段之间的主要区别是什么?

最佳答案

默认情况下,SSLSocket 只检查您是否信任证书。 HttpsURLConnection 检查您是否信任证书,并检查证书是否表明它来自您实际导航到的同一位置。要使 HttpsURLConnection 成功,证书必须指定与您要连接到的服务器相同的主题备用名称 (SAN)。在这种情况下,SAN 需要是“dns:MY_URL_DIGITS”,其中“dns”部分表示您指定的是主机名而不是 IP 地址。

如果您需要有关如何使用主题备用名称创建证书的更多信息,请参阅:

how to add subject alernative name to ssl certs?

关于java - SSLSocketFactory 和 HttpsURLConnection 在哪里工作不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206713/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com