コード署名証明書を購入する場合、PKCS12証明書とJKS証明書から始めることのメリットは何ですか?一部のベンダーは、JKSまたはPKCS12証明書署名要求から開始するための指示を出します。特にコストを考えると、購入した証明書を最大限に柔軟に使用できるようにしたいと考えています。たとえば、Javaコードだけでなく署名する場合もあります(例:iPhoneまたはAndroidコード署名)。どちらのアプローチを選択する場合でも、どのような技術的考慮事項を考慮する必要がありますか?
2 に答える
Javaで作業している場合、Java Key Storeは秘密鍵を格納するためのかなり自然な場所です。Javaアプリケーションは通常、必要な鍵をJKSから取得することを期待しており、独自のJavaアプリから簡単にアクセスできます。ただし、Javaの外部からJKSにアクセスすることはできません(いくつかのフープをジャンプする必要があります)。
一方、PKCS#12(別名PFX)ファイルは、暗号化された秘密鍵と証明書を格納するための言語に依存しない方法であり、ほぼすべての場所でサポートされるほど長い間使用されてきました。ただし、ファイル形式はひどく複雑で一般的すぎることに注意してください。PeterGutmannの「PFX-暗号化プロトコル/標準を設計しない方法」(http://www.cs.auckland.ac )を参照してください。 .nz /〜pgut001 / pubs / pfx.html)を使用して、問題を簡単に確認できます。
これらのストレージ形式のいずれかを使用することは、アプリケーションが暗号化された秘密鍵をローカルに保存する方法に関する実際の問題であることに注意してください。あなたの証明書を販売するベンダーは秘密鍵を見ることは決してないので、あなたがどのフォーマットを使用するかは気にしません。彼(ベンダー/ CA)にPKCS#10証明書要求(公開鍵を含み、秘密鍵を使用して署名されていますが、秘密鍵は含まれていません)を送信すると、証明書(JKSまたはに保存できます)が返送されます。 PKCS#12ファイルまたはその両方、またはその他の必要な場所)。
技術的には、どちらの形式も理想的ではありません。どちらも、パスワードから派生した鍵で秘密鍵を暗号化することで秘密鍵を保護するからです。ただし、これによってどちらかが優れているわけではありません。スマートカードまたはその他のハードウェアキーストレージソリューションを使用できる場合は、セキュリティ(利便性ではありませんが)の方が優れています。
選択を決定する主な要因は、秘密鍵の使用をどのように計画するか、つまり、どのアプリケーションが秘密鍵を使用する必要があるか、およびどの形式の鍵ストアがすでに処理しているかです。PKCS#12はより柔軟なオプションです...ただし、自分で作成したコードでのみキーを使用する場合(相互運用性は不要)、PKCS#8またはPKCS#15コンテナーの使用を検討することもできます。
PKCS#12を処理するために独自のコードを作成することはお勧めできません(私はそれを実行しましたが、面白くありません)-実績のあるサードパーティライブラリ(OpenSSLなど)を使用してください。
JKSキーストアがある場合は、以下のコマンドを使用してPKCS12に変換できます
keytool -importkeystore -srckeypass secret -destkeypass meow123 -srcstorepass secretstore -deststorepass secretstore -srcalias certforsigning -destalias certforsigning -srcalias certforencryption -destalias certforencryption -srckeystore my_java_keystore.jks -destkeystore PFX_keystore.pf
ここで、my_java_keystore.jksは、エイリアスcertforsigningとcertforencryptionを持つ2つのキーを持つJavaキーストアです。
また、Keytoolを使用してキーをPKCS12からJKSに変換することもできます