我正在构建一个用于主机名验证的默认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,谢谢。
发布于 2022-09-26 22:40:30
在Java7中,TrustManager由TrustManagerFactory创建的主机名检查是否(并且只有在)为正在进行的特定连接(更确切地说是SSLSocket或SSLEngine)设置了“端点标识”算法时,请参见为套筒而来和为发动机而来。支持的算法HTTPS和LDAPS实际上是实现这里 ( HTTPS内部称为TLS),您可以看到句柄有效通配符(仅在DNS名称中,而不是IP地址),但拒绝无效通配符。
HttpsURLConnection和11 up java.net.http.HttpClient使用'HTTPS‘算法。对于调用JSSE的其他方式,如果您想要调用JSSE,您的代码或相关中间件都必须设置端点id。
https://stackoverflow.com/questions/73855531
复制相似问题