javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated when trying to session. getPeerCertificateChain()

标签 java ssl https httpclient

我对使用 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/

相关文章:

java - 检查数组(有 9 个位置)是否具有整数 1 到 9 的算法,与它们的排序方式无关

java - 在 Eclipse 中不建议向 JPanel 添加标签和添加方法

java - ssl 地址的 URL 打开连接抛出断言异常

iis - 需要有关设置 SSL 的帮助

javascript - node.js : socket. 中的 socket.io 发出在 socket.disconnect 之前未完成

WCF transport security &&messags 安全模式问题

java - 有没有一种干净的方法来读取嵌入式 SQL 资源文件?

java - 什么是 vm 参数中的 -D 它表明为什么我们必须在 vm 参数中始终指定 -D

ssl - HTTPS 通信中的根 CA、中间证书和 Web 服务器证书

tensorflow - 带有 "--ssl_confog_file"的 tensorflow_model_server 问题