【发布时间】:2021-11-20 17:07:34
【问题描述】:
我有一个 PEM 格式的 PKCS7 证书链。基本上我想使用 BouncyCastle 库在 Java 中执行以下 openssl 命令。
openssl pkcs7 -in client-certificate_pkcs7.pem -out client-certificate_chain.pem
我一直在关注 BouncyCastle (https://www.bouncycastle.org/fips-java/BCFipsIn100.pdf) 提供的这个 pdf,但找不到任何符合我需要的东西。
我发现 CMSSignedData 用于 BouncyCastle 中的 pkcs7 相关操作,所以我尝试使用它,但我收到错误,我认为这是因为我使用的是原始字符串。
String pkcs7Pem = "-----BEGIN PKCS7-----\nMIIR...WTEA\n-----END PKCS7-----\n";
CMSSignedData data = new CMSSignedData(pkcs7Pem.getBytes());
Store certStore = data.getCertificates();
SignerInformationStore signerInfos = data.getSignerInfos();
Collection<SignerInformation> signers = signerInfos.getSigners();
List<X509Certificate> x509Certificates = new ArrayList<>();
for (SignerInformation signer : signers) {
Collection<X509CertificateHolder> matches = certStore.getMatches(signer.getSID());
for (X509CertificateHolder holder : matches) {
x509Certificates.add(new JcaX509CertificateConverter().setProvider("BC").getCertificate(holder));
}
}
这是我在new CMSSignedData(pkcs7Pem.getBytes());上遇到的错误
org.bouncycastle.cms.CMSException: IOException reading content.
我也尝试过使用PEMParser,但下面的parser.readObject() 返回null。
String pkcs7Pem = "-----BEGIN PKCS7-----\nMIIR...WTEA\n-----END PKCS7-----\n";
PEMParser parser = new PEMParser(new StringReader(pkcs7Pem));
parser.readObject();
任何帮助将不胜感激!
【问题讨论】:
标签: java bouncycastle client-certificates pem pkcs#7