Rob*_*Rob 18 java validation bouncycastle certificate x509
通过bouncycastle wiki页面,我能够理解如何创建X.509根证书和认证请求,但我不太明白如何在此之后继续进行概念和编程.
让我们假设甲方做了一个证书请求,并从CA获得了他的客户证书.某些乙方如何验证A的证书?A需要什么样的证书?根证书?"普通"客户证书?
如果我们假设A已成功将他的证书以DER或PEM格式发送给B,那么验证如何在编程级别上工作?
任何帮助深表感谢.
最诚挚的问候,Rob
eri*_*son 33
从程序员的角度来看,您需要一些东西来验证X.509证书.
通过这些输入,您可以使用内置的PKIX支持来构建和验证证书路径.
/* Givens. */
InputStream trustStoreInput = ...
char[] password = ...
List<X509Certificate> chain = ...
Collection<X509CRL> crls = ...
/* Construct a valid path. */
KeyStore anchors = KeyStore.getInstance(KeyStore.getDefaultType());
anchors.load(trustStoreInput, password);
X509CertSelector target = new X509CertSelector();
target.setCertificate(chain.get(0));
PKIXBuilderParameters params = new PKIXBuilderParameters(anchors, target);
CertStoreParameters intermediates = new CollectionCertStoreParameters(chain)
params.addCertStore(CertStore.getInstance("Collection", intermediates));
CertStoreParameters revoked = new CollectionCertStoreParameters(crls);
params.addCertStore(CertStore.getInstance("Collection", revoked));
CertPathBuilder builder = CertPathBuilder.getInstance("PKIX");
/*
* If build() returns successfully, the certificate is valid. More details
* about the valid path can be obtained through the PKIXBuilderResult.
* If no valid path can be found, a CertPathBuilderException is thrown.
*/
PKIXBuilderResult r = (PKIXBuilderResult) builder.build(params);
Run Code Online (Sandbox Code Playgroud)
需要注意的一件重要事情是,如果找不到路径,则无法获得有关原因的更多信息.这可能令人沮丧,但这是设计方式.一般来说,有许多潜在的途径.如果它们都因各种原因而失败,那么路径构建器将如何决定报告的原因?
小智 9
好的,CA背后的想法如下:
在程序级别,您可以通过阅读X.509证书并确定CA应该是谁来实现此目的.鉴于CA的指纹,您可以在数据库中找到它并验证签名.如果匹配,您就拥有了您的信任链.
这是有效的,因为正如我所说,只有CA可以创建数字签名,但任何人都可以验证它.这与加密概念完全相反.您所做的是"使用私钥加密"您要签名的数据,并验证"使用公钥解密"等于您获得的数据.