Bouncy Castle我无法获得所有证书

时间:2014-03-05 15:59:20

标签: java cryptography bouncycastle pkcs#7

我试图从smime.p7s文件中读取证书,证书链是:

Baltimora Cyber​​ Trust - > DigitPA - > Aruba PEC

因此,当我试图提取时,我只检索最后两个证书,最后一个像主题,第一个像发行者。 我错了什么?

代码:

private List<CertificateInfo> reading(ASN1InputStream asn1Stream) throws IOException, CMSException, CertificateException {
        ArrayList<CertificateInfo> infos = new ArrayList<CertificateInfo>();
        ASN1Primitive obj = asn1Stream.readObject();
        ContentInfo contentInfo = ContentInfo.getInstance(obj);
        CMSSignedData cms = new CMSSignedData(contentInfo);
        JcaX509CertificateConverter converter = new JcaX509CertificateConverter().setProvider(BouncyCastleProvider.PROVIDER_NAME);
        Store store = cms.getCertificates();
        SignerInformationStore signersInfoStore = cms.getSignerInfos();
        Collection<SignerInformation> signers = signersInfoStore.getSigners();
        logger.debug("signers num [" + signers.size() + "]");
        for (SignerInformation si : signers) {
            SignerId sid = si.getSID();
            Collection<X509CertificateHolder> holders = store.getMatches(sid);
            logger.debug("holders num [" + holders.size() + "]");
            for (X509CertificateHolder certholder : holders) {
                X509Certificate cert = converter.getCertificate(certholder);
                logger.debug("Issuer [" + cert.getPublicKey() + "]");
                CertificateInfo certInfo = util.parse(cert);
                infos.add(certInfo);
            }
        }
        return infos;
    }

我使用这些充满活力的城堡罐子就像是家属:

        <dependency>
            <groupId>bouncycastle</groupId>
            <artifactId>bcprov-jdk15</artifactId>
            <version>150</version>
        </dependency>
        <dependency>
            <groupId>bouncycastle</groupId>
            <artifactId>bcmail-jdk15</artifactId>
            <version>150</version>
        </dependency>
        <dependency>
            <groupId>bouncycastle</groupId>
            <artifactId>bcpg-jdk15</artifactId>
            <version>150</version>
        </dependency>
        <dependency>
            <groupId>bouncycastle</groupId>
            <artifactId>bcpkix-jdk15</artifactId>
            <version>150</version>
        </dependency>

提前感谢。

1 个答案:

答案 0 :(得分:0)

可能没有错。 PKI使用树状结构。可以使用DigitPA信任Aruba PEC。但你怎么能相信DigitPA?最常用的方法是将根证书存储在信任库中。这个信托商店是例如由应用程序分发(如Web浏览器中的信任存储)。

现在,如果Baltimora Cyber​​ Trust已经在信托商店,则无需在PKCS#7容器内发送。证书链可以在没有它的情况下构建到受信任的根目录。

因此,您可以直接从信任存储区读取证书,也可以从为验证而创建的证书链中检索根证书。