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