8

在新版本的 Bouncy Castle 库中,PKCS10CertificationRequest. 在以前的版本中,可以PublicKey使用方法从此类请求中获取getPublicKey()(参见旧文档)。

现在这种方法消失了。如何从此类请求中获取 PublicKey?有,getSubjectPublicKeyInfo().parsePublicKey()但它返回ASN1Primitive

我从 SPKAC 看到NetscapeCertRequest我仍然可以通过调用直接读取 PublicKey getPublicKey()

4

4 回答 4

12

主提供程序包中有一个名为PublicKeyFactory的实用程序类。createKey方法返回一个AsymmetricKeyParameter,您可以将其转换为合适的任何类型的公钥,例如

SubjectPublicKeyInfo pkInfo = pkcs10CertReq.getSubjectPublicKeyInfo();
RSAKeyParameters rsa = (RSAKeyParameters) PublicKeyFactory.createKey(pkInfo);

编辑1:

此外,要创建java.security.PublicKey更多步骤,还需要:

RSAPublicKeySpec rsaSpec = new RSAPublicKeySpec(rsa.getModulus(), rsa.getExponent());
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey rsaPub = kf.generatePublic(rsaSpec);
于 2012-06-14T11:03:35.253 回答
7

我正在研究同样的问题,这也可以(优点是我们不需要指定算法):

SubjectPublicKeyInfo pkInfo = pkcs10CertReq.getSubjectPublicKeyInfo();
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
PublicKey pubKey = converter.getPublicKey(pkInfo);

org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter

于 2015-12-28T15:48:11.740 回答
2

使用 JcaPKCS10CertificationRequest 怎么样?

JcaPKCS10CertificationRequest jcaPKCS10CertificationRequest = new JcaPKCS10CertificationRequest(pkcs10CertReq);
PublicKey publicKey = jcaPKCS10CertificationRequest.getPublicKey();
于 2015-04-15T13:43:33.297 回答
0
PKCS10CertificationRequest csr =...;    
PublicKey pk = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(csr.getSubjectPublicKeyInfo().toASN1Primitive().getEncoded()));

RFC 2986 - PKCS #10:认证请求语法

CertificationRequestInfo ::= SEQUENCE {
version INTEGER { v1(0) } (v1,...),
主题名称,
subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
属性 [0] 属性{{ CRIAttributes }}
}

SubjectPublicKeyInfo { ALGORITHM : IOSet} ::= SEQUENCE {
算法 AlgorithmIdentifier {{IOSet}},
subjectPublicKey BIT STRING
}

然后就可以看到java.security.spec.X509EncodedKeySpec的文档了

SubjectPublicKeyInfo ::= SEQUENCE {
算法 AlgorithmIdentifier,
subjectPublicKey BIT STRING }

所以你会知道这个公钥的编码是 X.509。然后将其更改为 X509EncodedKeySpec 并通过 keyFactory 生成公钥

于 2017-08-10T07:22:18.737 回答