首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >checkServerTrusted结果可以缓存为X509TrustManager吗?

checkServerTrusted结果可以缓存为X509TrustManager吗?
EN

Stack Overflow用户
提问于 2020-01-06 15:40:43
回答 1查看 426关注 0票数 2

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

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

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

在客户端会话期间,我是否可以缓存checkServerTrusted的结果(给定证书chainauthType ),并返回缓存的值,而不是调用TrustManager?或者这是个坏主意还是不可靠?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-17 09:07:32

最后,为了更快地响应,我在会话期间缓存了链证书。

代码语言:javascript
复制
   //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
     }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59614936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档