プライベートキーを使用して.pfxファイルをキーストアに変換する方法


107

Androidアプリケーションに署名する必要があります(.apk)。ファイル
があり.pfxます。私はそれを変換する.cerInternet Explorerを経由してファイルして、変換.cer.keystorekeytoolを使用して。次に.apk、jarsignerで署名しようとしましたが、.keystoreには秘密鍵が含まれていないと表示されています。

私は何を間違っていますか?


これは便利です。私は見つけるとWindowsのためのkeytoolを実行することができますどのようにstackoverflow.com/questions/5488339/...
ピーターBarbanyaga

回答:


259

JDK 1.6以降の使用

以下のコメントでJustinによって、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

28
すべての3つのステップの必要がない、ただ実行します。keytool -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype PKCS12 -deststoretype JKS
JustinMorris

古いバージョンのkeytoolではそれができないと思います。8年前はopensslを実行する必要があったが、現在はOracle JDK 6および7のkeytoolを使用する必要があることを覚えています。
David Brossard 2013年

2
私がジャスティンの1年前に、より詳細に、より簡単な形で答えを出したことに注意してください。
gjpc 2014年

@gjpc注目。あなたの答えは非常に完全で、多くの賛成票に値します:)
MikeD 2014年

これは本当に素晴らしい答えであり、何日もの研究の後に私を救いました。この答えは、本当に多くの賛成票に値します。ありがとうございます。
Mythul 2014年

22

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

 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

1
キーストアファイルを変換する必要がないための+1(すでに十分な形式でファイルを持っています!)
Trejkaz

22

PFXをJKS(Javaキーストア)にインポートする方法を説明するこのページを見つけました。

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

3
これは完全な答えになるはずです!
JustAGuy 2016年

私はこのような答えを探していました-エイリアス名
user3437460

2

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
  • を使用して、秘密キーと証明書をJavaキーストアにインポートしますkeytool

keytoolを使用してkey.pemとcert.pemをインポートする方法を教えてください。
悲しいAl Abdullah

小さな追加:プライベートkyをエクスポートするときに、最後に-nodesを追加する必要があります
morgan_il 2016年

2

ジャスティン(上)は正確です。ただし、証明書を誰から取得するか(中間CA、ルートCAが関与するかどうか)、pfxの作成/エクスポート方法によっては、証明書チェーンが欠落する場合があることに注意してください。インポート後、PrivateKeyEntryタイプの証明書がありますが、チェーンの長さは1です。

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

エクスポートしたら、上記のJustinで示したようにキーストアをインポートします。これで、タイプがPrivateKeyEntryで、証明書チェーンの長さが1を超えるキーストアが作成されます。

上記を行わないと、特定の.NetベースのWebサービスクライアントでエラーが発生します(信頼関係を確立できません)。


これはIE11では動作しないようです。私が言っているのに、証明書チェーンを含めることができません。私はこれが過去にうまくいったことを知っています。
Brian Knoblauch

0

JDK 1.5以下を使用している-importkeystore場合、keytoolユーティリティにはオプションがなく(JDK 1.5 keytoolのドキュメントを参照)、MikeDによるソリューション.pfxは、新しいJDK(1.6以降)を搭載したマシンにを転送することによってのみ利用できます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.