私はローカルの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配布ポイントが含まれていても例外が発生します。
いずれにしても、より洗練された回答が待ち望まれています。
明らかに、すべての証明書にCRL DPを指定する必要があります(ルートCA証明書を除く)。インターネット対応PKIのCDP/AIA拡張機能の設計に関するブログ記事を書きました。この記事はMicrosoft ADCS専用ですが、PKIの開発に使用しているソフトウェアには適しています。https://www.sysadmins.lv/blog-en/designing-crl-distribution-points-and-authority-information -access-locations.aspx – Crypt32
しかし、既定のパスを指定する方法があるはずです – mdavid