【问题标题】:TrustStrategy different certificates than in TrustManagerFactoryTrustStrategy 与 TrustManagerFactory 中不同的证书
【发布时间】:2019-07-01 11:56:50
【问题描述】:

我正在研究将 TrustStrategy 与 RestTemplate 结合使用。在 isTrusted 方法中,检查(打印出)的证书与 TrustManagerFactory 中定义的证书不同(此处打印的证书来自 cacerts 文件)。为什么会这样?幕后发生了什么?

编辑: isTrusted 方法记录我公司的证书。 AcceptedIssuers 记录来自 cacerts 文件的证书。

Edit2:TrustStrategy 的方法称为运行时。 TrustManagerFactory 的证书称为编译时。也许这是问题/解决方案的一部分。

TrustStrategy acceptingTrustStrategy = new TrustStrategy() {
        @Override
        public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
            for (X509Certificate certificate: x509Certificates) {
                log.info(certificate.getIssuerX500Principal().getName());
            }
            return true;
        }
    };

    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("X.509");
    trustManagerFactory.init((KeyStore) null);
    TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
    X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
    X509Certificate[] acceptedIssuers = trustManager.getAcceptedIssuers();

    for(X509Certificate ai : acceptedIssuers) {
        log.info(ai.getIssuerX500Principal().getName());
    }

【问题讨论】:

    标签: java apache ssl certificate-store


    【解决方案1】:

    我自己找到了答案!所以我误解了在 TrustStrategy 的 isTrusted 方法中记录的证书是客户端证书。事实上,这些是服务器返回的证书(因此只能在运行时记录)。 TrustManagerFactory 中的证书来自 cacerts 文件,是客户端受信任的证书。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2014-05-19
      • 2015-11-24
      • 1970-01-01
      • 2012-03-20
      相关资源
      最近更新 更多