Как получить PublicKey от PKCS10CertificationRequest с помощью новой библиотеки надувной замок?
в новой версии библиотеки надувной замок есть изменения в PKCS10CertificationRequest
. В предыдущих версиях можно было получить PublicKey
от такого запроса с помощью getPublicKey()
метод (см. старый док).
теперь этот метод исчез. Как я могу получить PublicKey от С от такого запроса?
Есть getSubjectPublicKeyInfo().parsePublicKey()
но он возвращает ASN1Primitive
.
Я вижу это из SPKAC NetscapeCertRequest
Я все еще могу читать PublicKey напрямую, позвонив getPublicKey()
.
4 ответов
в основном пакете поставщика есть класс утилиты под названием PublicKeyFactory. Метод createKey возвращает AsymmetricKeyParameter который вы бросаете на любой тип открытого ключа, например
SubjectPublicKeyInfo pkInfo = pkcs10CertReq.getSubjectPublicKeyInfo();
RSAKeyParameters rsa = (RSAKeyParameters) PublicKeyFactory.createKey(pkInfo);
EDIT 1:
кроме того, чтобы создать java.security.PublicKey
необходимо сделать еще несколько шагов:
RSAPublicKeySpec rsaSpec = new RSAPublicKeySpec(rsa.getModulus(), rsa.getExponent());
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey rsaPub = kf.generatePublic(rsaSpec);
Я смотрел на ту же проблему, и это тоже будет работать (с тем преимуществом, что нам не нужно указывать алгоритм):
SubjectPublicKeyInfo pkInfo = pkcs10CertReq.getSubjectPublicKeyInfo();
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
PublicKey pubKey = converter.getPublicKey(pkInfo);
посмотреть org.после установки BouncyCastle.в OpenSSL.jcajce.JcaPEMKeyConverter
Как насчет использования JcaPKCS10CertificationRequest?
JcaPKCS10CertificationRequest jcaPKCS10CertificationRequest = new JcaPKCS10CertificationRequest(pkcs10CertReq);
PublicKey publicKey = jcaPKCS10CertificationRequest.getPublicKey();
PKCS10CertificationRequest csr =...;
PublicKey pk = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(csr.getSubjectPublicKeyInfo().toASN1Primitive().getEncoded()));
RFC 2986-PKCS #10: синтаксис запроса сертификации
CertificationRequestInfo ::= последовательность {
версия INTEGER { v1(0) } (v1,...),
имя субъекта
subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
атрибуты [0] атрибуты{{ CRIAttributes }}
}SubjectPublicKeyInfo { алгоритм: IOSet} :: = последовательность {
алгоритм AlgorithmIdentifier {{IOSet}},
subjectPublicKey бит строка
}
и затем вы можете увидеть документ java.безопасность.спекуляция.X509EncodedKeySpec
SubjectPublicKeyInfo ::= последовательность {
алгоритм AlgorithmIdentifier,
subjectPublicKey битовая строка }
таким образом, вы будете знать, что кодировка этого открытого ключа-X. 509. а затем измените его на X509EncodedKeySpec и генерировать открытый ключ keyFactory