ssl 默认X509TrustManager和通配符主机名验证?

fumotvh3  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(224)

我正在构造一个默认的X509TrustManager,它将用于主机名验证:

TrustManagerFactory trustManagerFactory = null;
    try {
        trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init((KeyStore) null);
        TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();

        for (int i = 0; i < trustManagers.length; i++) {
            TrustManager t = trustManagers[i];
            if (t instanceof X509TrustManager) {
                this.defaultTrustManager = (X509TrustManager) t;
                return;
            }
        }
    } catch (NoSuchAlgorithmException | KeyStoreException e) {
        throw new CelleryCellSTSException("Error while setting trust manager", e);
    }

但是,我找不到任何地方,如果这是要支持通配符证书,以及或我需要建立一个自定义的信任管理器只是为了这一点?有任何文档的地方可用,我想阅读更多的通配符验证如何真正工作,如果它支持?我正在使用java 8和11,谢谢。

dxxyhpgq

dxxyhpgq1#

在Java 7以上版本中,由TrustManagerFactory创建的TrustManager在以下情况下执行主机名检查(并且仅当)为正在进行的特定 * 连接 * 设置了“端点标识”算法时(更确切地说,是SSLSocketSSLEngine),这里是socket,这里是engine。supported algorithms HTTPS and LDAPS实际上是here实现的(HTTPS内部称为TLS),您可以看到它处理有效的通配符(仅在DNS名称中,而不是在IP地址中),但拒绝无效的通配符。
HttpClient使用'HTTPS'算法。对于调用JSSE的其他方式,如果您希望这样做,您的代码或相关中间件必须设置endpoint-id。

相关问题