[英]SSLSession peer not authenticated
我从简单的SSLSocket(Java 8 u45)连接到具有有效证书和域的站点时遇到证书验证错误。
String hostName = "www.velocityfrequentflyer.com";
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) factory.createSocket(hostName, 443);
SSLSession session = sslsocket.getSession();
java.security.cert.Certificate certicates[] = session.getPeerCertificates();
X509Certificate cert = (X509Certificate) certicates[0]; //the peer certificate
System.out.println("cert.getIssuerDN().getName(): " + cert.getIssuerDN().getName());
System.out.println("cert.getSubjectDN().getName(): " + cert.getSubjectDN().getName());
线程“主”中的异常javax.net.ssl.SSLPeerUnverifiedException:在sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431)上的对等对象未通过sslconnecting.Sslconnecting.main(Sslconnecting.java:33)进行身份验证
用OpenSSL查看证书似乎很正常,包括www。 前缀,我尝试过此网站的每个浏览器都对证书感到满意。
openssl s_client -showcerts -connect www.velocityfrequentflyer.com:443 | openssl x509 -noout -text | less
X509v3扩展名:X509v3使用者替代名称:DNS:www.velocityfrequentflyer.com
有趣的是,如果我将主机更改为Velocityfrequentflyer.com,这确实让我感到很困惑。
是否可以在没有JAVA进行检查的情况下调用getPeerCertificates?
我试过使用TrustAll SocketFactory并得到相同的结果。
编辑1:
添加startHandshake()之后,似乎握手本身失败了:(完全SSL调试: http : //pastebin.com/ZKnjrGPR )
线程“ main”中的异常javax.net.ssl.SSLHandshakeException:收到致命警报:sun.security.ssl.Alerts.getSSLException(未知来源),sun.security.ssl.Alerts.getSSLException(未知来源),handshake_failure。位于sun.security.ssl.SSLSocketImpl.readRecord(未知来源)处的security.ssl.SSLSocketImpl.recvAlert(未知源)位于sun.security.ssl.SSLSocketImpl.startHandshake(未知源)位于sun.security.ssl.SSLSocketImpl.startHandshake(未知源)位于sslconnecting.Sslconnecting.main(Sslconnecting.java:33)
编辑2。
原来该站点需要不安全的密码套件RC4? java.security配置设置为不使用它们。
jdk.tls.disabledAlgorithms = SSLv3,RC4
但是,一旦允许RC4,则握手完成。 仍然没有解释为什么没有www时握手会通过。 字首。
再次很奇怪。
如果握手失败,我会期望getSession()
抛出相同的异常,因为如果需要AFAIK,它将调用startHandshake()
。
似乎该对等端不讲TLSv1.2或可能需要RC4。
我建议您通过HandshakeCompletionListener
而不是现在使用的方式获取对等证书。 这样,将失败的是套接字上的第一个I / O,而不是getPeerCertificate().
如果您不喜欢对等证书,则可以在侦听器中关闭套接字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.