证书异常:没有主题备用名称

4

在调用HTTPS Web服务时,我遇到了以下异常。

com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present.

我正在从Java代码调用一个php webservice。证书上的CN(通用名称)即IP地址和我正在调用的IP地址不同。我已经将证书添加到Java的密钥库中。有人能帮我解决这个问题吗?我做错了什么吗?

CN是服务器IP地址。由于防火墙问题,我们使用外部IP地址来调用该服务器。


我通过@noloader的解决方案解决了这个异常,但现在我遇到了不同的错误。看起来这个错误是因为我已经在Java密钥库中添加了证书。我需要在信任库中添加它吗? - Swapnil Walivkar
2个回答

3

Java客户端在检查服务器的IP地址时通常严格遵守RFC 2818。这意味着IP地址必须在主体备用名称条目中,而不是在CN中。有关详细信息,请参阅此问题

修复证书以符合RFC 2818(即将IP地址放在IP地址SAN中)应该可以解决java.security.cert.CertificateException: No subject alternative names present.异常。

然而,由于您未使用证书中的IP地址调用服务器,因此仍会遇到问题。您有两个选择:

  • 如果您能够让某人修复证书,请为内部和外部IP地址分别添加两个SAN条目。这绝对是最佳选择(仅次于在该机器上设置名称,这可以更好地防止此类问题)。

  • 仅将该证书导入连接所使用的可信库并禁用主机名验证。请勿在一般情况下禁用主机名验证。禁用主机名验证的问题是任何有效的证书都可以冒充任何其他证书,这可能被用于进行MITM攻击。如果您仅信任要连接的唯一服务器的证书(这可以通过为此目的设置单独的信任存储来实现),则可以限制此风险。通常情况下,编写这些异常情况的代码会导致糟糕的遗留代码,稍后可能会有人使用不安全。


3
证书上的通用名称(CN)即IP与我调用的IP不同。
当通用名称(CN)中存在名称时,它也必须存在于主题备用名称(SAN)中。您的证书格式不正确(可能还有其他问题)。请参见公共可信证书的发放和管理基线要求,第9节(第9页和第10页):
9.2.2 主题通用名称字段 证书字段:主题:commonName(OID 2.5.4.3) 必需/可选:已弃用(不鼓励使用,但不禁止使用) 内容:如果存在,则此字段必须包含单个IP地址或完全限定域名,该域名是包含在证书的subjectAltName扩展中的值之一(请参见第9.2.1节)。
Bruno可能可以引用RFC 6125的相关部分。
HTTP传输错误:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:未提供主题备用名称。

其实,RFC 6125对IP地址没有做任何规定,它在"out of scope" section中。你引用的CA浏览器基线规范中的那一节更多地是关于在存在SAN时CN中要放什么,而不是关于使用IP地址时需要有SAN的事实。此外,该规范未被Java使用,有趣的是,浏览器通常不遵循RFC 2818(通过接受CN中的IP地址而不将其放入SAN)。 - Bruno
这只是我的个人意见,但我不确定我会过多地参考CA浏览器论坛的文件(它们似乎更与推动EV证书有关,很可能涉及到一些CA的利益)。毕竟,你链接的基线要求没有一次提到RFC 2818,并且几乎不知道“互联网”和“Web”之间的区别(请参见介绍:“*[...仅...]通过互联网访问的服务器进行身份验证。未来版本可能涵盖代码签名、S/MIME、时间戳、VoIP、IM、Web服务等类似要求!"*) - Bruno
@noloader:谢谢,这对我有用。但现在我遇到了新的异常。javax.xml.ws.soap.SOAPFaultException: SOAP-ERROR: Parsing WSDL: Couldn't find <definitions> in '/var/www-ssl/ingram/wsdls/deviceprofileInfoAnother.wsdl'。我已经在Java密钥库中添加了证书,我认为我需要将其添加到信任库中。请帮我解决这个问题... - Swapnil Walivkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接