JKS Java keystoreについて読みましたが、フォーマットの詳細は見つかりませんでした。
[JKS]形式の詳細。
これはSun.security.provider.JavaKeyStore
(Mercurialのソース) によって実装されますが、JavaのData{Output,Input}Stream
規則に基づいて非常にシンプルで、4バイトのマジックナンバー、4バイトのバージョン番号、4-エントリのバイト数。それぞれが4バイトのタイプ、長さ+(変更された)UTF名、8バイトのタイムスタンプ、秘密鍵の長さ+エンコード+証明書数、およびタイプ(実際には常にX.509
)+長さ+エンコードを含む可変数のエントリ/各証明書;そして最後に、パスワードのハッシュと完全性チェックのための先行データ。
ストアパスワードは、ファイルの整合性を確認するためだけのものですか?
はい。 JCA APIとJKS形式では、各秘密鍵を、ストアパスワードとは異なる個別のパスワードで暗号化できます。たとえばkeytool
を使用すると、キーパスワードを指定できますが、defaultsこれはストアパスワードと同じです。ただし、一部のプログラムは、異なるキーとストアパスワードに対応できません。特に、SSL/TLS(したがってHTTPS)にデフォルトのトラストマネージャーまたはキーマネージャーを使用しているため、ストアとキーの両方に同じパスワードを使用する必要があります。
秘密鍵はどのように保護されますか?
各秘密鍵はSun.security.provider.KeyProtector
(Mercurialのソース) の「独自の」スキームを使用したPBE +ハッシュであり、PKCS#8 EncryptedPrivateKeyInfo
としてファイルにフォーマットされます。