При попытке конвертировать сертификат PFX с помощью keytool:
keytool -importkeystore -srckeystore SomeCert.pfx -srcstoretype pkcs12 -srcstorepass SomePass -destkeystore SomeCert.jks -deststoretype jks -deststorepass SomePass
Я получаю следующее исключение
keytool error: java.security.cert.CertificateParsingException: java.io.IOException: Duplicate extensions not allowed
Кроме того, при использовании приложечного инструмента PKCS12Import, как описано здесь, я получаю то же исключение.
Основная причина заключается в следующем:
Caused by: java.io.IOException: Duplicate extensions not allowed
at sun.security.x509.CertificateExtensions.parseExtension(CertificateExtensions.java:96)
at sun.security.x509.CertificateExtensions.init(CertificateExtensions.java:70)
at sun.security.x509.CertificateExtensions.<init>(CertificateExtensions.java:60)
at sun.security.x509.X509CertInfo.parse(X509CertInfo.java:723)
at sun.security.x509.X509CertInfo.<init>(X509CertInfo.java:152)
... 92 more
Я использую Windows 7, JDK 8u25_x64.
Любые идеи, почему эта проблема дублирования расширений происходит, и как ее можно решить? Когда я использую сертификат через браузер (например, для доступа к WSDL файлу для некоторого WS, через Firefox), он работает нормально
Хорошо, поэтому я узнал, как конвертировать из PFX в JKS.
Здесь процедура, для дальнейшего использования:
Шаг 1. Преобразуйте pfx в пем
Шаг 1.1. закрытый ключ
openssl pkcs12 -in SomeFile.pfx -nocerts -out privatekey.pem
Шаг 1.2. сертификат
openssl pkcs12 -in SomeFile.pfx -clcerts -nokeys -out certificate.pem
Шаг 2. Создайте хранилище ключей
openssl pkcs12 -export -in certificate.pem -inkey privatekey.pem -certfile certificate.pem -name "some name" -out keystore.p12
Шаг 3. Создайте хранилище ключей JKS
keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -destkeystore JKS
Для этого необходимо установить OpenSSL и добавить Java в PATH (чтобы команда keytool была доступна).
Если кому-то просто нужно импортировать в хранилище ключей Java сертификат с закрытым ключом, пропустите Шаг 1.