我对pki(证书)的世界还很陌生。我正在编写一个服务,它需要验证一系列证书。
一般做法如下
a) 从发送的数据生成证书列表
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
CertPathValidatorResult certPathValidatorResult = null;
try {
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
List<X509Certificate> x509Certificates =
(List<X509Certificate>) certificateFactory.generateCertificates(byteArrayInputStream);
CertPath certPath = certificateFactory.generateCertPath(x509Certificates);
加载jdk密钥库,如下所示//加载jdk的cacerts密钥库文件字符串filename=system.getproperty(“java.home”)+“/lib/security/cacerts.replace('/',file.separatorchar);fileinputstream is=new fileinputstream(文件名);keystore keystore=keystore.getinstance(keystore.getdefaulttype());string password=“更改”;keystore.load(is,password.tochararray());
CertPathValidator certPathValidator = CertPathValidator.getInstance("PKIX");
PKIXParameters pkixParameters = new PKIXParameters(keystore);
//pkixParameters.setRevocationEnabled(false);
PKIXParameters certPathValidatorResult = certPathValidator.validate(certPath, pkixParameters);
我假设如果这不是一个有效的链,它会抛出一个异常。此验证是否会检查过期的证书、有效的公钥?
我还需要能够找到证书的ocsp状态或检查它是否被吊销>?如何使用加密api实现这一点
在api中是否推荐使用bouncy castle?bouncy castle有办法检查证书的crl和ocsp状态吗?
谢谢你的指点和帮助。谢谢你。
致以最诚挚的问候
1条答案
按热度按时间yjghlzjz1#
这是正确的,您可以使用certificatefactory加载证书链。
如果要验证一系列证书,则不需要密钥库。证书由发出该证书的自动授权证书进行验证。
例如:
在这种情况下,如果您不知道根ca,可以使用它来验证证书。
你可以用
和
验证证书的状态很重要。
是的,bouncycastle是一个很好的图书馆。