web-dev-qa-db-ja.com

信頼証明書を.jksから.pemに変換する方法は?

Java SSLサーバーにJava SSLクライアントとC++ SSLクライアントを接続できるようにします。Javaクライアントは問題なく接続します。C++ SSLクライアントが接続できるようにしたいので、この目的のために、serverpub.jksを.pemファイルにエクスポートしてC++クライアントができるようにしたいと思いました。 sslコンテキストにロードできますが、これは機能していません。

以下は、Javaクライアントとサーバーのjksキーストアを作成した方法と、serverpub.jksを.pemファイルにエクスポートしようとしている方法の説明です。

手順1:クライアントキーストアとサーバーキーストアを生成する

c:\keytool -genkeypair -alias myserverkeys -keyalg RSA -dname "CN=my Server,OU=kl2217,O=kl2217org,L=NYC,ST=NY,C=US" -keypass password -keystore server.jks -storepass password
c:\keytool -genkeypair -alias myclientkeys -keyalg RSA -dname "CN=my Client,OU=kl2217,O=kl2217org,L=NYC,ST=NY,C=US" -keypass password -keystore myclient.jks -storepass password

手順2:サーバーの公開証明書をエクスポートし、個別のキーストアを作成します

c:\keytool -exportcert -alias myserverkeys -file serverpub.cer -keystore myserver.jks -storepass spacex
c:\keytool -importcert -keystore serverpub.jks -alias serverpub -file serverpub.cer -storepass password

手順3:クライアントの公開証明書をエクスポートし、個別のキーストアを作成します

c:\keytool -exportcert -alias myclientkeys -file clientpub.cer -keystore myclient.jks -storepass spacey
c:\keytool -importcert -keystore clientpub.jks -alias clientpub -file clientpub.cer -storepass password

ここまでは順調ですね。

ここで私は問題にぶつかります。

ステップ4:serverpub.jksを.pem形式に変換する

c:\keytool -importkeystore -srckeystore serverpub.jks -destkeystore serverpub.p12 -srcstoretype jks -deststoretype pkcs12

そして返信

Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Problem importing entry for alias serverpub: Java.security.KeyStoreException: TrustedCertEntry not supported.
Entry for alias serverpub not imported.
Do you want to quit the import process? [no]:

これは何を意味するのでしょうか?私は何が間違っているのですか?

ステップ5:だっただろう

c:\openssl pkcs12 -in serverpub.p12 -out serverpub.pem

しかし、ご覧のとおり、私はそれほど遠くまで行くことができませんでした。

これを正しく行う方法を理解するのに助けていただければ幸いです。

ありがとう

7
driftwood

残念ながら、keytoolは、PEMファイルが信頼できる証明書の概念をサポートしていないという意見があるため、トラストストアから明示的にエクスポートすることはできません。したがって、代わりにcerファイルのキーストアを使用します。

  • Cerから:

    openssl x509 -inform der -in serverpub.cer -out serverpub.pem
    
  • キーストアから:

    keytool -importkeystore -srckeystore server.jks -destkeystore server.p12 -deststoretype PKCS12
    openssl pkcs12 -in server.p12 -nokeys -out server.cer.pem
    openssl pkcs12 -in server.p12 -nodes -nocerts -out server.key.pem
    

または単に試してみてください

keytool -exportcert -alias myserverkeys -keystore serverpub.jks -rfc -file serverpub.pem
10
Chris Molanus

次の単純な1行のコマンドは、証明書をPEM形式にエクスポートします。はい、opensslが必要です。keytoolだけではこれを実行できません。

keytool -exportcert -alias <CERT-ALIAS> -keystore <KEYSTORE-FILE> | openssl x509 -inform DER >cert.pem
3
Oleg Gryb