web-dev-qa-db-ja.com

コード署名におけるJKSとPKCS12のメリットは何ですか?

コード署名証明書を購入する場合、PKCS12証明書とJKS証明書から始めるメリットは何ですか?一部の ベンダー JKSまたはPKCS12証明書署名要求から開始する方法を説明します。特にコストを考えると、購入した証明書を最大限に柔軟に使用できるようにしたいと考えています。たとえば、Javaコード(例:iPhoneまたはAndroidコード署名)だけではありません。選択する際に考慮すべき技術的考慮事項どちらのアプローチ?

23
Jason Thrasher

Javaで作業している場合、Javaキーストアは秘密鍵を格納するためのかなり自然な場所です。Javaアプリケーションは通常、必要な鍵を取得することを期待しています。 JKSから、そしてあなた自身のJavaアプリからアクセスするのは簡単です。しかし、JKSはJavaの外部から(いくつかのフープを飛び越えずに)アクセスできません。

一方、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など)を使用してください。

44
dajames

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 -dest_

ここで、my_Java_keystore.jksはJavaキーストアで、エイリアスcertforsigningとcertforencryptionを持つ2つのキーがあります。

keytoolを使用してキーをPKCS12からJKSに変換することもできます

6
Reddymails