gpt4 book ai didi

Java 为 CRL 路径设置默认值

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:46 26 4
gpt4 key购买 nike

如何在 java 中设置默认的 CRL 路径。至于现在不包含 CRL 分发点的证书,我得到这个:

PKIX path validation failed: java.security.cert.CertPathValidatorException: Could not determine revocation status

我已经尝试将 com.sun.security.enableCRLDPcom.sun.net.ssl.checkRevocation 与包含和不包含 CRLDP 的证书组合使用。结论是,当您设置上述属性但您拥有不包含 CRLDP 的证书时,您会得到一个异常,即这不是我当前系统想要的行为。

最佳答案

我想我找到了一种指定本地 CRL 文件的方法,它似乎可以解决问题。

        // initialize a new TMF with our keyStore
TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX", "SunJSSE");

CertPathParameters pkixParams = new PKIXBuilderParameters(keyStore, new X509CertSelector());

// Activate certificate revocation checking
((PKIXBuilderParameters) pkixParams).setRevocationEnabled(true);

List<CertStore> certStores = new ArrayList<>(1);

Collection<CRL> crls = new HashSet<>(1);
crls.add(CertificateFactory.getInstance("X.509").generateCRL( new java.io.FileInputStream("your_local_file.crl")));

certStores.add(CertStore.getInstance("Collection", new CollectionCertStoreParameters(crls)));
((PKIXBuilderParameters) pkixParams).setCertStores(certStores);

System.setProperty("com.sun.security.enableCRLDP", "true");
tmf.init(new CertPathTrustManagerParameters(pkixParams));

// acquire X509 trust manager from factory
TrustManager tms[] = tmf.getTrustManagers();
for (TrustManager tm : tms) {
if (tm instanceof X509TrustManager) {
trustManager = (X509TrustManager) tm;
break;
}
}

在这种情况下,如果证书不包含 CRL 分发点,它不会抛出异常,并会尝试从我提供的文件中确定吊销状态。但是,即使指定的本地 CRL 文件的内容格式不正确,它也不会跳过,即使您的证书包含 CRL 分发点作为替代,您也会遇到异常。

无论如何,如果有的话,期待更优雅的答案。

关于Java 为 CRL 路径设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41040120/

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