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