java - 如何使用 bouncycaSTLe 从 pkcs7 文件获取证书?

标签 java bouncycastle pkcs#7 csr

大家好!接下来是我的问题:我有包含预打包 CSR 的 .pkcs7 文件,我想从中获取 CSR。我怎样才能使用 bouncycaSTLe 做到这一点?

我尝试使用 PEMReader,但没有用。


    private void getCertificatesPKCS7File(String filename){
        try {
            certificates = new ArrayList();

            FileReader fileReader = new FileReader(filename);
            PEMReader pemReader = new PEMReader(fileReader);
           // Object obj = pemReader.readObject();
           // PKCS10CertificationRequest csr = (PKCS10CertificationRequest) obj;
            Object obj = pemReader.readPemObject().getContent();
            PKCS10CertificationRequest csr = new PKCS10CertificationRequest(obj);

            pemReader.close(); 

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

接下来是异常:


Exception in thread "main" java.lang.IllegalArgumentException: unknown object in factory: org.bouncycastle.asn1.ASN1ObjectIdentifier
    at org.bouncycastle.asn1.pkcs.CertificationRequestInfo.getInstance(Unknown Source)
    at org.bouncycastle.asn1.pkcs.CertificationRequest.(Unknown Source)
    at org.bouncycastle.jce.PKCS10CertificationRequest.(Unknown Source)

谢谢大家!

最佳答案

我找到了解决方案。

KeyStore keystore = KeyStore.getInstance("PKCS12", "BC");
keystore.load (new FileInputStream(PATH+"//test.p12"), "testpassword".toCharArray());
PrivateKey privateKey = (PrivateKey)keystore.getKey("testclientcert", "testpassword".toCharArray());

PEMReader pemReader = new PEMReader(new FileReader(filename));
ContentInfo object = (ContentInfo)pemReader.readObject();

CMSEnvelopedDataParser envDataParser = new CMSEnvelopedDataParser(object.getEncoded());
RecipientInformationStore recipients = envDataParser.getRecipientInfos();
Collection envCollection = recipients.getRecipients();
Iterator it = envCollection.iterator();
RecipientInformation recipient = (RecipientInformation) it.next();
byte[] result = recipient.getContent(privateKey, "BC");
String base64Encoded = new String(Base64.encode(result));

System.out.println(base64Encoded);

base64Encoded 将与编码后的 csr 匹配。

关于java - 如何使用 bouncycaSTLe 从 pkcs7 文件获取证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15937586/

相关文章:

Java:绘制多个形状的轮廓

java - gpg --list-keys 为空但文件解密 bouncycaSTLe 加密文件

java - 用 Java 签署 PKCS10 证书

java - 找不到类 org.bouncycaSTLe.cms.CMSSignedData

objective-c - Objective-C 中的 AES128/CBC/PKCS7padding?

java - 如何在 Android 中创建 JSON?

java - 使用 JAXB 映射到对象时如何忽略 XML 中的元素/属性?

java - 使用现有证书、中间文件和远程创建的签名,使用 itextpdf for Java 对 PDF 进行两步签名

java - Log4J application.log 文件没有被写入

java - 包装和解包加密 key 失败 (javax.crypto)