2013-09-13 10 views
11

У меня есть приложение в java и cxf, которое подключается к WebServices с сертификатом клиента.Добавление цепочки сертификатов в сертификат p12 (pfx)

Я получил сертификаты Форма WebService владелец

  • certificate.p12
  • certificate.pem
  • certificate.crt
  • trusted_ca.cer
  • root_ca.cer

I имеют проблему с прямым преобразованием этого p12 certficat e для работы jks keystore, требуемой java.

Я сделал это:

keytool -importkeystore -srckeystore certificate.p12 -srcstoretype PKCS12 -destkeystore certificate1.jks -deststoretype JKS -storepass secret 
keytool -import -alias root -file root_ca.cer -trustcacerts -keystore certificate1.jks -storepass secret 
keytool -import -alias trusted -file trusted_ca.cer -trustcacerts -keystore certificate1.jks -storepass secret 

но JKS Безразлично `работа и я получаю ответ HTTP '403: Forbidden' при использовании этого certificate1.jks

Однако, если я импортировать эту p12 (PFX) сертификат Internet Explorer, а затем экспортировать этот сертификат из IE в PFX формат выбрав пункт «Включить все сертификаты в путь сертификации» флажок и использование:

keytool -importkeystore -srckeystore certificate.pfx -srcstoretype PKCS12 -destkeystore certificate2.jks -deststoretype JKS -storepass secret 
keytool -import -alias root -file root_ca_kir.cer -trustcacerts -keystore certificate2.jks -storepass secret 
keytool -import -alias trusted -file trusted_ca_kir.cer -trustcacerts -keystore certificate2.jks -storepass secret 

Тогда everythin g работает нормально, и я могу подключиться к WebService с помощью сертификата2.jks.

Я обнаружил, что оригинальный certificate.p12 (PFX) содержит только один вход (Certificate длина цепи: 1):

keytool -list -keystore certificate.p12 -storepass secret -storetype PKCS12 -v 


******************************************* 
******************************************* 

Alias name: alias 
Entry type: PrivateKeyEntry 
Certificate chain length: 1 
Certificate[1]: 
Owner: CN=MyCompany, [email protected], O=bla, C=PL 
Issuer: CN=Trusted CA, O=ble, C=PL 
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
Valid from: ... until: ... 
Certificate fingerprints: 
     MD5: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX 
     SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX 
     Signature algorithm name: SHA1withRSA 
     Version: 3 

Extensions: 

#1: ObjectId: X.X.XX.XX Criticality=false 
KeyUsage [ 
    DigitalSignature 
    Key_Encipherment 
] 

... 

******************************************* 
******************************************* 

в то время как certificate.pfx экспортируемые из IE с "Включить все сертификаты в путь сертификации" содержит цепочку сертификатов с вторым доверенным сертификатом CA (длиной цепи сертификата: 2):

keytool -list -keystore certificate.p12 -storepass secret -storetype PKCS12 -v 



******************************************* 
******************************************* 

Alias name: alias 
Entry type: PrivateKeyEntry 
Certificate chain length: 2 
Certificate[1]: 
Owner: CN=MyCompany, [email protected], O=bla, C=PL 
Issuer: CN=Trusted CA, O=ble, C=PL 
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
Valid from: ... until: ... 
Certificate fingerprints: 
     MD5: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX 
     SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX 
     Signature algorithm name: SHA1withRSA 
     Version: 3 

Extensions: 

#1: ObjectId: X.X.XX.XX Criticality=false 
KeyUsage [ 
    DigitalSignature 
    Key_Encipherment 
] 

... 

Certificate[2]: 
Owner: CN=Trusted CA, O=ble ble ble, C=PL 
Issuer: CN=ROOT CA, O=ble ble ble, C=PL 
Serial number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
Valid from: ... until: ... 
Certificate fingerprints: 
     MD5: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX 
     SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX 
     Signature algorithm name: SHA1withRSA 
     Version: 3 

Extensions: 


******************************************* 
******************************************* 

Итак, чтобы решить мою проблему, я должен иметь сертификат p12 с цепью к доверенному сертификату ЦСА. Я могу сделать это, импортировав p12 в IE и затем экспортируя обратно с помощью «Включить все сертификаты в путь сертификации».

Как я могу сделать это без IE с помощью keytool или другого инструмента?

Bary

ответ

27

Собственный ответ.

я понял, как сделать это с помощью OpenSSL:

openssl pkcs12 -in certificate.p12 -out clientcert.pem -nodes -clcerts 
openssl x509 -in trusted_ca.cer -inform DER -out trusted_ca.pem 
openssl x509 -in root_ca.cer -inform DER -out root_ca.pem 
cat clientcert.pem trusted_ca.pem root_ca.pem >> clientcertchain.pem 
openssl pkcs12 -export -in clientcertchain.pem -out clientcertchain.pfx 
+0

ли трюк для меня тоже. –

+0

Добавить, чтобы добавить опцию '-nokeys' к последней команде. У меня OpenSSL 1.0.1e-fips 11 февраля 2013 г. – ixe013

+0

Я потратил часы на поиск этой функции. Фантастика! Мне это нужно для Tomcat 7.0.63 в Windows 2008 R2. – bgStack15

Смежные вопросы