我正在研究可与RestTemplate结合使用的TrustStrategy。在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());
}
答案 0 :(得分:0)
我自己找到了答案!因此,我误解了TrustStrategy的isTrusted方法中记录的证书是客户端证书。实际上,这些是服务器返回的证书(因此只能在运行时记录)。 TrustManagerFactory中的证书来自cacerts文件,并且是客户端信任的证书。