【问题标题】:java.security.cert.CertificateException when connecting to server with multiple certificates使用多个证书连接到服务器时出现 java.security.cert.CertificateException
【发布时间】: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


    【解决方案1】:

    在同一个 IP 地址和端口上拥有多个证书依赖于服务器名称指示。

    您的服务器支持它,但您的客户端也需要支持它。

    客户端对 SNI 的支持仅在 Java 7 的 Java 中引入(请参阅 release notes(*)。我猜您使用的是 Java 6 或更低版本,否则您使用 URLConnection 的简单示例应该像这样开箱即用。

    (如果您使用其他客户端库,例如 Apache HTTP 客户端,则可能还需要其他设置,具体取决于版本。)

    (*) 这是在服务器端在Java 8 中引入的,但这不是你的问题。

    【讨论】:

    • 非常感谢,确实,我使用 Java 6 运行了示例。在生产环境中,我使用 Java 7,但由于其他 SSL 问题而禁用了 SNI 支持(为了忽略 unrecognized_name 警告,这在 Java 7 中成为例外情况)。现在我看到了关闭 SNI 的代价。
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多