首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bouncy castle 1.47和标准JCE

Bouncy castle 1.47和标准JCE
EN

Stack Overflow用户
提问于 2012-07-13 20:05:47
回答 1查看 2.5K关注 0票数 1

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

1)我似乎找不到一个简洁的示例列表。由于增加了代码的冗长,现在需要完成与以前类似的事情,这将是非常受欢迎的。

2)在混合经典JCE的同时使用bouncycastle似乎是不合理的困难,至少比以前要难得多。这是有原因的吗?

作为后者的一个例子,以csr的生成为例,它过去就像这样简单:

代码语言:javascript
复制
org.bouncycastle.jce.PKCS10CertificationRequest request = new org.bouncycastle.jce.PKCS10CertificationRequest(type.toString(), subject, pair.getPublic(), null, pair.getPrivate());

其中subject是"javax.security.auth.x500.X500Principal",私钥和公钥来源于一般的"java.security.KeyPair“等。

现在我有了一些类似的东西:

代码语言:javascript
复制
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的实现是我遗漏的?许多谷歌搜索强调了旧的(阅读:弃用)做事的方式,这并没有什么帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-13 20:38:59

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

对于上面的示例:

代码语言:javascript
复制
PKCS10CertificationRequestBuilder builder = new JcaPKCS10CertificationRequestBuilder(
    subject,
    pair.getPublic()
);

我希望这种模式适用于...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11470188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档