2

我有一个 Apache 映射到两个外部 DN:

sub1.dn.com
sub2.dn.com

两者都映射到同一个IP。

每个都有自己的 SSL 证书。每个证书按原样显示 CN 和 SAN 并匹配(即 sub1.dn.com 对应 sub1,sub2 相同)。

但是,当我的 Java 代码尝试连接到sub2.dn.com 时,它会失败,并显示:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching sub2.dn。 com发现。

启用 Java SSL 调试输出显示了一些奇怪的东西 - 似乎 Java 下载并使用了另一个 (sub1) 证书!

[3]: ObjectId: 2.5.29.17 Criticality=false
SubjectAlternativeName [
  DNSName: **sub1.dn.com**
]

因此,浏览器似乎很高兴,并获得了正确的证书。但是 Java 总是看到 sub1.dn.com 证书,而不是另一个。所以当 sub2 被调用时它显然不匹配。

任何想法为什么Java会这样做?也许如何解决它!谢谢

4

1 回答 1

3

如果您在同一 IP 上运行两个 HTTPS 域,则客户端需要支持 SNI(服务器名称指示)才能选择正确的证书。请注意,SNi 只能使用 TLS,不支持 SSL。

Java 7 支持 SNI,因此您应该检查您是否使用当前的 Java 版本。

在服务器端确保支持 TLS 和首选协议。

于 2013-07-19T14:37:55.483 回答