[英]X.509 Certificate validation with Java and Bouncycastle
通过bouncycastle wiki页面,我能够理解如何创建X.509根证书和认证请求,但我不太明白如何在此之后继续进行概念和编程。
让我们假设甲方做了一个证书请求,并从CA获得了他的客户证书。 某些乙方如何验证A的证书? A需要什么样的证书? 根证书? “普通”客户证书?
如果我们假设A已成功将他的证书以DER或PEM格式发送给B,那么验证如何在编程级别上工作?
任何帮助深表感谢。
最诚挚的问候,Rob
从程序员的角度来看,您需要一些东西来验证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);
需要注意的一件重要事情是,如果找不到路径,则无法获得有关原因的更多信息。 这可能令人沮丧,但这是设计方式。 一般来说,有许多潜在的途径。 如果它们都因各种原因而失败,那么路径构建器将如何决定报告的原因?
好的,CA背后的想法如下:
在程序级别,您可以通过阅读X.509证书并确定CA应该是谁来实现此目的。 鉴于CA的指纹,您可以在数据库中找到它并验证签名。 如果匹配,您就拥有了您的信任链。
这是有效的,因为正如我所说,只有CA可以创建数字签名,但任何人都可以验证它。 这与加密概念完全相反。 您所做的是“使用私钥加密”您要签名的数据,并验证“使用公钥解密”等于您获得的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.