質問

keytoolおよびopensslアプリケーションを使用して、JavaキーストアファイルからPEMファイルに変換しようとしています。しかし、変換を行う良い方法を見つけることができませんでした。何か案は?

キーストアを直接PEMに変換する代わりに、まずPKCS12ファイルを作成してから、関連するPEMファイルとキーストアに変換しようとしました。しかし、それらを使用して接続を確立できませんでした。 (セキュリティで保護された接続を実装するには、PEMファイルとキーストアファイルだけが必要です。<!> quot; Javaキーストアファイル<!> quot;から開始するような制限はありません。:)私の場合)

しかし、jksからpemへの直接変換方法が望ましいです。

役に立ちましたか?

解決

少なくともjdk6を使用すると、非常に簡単です...

bash$ keytool -keystore foo.jks -genkeypair -alias foo \
        -dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
Enter keystore password:  
Re-enter new password: 
Enter key password for 
        (RETURN if same as keystore password):  
bash$ keytool -keystore foo.jks -exportcert -alias foo | \
       openssl x509 -inform der -text
Enter keystore password:  asdasd
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1237334757 (0x49c03ae5)
        Signature Algorithm: dsaWithSHA1
        Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
        Validity
            Not Before: Mar 18 00:05:57 2009 GMT
            Not After : Jun 16 00:05:57 2009 GMT
        Subject: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
        Subject Public Key Info:
            Public Key Algorithm: dsaEncryption
            DSA Public Key:
                pub: 
                    00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
                    7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
 

bash$ keytool -importkeystore -srckeystore foo.jks \
       -destkeystore foo.p12 \
       -srcstoretype jks \
       -deststoretype pkcs12
Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password:  
Entry for alias foo successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

bash$ openssl pkcs12 -in foo.p12 -out foo.pem
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

bash$ openssl x509 -text -in foo.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1237334757 (0x49c03ae5)
        Signature Algorithm: dsaWithSHA1
        Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
        Validity
            Not Before: Mar 18 00:05:57 2009 GMT
            Not After : Jun 16 00:05:57 2009 GMT
        Subject: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com
        Subject Public Key Info:
            Public Key Algorithm: dsaEncryption
            DSA Public Key:
                pub: 
                    00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
                    7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
 

bash$ openssl dsa -text -in foo.pem
read DSA key
Enter PEM pass phrase:
Private-Key: (1024 bit)
priv:
    00:8f:b1:af:55:63:92:7c:d2:0f:e6:f3:a2:f5:ff:
    1a:7a:fe:8c:39:dd
pub: 
    00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14:
    7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:



最終的には:

  • foo.jks-Java形式のキーストア。
  • foo.p12-PKCS#12形式のキーストア。
  • foo.pem-PEM形式のキーストアのすべてのキーと証明書。

(この最後のファイルは、必要に応じてキーと証明書に分割できます。)


コマンドの概要-JKSキーストアを作成するには:

keytool -keystore foo.jks -genkeypair -alias foo \
    -dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'

コマンドの概要-JKSキーストアをPKCS#12キーストアに変換してから、PEMファイルに変換する:

keytool -importkeystore -srckeystore foo.jks \
   -destkeystore foo.p12 \
   -srcstoretype jks \
   -deststoretype pkcs12

openssl pkcs12 -in foo.p12 -out foo.pem

JKSキーストアに複数の証明書があり、エイリアスの1つに関連付けられた証明書とキーのみをエクスポートする場合、次のバリエーションを使用できます。

keytool -importkeystore -srckeystore foo.jks \
   -destkeystore foo.p12 \
   -srcalias foo \
   -srcstoretype jks \
   -deststoretype pkcs12

openssl pkcs12 -in foo.p12 -out foo.pem

コマンドの概要-JKSキーストアとPEMファイルを比較するには:

keytool -keystore foo.jks -exportcert -alias foo | \
   openssl x509 -inform der -text

openssl x509 -text -in foo.pem

openssl dsa -text -in foo.pem

他のヒント

StoBorのコマンドを使用すると、opensslからエラーが発生し続けました:

MAC verified OK
Error outputting keys and certificates
139940235364168:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:535:
139940235364168:error:23077074:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 cipherfinal error:p12_decr.c:97:
139940235364168:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:123:

何らかの理由で、このスタイルのコマンドのみがJKSファイルに対して機能します

keytool -importkeystore -srckeystore foo.jks \
   -destkeystore foo.p12 \
   -srcstoretype jks \
   -srcalias mykey \
   -deststoretype pkcs12 \
   -destkeypass DUMMY123

キーはdestkeypassを設定していましたが、引数の値は重要ではありませんでした。

keytoolコマンドでは、キーストアから秘密キーをエクスポートできません。これを行うには、Javaコードをいくつか作成する必要があります。キーストアを開き、必要なキーを取得し、PKCS#8形式のファイルに保存します。関連する証明書も保存します。

KeyStore ks = KeyStore.getInstance("jks");
/* Load the key store. */
...
char[] password = ...;
/* Save the private key. */
FileOutputStream kos = new FileOutputStream("tmpkey.der");
Key pvt = ks.getKey("your_alias", password);
kos.write(pvt.getEncoded());
kos.flush();
kos.close();
/* Save the certificate. */
FileOutputStream cos = new FileOutputStream("tmpcert.der");
Certificate pub = ks.getCertificate("your_alias");
cos.write(pub.getEncoded());
cos.flush();
cos.close();

OpenSSLユーティリティを使用して、これらのファイル(バイナリ形式)をPEM形式に変換します。

openssl pkcs8 -inform der -nocrypt < tmpkey.der > tmpkey.pem
openssl x509 -inform der < tmpcert.der > tmpcert.pem

キーツールを使用したjksからpemファイルへの直接変換

keytool -exportcert -alias selfsigned -keypass password -keystore test-user.jks -rfc -file test-user.pem

JKSファイルをPEMおよびKEY形式(.crt <!> amp; .key)に変換する簡単な手順:

keytool -importkeystore -srckeystore <Source-Java-Key-Store-File> -destkeystore <Destination-Pkcs12-File> -srcstoretype jks -deststoretype pkcs12 -destkeypass <Destination-Key-Password>

openssl pkcs12 -in <Destination-Pkcs12-File> -out <Destination-Pem-File>

openssl x509 -outform der -in <Destination-Pem-File> -out <Destination-Crt-File>

openssl rsa -in <Destination-Pem-File> -out <Destination-Key-File>

非常に興味深い解決策を見つけました:

http://www.swview.org/node/191

次に、公開キーと秘密キーのペアを2つのファイルprivate.key publi.pemに分割しました。

さて、#12ファイルから OpenSSLが便利に行う必要があります

openssl pkcs12 -in pkcs-12-certificate-file -out pem-certificate-file
openssl pkcs12 -in pkcs-12-certificate-and-key-file -out pem-certificate-and-key-file

エラー/障害とは何かについての詳細

JKSキーストアを単一のPEMファイルに変換するには、次のコマンドを使用します。

keytool -list -rfc -keystore "myKeystore.jks" | sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d" >> "myKeystore.pem"

説明:

  1. keytool -list -rfc -keystore "myKeystore.jks"は、 'myKeyStore.jks' KeyStoreのすべてをPEM形式でリストします。ただし、追加情報も出力されます。
  2. | sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d"は、不要なものをすべて除外します。キーストア内のすべてのPEMのみが残っています。
  3. >> "myKeystore.pem" PEMをファイル「myKeyStore.pem」に書き込みます。

opensslをインストールしておらず、簡単な解決策を探している場合、 portcle これは非常に便利で、ダウンロードするのに小さいです。

欠点は、私の知る限りコマンドラインがないことです。 しかし、GUIから、PEM秘密鍵をエクスポートするのは非常に簡単です:

  1. JKSキーストアを開きます
  2. 秘密鍵エントリを右クリックして、エクスポートを選択します
  3. 秘密鍵と証明書およびPEM形式を選択

     Portcleを使用してJKSからPEM秘密鍵をエクスポート

キーストアエクスプローラーを試す http://keystore-explorer.org/

KeyStore Explorerは、Javaコマンドラインユーティリティのkeytoolおよびjarsignerに代わるオープンソースGUIです。 openssl / pkcs12も同様です。

最初にキーストアファイルを作成

C:\ Program Files \ Android \ Android Studio \ jre \ bin <!> gt; keytool -keystore androidkey.jks -genkeypair -alias androidkey

キーストアのパスワードを入力:
新しいパスワードを再入力:
あなたの名と姓は何ですか?   不明:名、姓
組織単位の名前は何ですか?   不明:モバイル開発
あなたの組織の名前は何ですか?   不明:会社名
あなたの市または地域の名前は何ですか? 州または県の名前は何ですか?
このユニットの2文字の国コードは何ですか?   不明:IN // Enter

を押します
  

今、確認を求められます

CN = FirstName LastName、OU = Mobile Development、O =あなたの会社名、L = CityName、ST = StateName、C = INは正しいですか?   [いいえ]:はい

のキーパスワードを入力         (キーストアのパスワードと同じ場合に戻る):同じパスワードが必要な場合はEnterキーを押します

  

キーが生成されました。次のコマンドを使用して単純にpemファイルを取得できます

C:\ Program Files \ Android \ Android Studio \ jre \ bin <!> gt; keytool -export -rfc -alias androidkey -file android_certificate.pem -keystore androidkey.jks
キーストアのパスワードを入力:
ファイルに保存された証明書

最初にJKSからPKCS12にキーストアをダンプします

1。   keytool -importkeystore -srckeystore〜/ .android / debug.keystore -destkeystore Intermediate.p12 -srcstoretype JKS -deststoretype PKCS12

新しいpkcs12ファイルをpemにダンプします

  1. openssl pkcs12 -in Intermediate.p12 -nodes -out Intermediate.rsa.pem

証明書と秘密キーの両方がpem形式である必要があります。それらを分割します。 <!>#8220; BEGIN CERTIFICATE <!>#8221;の間に部品を置きます。および<!>#8220; END CERTIFICATE <!>#8221; cert.x509.pemに <!>#8220; BEGIN RSA PRIVATE KEY <!>#8221;の間にパーツを置きます。および<!>#8220; END RSA PRIVATE KEY <!>#8221; private.rsa.pemへ signapkが期待するように秘密鍵をpk8形式に変換します

3。 openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt

  

JavaキーストアをPEM形式に変換する

すべての最も正確な答えは、これは不可能だということです。

Javaキーストアは暗号化キーおよび証明書の単なる保管施設であり、PEMはX.509証明書のみのファイル形式です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top