当尝试使用 AXIS1.4 Wsdl2Java 工具为安装在安全 IIS 站点上的 Web 服务生成客户端代码时,我收到一个奇怪的错误。当我运行该工具时,出现以下 SSL 异常:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No
name matching XXXXXXX.net found
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1
591)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Clien
tHandshaker.java:975)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHa
ndshaker.java:123)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:5
16)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.jav
a:454)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.j
ava:884)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SS
LSocketImpl.java:1096)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketIm
pl.java:1123)
奇怪的是,这个错误仅在我运行 WSDL2Java 时发生,并且仅针对此特定服务器。我有另一个具有相同设置的网络服务器,并且一切正常。我三次检查了所有密钥库,看起来所有 CA 证书都已正确加载。我尝试使用具有相同设置的另一台服务器,并且能够毫无问题地生成客户端代理代码。奇怪的是,如果我使用从其他服务器生成的代码来对抗奇怪的服务器,一切都会正常工作。只有 Wsdl2Java 给我带来了问题。
主机的 DNS 名称(例如 machine1.mydomain.tld)和CommonName
证书中的值,因此CertificateException
。由此博客文章 http://www.jroller.com/hasant/entry/no_subject_alternative_names_matching:
- 如果您想通过使用 IP 作为主机名进行连接;
您的证书应包含该 ip 值作为主题备用名称值(类型为 IPAddress : key=7)。
- 如果您想通过使用 DNS 作为主机名进行连接;
您的证书应包含该 DNS 名称作为主题备用名称值(类型为 DNS : key=2)或 CommonName(CN) 值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)