Androidアプリケーション(.apk
)に署名する必要があります。.pfx
ファイルがあります。 Internet Explorerで.cer
ファイルに変換してから、keytoolを使用して.cer
を.keystore
に変換しました。次に、.apk
にjarsignerで署名しようとしましたが、.keystoreには秘密キーが含まれていません。
私が間違っているのは何ですか?
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
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
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
Justin(above)は正確です。ただし、証明書の取得元(中間CA、ルートCAの有無)またはpfxの作成/エクスポート方法によっては、証明書チェーンが欠落している場合があることに注意してください。インポート後、PrivateKeyEntryタイプの証明書が作成されますが、チェーンの長さは1です。
これを修正するには、いくつかのオプションがあります。私の心の中のより簡単なオプションは、IEでpfxファイルをインポートおよびエクスポートすることです(チェーンにすべての証明書を含めるオプションを選択します)。 IE内の証明書のインポートおよびエクスポートプロセスは非常に簡単で、他の場所で十分に文書化されている必要があります。
エクスポートしたら、上記のジャスティンとしてキーストアをインポートします。これで、タイプPrivateKeyEntryの証明書と、1を超える証明書チェーン長を持つキーストアができます。
上記を実行しない場合、特定の.NetベースのWebサービスクライアントはエラー(信頼関係を確立できない)になります。
PFXファイルには、プライベートキーが含まれている必要があります。プライベートキーと証明書をPFXファイルから直接エクスポートし(OpenSSLを使用するなど)、Javaキーストアにインポートします。
編集
さらに詳しい情報:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
keytool
を使用して、秘密キーと証明書をJavaキーストアにインポートします。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
形式にインポートする方法について説明します。