外部CA。证书链验证

时间:2020-01-22 11:20:45

标签: java security cryptography certificate bouncycastle

假设有一个外部CA。假设有一个URL和其他配置参数。 在运行时,我获得了需要使用CA进行验证的证书链。

因此,必须以某种方式在CA中注册链的根证书。此外,CA处理CRL,并且链中的某些证书​​可能会被吊销。

我有这样的代码

CertificateFactory cf = CertificateFactory.getInstance(certificateType);
List<Certificate> certx = //list of certificates obtaining

//creating certification path (chain to be validated)
CertPath path = cf.generateCertPath(certx);
//validator creation. Algorithm to be defined
CertPathValidator validator = CertPathValidator.getInstance(certPathValidatorAlgorithm);

//get key store
KeyStore keystore = getKeyStore(keyStorePassword);
//get list of CRLs (certificate revoke list)
Collection<? extends CRL> crls = getCrls(cf);

PKIXParameters params = new PKIXParameters(keystore);
CertStore store = CertStore.getInstance(certStoreType, new CollectionCertStoreParameters(crls));
params.addCertStore(store);
//Validate will throw an exception on invalid chains.
PKIXCertPathValidatorResult r = (PKIXCertPathValidatorResult) validator.validate(path, params);
r.getTrustAnchor();

如果是本地证书 CRL ,则逻辑工作正常,但CA必须在外部。

因此必须自定义getKeyStore()和getCrls()才能访问外部CA服务器,建立受信任的连接等。

您能解释一下用于支持此功能的配置和协议(CMP)吗?是否有这样的事情BouncyCastle?

更新:实际上,它与浏览器和https都不相关。 在XML中,我们获得了base64编码的证书链。证书由CA颁发。我们需要验证链-以某种方式将其发送到CA并获得OK / NO OK响应,或者从CA获取CRL列表,并提供将有效的已颁发证书保留为链根的机制。

0 个答案:

没有答案