我有一个Apache映射到两个外部DNs:
sub1.dn.com
sub2.dn.com两个映射到同一个IP。
每个都有自己的SSL证书。每个证书都显示CN和SAN作为原样和匹配(即sub1.dn.com表示sub1,而SAN用于sub2)。
但是,当我的Java代码试图连接到sub2.dn.com时,它失败了,因为: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alte r本机DNS名称与sub2.dn.com匹配。
启用Java调试输出显示了一些奇怪的东西--它似乎下载并使用了另一个(sub1)证书!
[3]: ObjectId: 2.5.29.17 Criticality=false
SubjectAlternativeName [
DNSName: **sub1.dn.com**
]因此,浏览器似乎很高兴,并且获得了正确的证书。但是Java总是看到sub1.dn.com证书,而不是其他证书。因此,在调用sub2时,它显然与之不匹配。
知道为什么Java会这么做吗?也许还有如何修复它!谢谢
发布于 2013-07-19 14:37:55
如果在同一个IP上运行了两个HTTPS域,则客户端需要支持SNI (服务器名称指示)来选择正确的证书。请注意,SNi只能使用TLS,因此不支持SSL。
因此,您应该检查是否使用了当前的Java 7支持SNI版本。
在服务器端,确保支持TLS和首选协议。
https://stackoverflow.com/questions/17748552
复制相似问题