web-dev-qa-db-ja.com

.pfxファイルを秘密鍵でキーストアに変換する方法は?

Androidアプリケーション(.apk)に署名する必要があります。
.pfxファイルがあります。 Internet Explorerで.cerファイルに変換してから、keytoolを使用して.cer.keystoreに変換しました。次に、.apkにjarsignerで署名しようとしましたが、.keystoreには秘密キーが含まれていません。

私が間違っているのは何ですか?

99
Ola

JDK 1.6以降の使用

以下のコメントでジャスティンは、keytoolだけで次のコマンドを使用してこれを実行できることを指摘しています(ただし、JDK 1.6以降のみ)。

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

JDK 1.5以下を使用

OpenSSLはそれをすべて実行できます。 JGuruのこの答え は、私がこれまでに見つけた最良の方法です。

まず、 OpenSSL がインストールされていることを確認してください。 Mac OS Xで見つけたように、多くのオペレーティングシステムに既にインストールされています。

次の2つのコマンドは、pfxファイルをJava PKCS12キーストアとして開くことができる形式に変換します。

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

2番目のコマンドで提供される名前は、新しいキーストア内のキーのエイリアスであることに注意してください。

Java keytoolユーティリティと次のコマンドを使用して、キーストアの内容を確認できます。

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

最後に、必要に応じて、上記で作成したキーストアを新しいキーストアにインポートして、これをJKSキーストアに変換できます。

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
241
MikeD

jarsignerは、jarに署名するためのキーストアとしてpfxファイルを使用できます。エクスポートするときは、pfxファイルに秘密キーと証明書チェーンがあることを確認してください。他の形式に変換する必要はありません。秘Theは、pfxファイルのAliasを取得することです。

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

エイリアスを取得したら、署名は簡単です

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

上記の2つのコマンドは、pfxエクスポートで指定したパスワードの入力を求めます。パスワードをクリアテキストで表示するには、-keystoreスイッチの前に-storepassスイッチを使用します

署名したら、作業を賞賛します。

jarsigner.exe -verify -verbose -certs  yourjarfile
21
gjpc

PFXをJKS(Java Key Store)にインポートする方法を説明する this ページが見つかりました。

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME
16
kaptan

Justin(above)は正確です。ただし、証明書の取得元(中間CA、ルートCAの有無)またはpfxの作成/エクスポート方法によっては、証明書チェーンが欠落している場合があることに注意してください。インポート後、PrivateKeyEntryタイプの証明書が作成されますが、チェーンの長さは1です。

これを修正するには、いくつかのオプションがあります。私の心の中のより簡単なオプションは、IEでpfxファイルをインポートおよびエクスポートすることです(チェーンにすべての証明書を含めるオプションを選択します)。 IE内の証明書のインポートおよびエクスポートプロセスは非常に簡単で、他の場所で十分に文書化されている必要があります。

エクスポートしたら、上記のジャスティンとしてキーストアをインポートします。これで、タイプPrivateKeyEntryの証明書と、1を超える証明書チェーン長を持つキーストアができます。

上記を実行しない場合、特定の.NetベースのWebサービスクライアントはエラー(信頼関係を確立できない)になります。

2
TechIsFun

PFXファイルには、プライベートキーが含まれている必要があります。プライベートキーと証明書をPFXファイルから直接エクスポートし(OpenSSLを使用するなど)、Javaキーストアにインポートします。

編集

さらに詳しい情報:

  • Windows用OpenSSLをダウンロード こちら
  • 秘密鍵のエクスポート:openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • 証明書のエクスポート:openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • keytoolを使用して、秘密キーと証明書をJavaキーストアにインポートします。
2
Bernard

JDK 1.5以前で作業している場合、keytoolユーティリティには-importkeystoreオプションがありません( JDK 1.5 keytool documentation を参照)。MikeDによるソリューションは、.pfxより新しいJDK(1.6以上)を搭載したマシン。

JDK 1.5以前の別のオプション(Oracle WebLogic製品を使用している場合)は、このOracleドキュメントの指示に従うことです。 キーストアでのPFXおよびPEM証明書形式の使用.pem形式への変換、このテキスト形式から証明書情報を抽出する方法、および.jksユーティリティ(これはWebLogic製品に含まれるユーティリティ)を使用してJava utils.ImportPrivateKey形式にインポートする方法について説明します。

0
Mariano Paniga