JAX-WS客户端的Java-ssl证书

JAX-WS客户端的Java-ssl证书,java,ssl,ssl-certificate,keytool,Java,Ssl,Ssl Certificate,Keytool,我已经使用keytool从服务器导入了自签名证书,并且一切都很好 问题是,只有当CN名称为“example.corp.org”时,它才适用于JAX-WS客户端的https:url。 如果尝试使用服务器IP地址,则会出现错误: Exception in thread "AWT-EventQueue-0" com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.S

我已经使用keytool从服务器导入了自签名证书,并且一切都很好

问题是,只有当CN名称为“example.corp.org”时,它才适用于JAX-WS客户端的https:url。 如果尝试使用服务器IP地址,则会出现错误:

Exception in thread "AWT-EventQueue-0"     com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
我理解为什么会出现错误,但出于各种原因,我需要使用服务器IP地址来连接,而不是CN名称

有人有什么建议吗

谢谢
Alexis

您应该在证书中添加受试者备选名称

subjectAltName=IP:serverIp

某种程度上解决它。。。在这里找到了答案:


我怎么能这么做?我猜这是用keytool完成的?如果我是正确的,我可以在java代码中做一些变通吗?我还应该说,我无法控制从服务器下载的自签名证书。
HostnameVerifier myhostnameverifier = new HostnameVerifier() 
{
@Override
public boolean verify(String urlHostName, SSLSession session) 
{
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(myhostnameverifier);