我对使用 http/certs/etc 还很陌生。我为 apache httpclient 设置了自己的 hostnameVerifier。 (尝试允许 FQDN 不匹配,只要证书 FQDN 仍然在我们的域内部——这不是我所知道的最好的——但聊胜于无)
它在我测试过的大多数服务器上工作正常,但有几个我得到了
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
当我尝试
session.getPeerCertificateChain().
当我转到 firefox 中的相同链接时,我能够很好地查看证书。
下面是该方法的完整代码。
@Override
public void verify( String arg0, SSLSocket arg1 ) throws IOException
{
String certFQDN = null;
SSLSession session = arg1.getSession();
javax.security.cert.X509Certificate[] certs = session.getPeerCertificateChain();
if ( certs.length > 0 )
{
String name = certs[ 0 ].getSubjectDN().getName();
for ( String s : name.split( "," ) )
{
String part[] = s.split( "=" );
if ( part[ 0 ].trim().equals( "CN" ) )
{
certFQDN = part[ 1 ].trim();
}
}
}
else
{
throw new IOException( "Could not find certificate chain." );
}
if ( !certFQDN.substring( certFQDN.length() - 11 ).equals( ".domain.com" ) )
{
throw new SSLException( "Not an internal host: " + certFQDN );
}
}
最佳答案
@Override public void verify(String arg0, SSLSocket arg1) throws IOException {
arg1.getSession();
javax.security.cert.X509Certificate[] certs = session.getPeerCertificateChain();
.getSubjectDN().getName();
) )
);
].trim().equals( "CN") )
.trim();
找不到证书链。");
certFQDN.length() - 11 ).equals( ".domain.com") )
内部主机:"+ certFQDN );
关于javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated when trying to session. getPeerCertificateChain(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323904/