gpt4 book ai didi

java - X509TrustManager 可以缓存 checkServerTrusted 结果吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:32 24 4
gpt4 key购买 nike

在我的 JavaFX 客户端应用程序中,我正在实现自己的依赖于 Platform TrustManager 的 TrustManager

基本上,我总是调用平台信任管理器,如果连接不受信任,我可以弹出一个警告对话框,询问用户是否要信任该证书(就像浏览器所做的那样)。

我遇到一个问题,证书指定了多个 URL,以便使用 AIA(权威信息访问)检索中间证书,但其中一些 URL 没有响应。因此,每次调用 checkServerTrusted 方法时,响应可能会很长,因为 Java 正在尝试访问无法访问的 URL。当超时发生时,Java 会尝试另一个 URL,最后其中一个终于响应了。

在客户端 session 期间,我是否可以缓存给定证书 chainauthTypecheckServerTrusted 结果并返回缓存的值,而不是调用 TrustManager?或者这是一个坏主意或不可靠?

最佳答案

我最终确实在 session 期间缓存了链证书,以便更快地响应。

   //Cache validated certificate's chain during session
private final Set<UUID> chainCache;

/*
* Delegate to the default trust manager.
*/
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
checkTrusted(chain, authType, false);
}

/*
* Delegate to the default trust manager.
*/
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
checkTrusted(chain, authType, true);
}

private void checkTrusted(X509Certificate[] chain, String authType, boolean server) throws CertificateException {
// Internal class but Arrays.hashcode can be used in the same manner
Digester digester = new Digester();
//Digester will run through the array
digester.digest(chain);
digester.digest(authType);
digester.digest(server);
UUID uuid = digester.getUUID();
//If the chain has been validated, no need top check again.
if (chainCache.contains(uuid)) {
return;
}
//Do stuff
}

关于java - X509TrustManager 可以缓存 checkServerTrusted 结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59614936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com