web-dev-qa-db-ja.com

証明書チェーンをp12(pfx)証明書に追加する

クライアント証明書でWebServicesに接続するJavaおよびcxfにアプリケーションがあります。

WebService所有者から証明書を取得しました

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

このp12証明書を、Javaが必要とする正常なjksキーストアに変換するのに問題があります。

これは私がしました:

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は機能せず、このcertificate1.jksを使用するとHTTPレスポンス「403:Forbidden」が返されます

ただし、この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

その後、すべてが正常に動作し、certificate2.jksを使用してWebServiceに接続できます。

元のcertificate.p12(pfx)にはエントリが1つしか含まれていません(証明書チェーンの長さ: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
]

...

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

一方、IE with with certificate pathにすべての証明書を含める]からエクスポートされたcertificate.pfxには、2番目の信頼できる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:


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

したがって、私の問題を解決するには、信頼できるCA証明書へのチェーンを持つp12証明書が必要です。これを行うには、p12をIEにインポートし、「証明書パスにすべての証明書を含める」でエクスポートし直します。

IE keytoolまたは他のツールを使用せずにこれを行うにはどうすればよいですか?

バリー

16
bary

自分の答え。

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
37
bary

Windows OSで作業している場合は、IISを介して通常どおり証明書をインストールし、mmc.exeを開き、[ファイル]-> [スナップインの追加/削除]-> [証明書]をダブルクリックし、次に[コンピューターアカウント]を選択し、完了、OK。

enter image description here

必要に応じて証明書を展開し、CAからの証明書を「中間認証局」または「信頼されたルート認証局」に追加します。

enter image description here

次に、「Webホスティング」に進みます。ここにWebSite証明書が必要です。証明書を選択して左クリックし、エクスポートを選択してウィザードに従ってください。重要なことは「秘密鍵を含める」、チェーンにすべての証明書を含める、すべての拡張プロパティをエクスポートするには、パスワードを設定し、出力ファイル名を選択する必要があります。これがこれです。これで、完全なチェーンを含む証明書が作成されました。 Facebookや同様の問題はもうありません。