Pascal-thiventの優れた回答に加えて:
キーストアのパスワードには 2 つの目的があります。指定されていない場合、keytool
既存の証明書エントリを削除したり、新しい証明書エントリを追加したりして、ストアの内容を新しい内容に置き換えることを拒否します。
もちろん、keytool
(setuid ではない) を使用してキーストア ファイルを更新するための書き込みアクセス権がある場合は、パスワードをチェックしない別のツールを使用して内容を置き換えることができます。そして、ストアとそのフォーマットはパスワードなしで読み取り可能であることを知っているので、おそらくそこに必要なものを書き込むことができます。
そこで確認パスワードの出番です。ストア エントリが書き出されると、提供されたストア パスワードを使用して、パスワードによってソルト化されたストア コンテンツのダイジェストが計算されます。これは一方向のハッシュ/ダイジェストであるため、パスワードがないと、ストアのコンテンツが改ざんされているかどうかを確認できません。同様に、パスワードを知らない悪意のある人物も、ストアのコンテンツを変更して、そのパスワードによって生成されるダイジェスト ハッシュを生成することはできません。
そのため、no-password をkeytool
指定すると、ストアが改ざんされていないことを確認できないことを警告するだけです。無効なパスワードを入力した場合、またはストアが改ざんされている場合は、別のメッセージが表示されます。
Enter keystore password:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
keytool
は、現在のストアの内容と指定したパスワードに基づいて既存のハッシュ ダイジェストを再作成できませんでした。そのため、パスワードが正しくないか、キーストアが侵害されているかのいずれかです。keytool
判断はできませんが、ユーザーまたはストアを読み取るソフトウェアが知っていると想定しています。 .
キーストアという用語は一般的に使用されていますが、キーストアとトラストストアを同等に指すことに注意してください。一般的ではありませんが、キーストアはID ストアであることが多く、HTTPS を実行するサーバーなどで使用される ID とその秘密の秘密鍵が含まれています。多くの場合、トラストストアには公開鍵のみが含まれ、秘密鍵は含まれないため、シークレットは含まれませんが、クライアントが信頼する ID を判断するために重要です。