【发布时间】:2014-06-05 13:16:59
【问题描述】:
我正在尝试创建与网站 (https://www.otten-markenshop.de/) 的 SSL 连接,并且使用浏览器或 curl 可以正常工作,但是 wget 和 Java 都无法连接。我最感兴趣的是为什么 Java 代码会失败。 以下是错误详情:
使用 WGET:
wget https://www.otten-markenshop.de/
结果
Resolving www.otten-markenshop.de... 217.24.213.167
Connecting to www.otten-markenshop.de|217.24.213.167|:443... connected.
ERROR: certificate common name “www.plentymarkets.eu” doesn’t match requested
host name “www.otten-markenshop.de”.
使用 Java:
public static void main(String[] args) throws IOException
{
URL url = new URL("https://www.otten-markenshop.de");
URLConnection connection = url.openConnection();
connection.getInputStream();
}
结果:
Exception in thread "main" javax.net.ssl.SSLHandshakeException:
java.security.cert.CertificateException: No subject alternative DNS
name matching www.otten-markenshop.de found.
我还注意到我在浏览器中收到的证书与我在运行 Java 程序时收到的证书不同:
在浏览器中:
Common Name (CN):
www.otten-markenshop.de
Subject Alternative Name:
DNS Name=www.otten-markenshop.de
DNS Name=otten-markenshop.de
在 Java 中:
Common Name (CN):
www.plentymarkets.eu
Subject Alternative Name:
如果我尝试通过 IP 地址访问主机,我在 Java 中获得的证书与在浏览器中获得的证书相同:https://217.24.213.167
因此,服务器似乎安装了多个证书,并使用虚拟主机来检测应该使用哪个证书。但是由于某种原因,当客户端是 Java 或 wget 时,此检测不起作用。
任何想法为什么会发生这种情况?
附:我无权访问目标服务器以查看其配置方式。
P.P.S.我更感兴趣的是理解为什么简单的 Java 代码不起作用,而不是通过例如禁用 SSL 验证来使其工作。毕竟我可以毫无问题地通过 HTTP 连接到上述 URL。
【问题讨论】:
标签: java ssl certificate wget