【问题标题】:Bouncy castle 1.47 and standard JCE充气城堡 1.47 和标准 JCE
【发布时间】:2013-05-30 21:24:21
【问题描述】:

我正在尝试创建一些辅助方法来创建(和签署)CSR、自签名证书等...我已经使用现已弃用的功能实现了一些方法。 为了跟上最新的步伐,我已将 bouncycastle 升级到 1.47,这似乎有很大不同,我想知道两件事:

1) 我似乎无法找到简明的示例列表。由于现在完成与以前类似的事情所必需的代码的额外冗长,这将是非常受欢迎的。

2) 在混合经典 JCE 内容的同时使用 bouncycastle 似乎非常困难,至少比以前更难。这是有原因的吗?

以后者为例,以生成一个csr为例,以前就是这么简单:

org.bouncycastle.jce.PKCS10CertificationRequest request = new org.bouncycastle.jce.PKCS10CertificationRequest(type.toString(), subject, pair.getPublic(), null, pair.getPrivate());

如果主题是“javax.security.auth.x500.X500Principal”,则私钥和公钥来自一般的“java.security.KeyPair”等。

现在我有类似的东西:

public byte[] generatePKCS10(KeyPair pair, SignatureType type, X500Principal subject) throws IOException {
    PKCS10CertificationRequestBuilder builder = new PKCS10CertificationRequestBuilder(
        new X500Name(subject.getName()),
        SubjectPublicKeyInfo.getInstance(pair.getPublic())
    );
    AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find(type.toString());
    AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
    AsymmetricKeyParameter keyParam = PrivateKeyFactory.createKey(pair.getPrivate().getEncoded());
    try {
        ContentSigner signer = new BcRSAContentSignerBuilder(sigAlgId, digAlgId).build(keyParam);
        PKCS10CertificationRequest csr = builder.build(signer);
        ContentVerifierProvider verifier = new JcaContentVerifierProviderBuilder().setProvider(new BouncyCastleProvider()).build(pair.getPublic());
        csr.isSignatureValid(verifier);
        return csr.getEncoded();
    }
    catch (OperatorCreationException e) {
        throw new IOException(e);
    }
    catch (PKCSException e) {
        throw new IOException(e);
    }
}

我是否缺少大量简单的转换实用程序或重载方法或特定于 JCE 的实现?许多谷歌搜索突出旧的(阅读:不推荐的)做事方式并没有帮助。

【问题讨论】:

    标签: java bouncycastle jce


    【解决方案1】:

    发布此消息后不久,我偶然发现了一个符合 JCE 的解决方案。似乎他们的很多类都有一个特定于 JCA 的扩展来处理所有必要的转换。例如,“X509v1CertificateBuilder”可以实例化为“new JcaX509v1CertificateBuilder()”,它采用 JCE 参数而不是 bouncycastle 特定的参数。

    对于上面的例子:

    PKCS10CertificationRequestBuilder builder = new JcaPKCS10CertificationRequestBuilder(
        subject,
        pair.getPublic()
    );
    

    我希望这种模式保持...

    【讨论】:

    • 这是他们新的“操作员”界面,在他们的wiki中有所记载
    猜你喜欢
    • 2019-12-29
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多