我正在尝试创建一些辅助方法来创建(和签署)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 的实现?许多谷歌搜索突出旧的(阅读:不推荐的)做事方式并没有帮助。