我正在尝试使用https安全下托管的Web服务 .
我正在使用Java和glassfish,我收到以下错误:
INFO:HTTP传输错误:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:找不到匹配testdomain.com的名称
问题是这个特定的服务器用于测试,它使用的是 生产环境 证书(CN = domain.com)
我已经使用keytool -importcert将domain.com证书添加到我的glassfish域名的cacerts密钥库中,但它不起作用 .
我还尝试使用CN = testdomain.com创建自签名证书并将其添加到cacerts密钥库中,但它也无法正常工作......
那么如何配置Java / Glassfish来使用这个Web服务呢?
3 回答
服务器证书的CN应与客户端连接的URL中的域匹配 . 如果仍然不起作用,我会检查IP是否也映射到此主机名(反向DNS) . 验证它的是客户端 . 如果您想绕过此主机名验证,请参阅我的文章中的示例代码:http://jakubneubauer.wordpress.com/2011/09/06/java-webservice-over-ssl/
原则是您将自己的HostnameVerifier提供给服务客户端代理 .
自签名证书需要与其私钥一起安装在Web服务的密钥库中,并导入到Glassfish的信任库中 .
自签名证书需要安装在Java客户端的密钥存储区中 . 和testdomain.com应该使用dns解决 .