0

我对使用 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 );
    }
}
4

1 回答 1

0

@Override public void verify(String arg0, SSLSocket arg1) 抛出 IOException {

arg1.getSession();

javax.security.cert.X509Certificate[] certs = session.getPeerCertificateChain();

].getSubjectDN().getName();

) )

);

].trim().equals("CN"))

]。修剪();

找不到证书链。”);

certFQDN.length() - 11).equals(".domain.com"))

内部主机:" + certFQDN );

}

于 2014-03-18T13:34:56.770 回答