38

java keytoolを使用してトラストストアを作成しました(CA証明書を持たないサーバーのサーバー認証用)。しかし、私は何か奇妙なことに気づきました。私はこのようにクライアントを開始しています:

java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client

(注:パスワードは指定されていません)

上記の呼び出しは機能します。


しかし、私がこれを試してみると:

java -classpath <STUFF> Client

それは動作しません。(明らかに、それは機能しません。トラストストアが必要です)。


私はこのオプションを渡す必要があると思っていました(しかし私はしませんでした):

-Djavax.net.ssl.trustStorePassword=mypass

質問:トラストストアにアクセスするためにパスワードは必要ありませんか?パスワードは変更のためだけですか?キーストアはどうですか?

4

4 に答える 4

46

パスワードは、キーストアの整合性を保護するために使用されます。ストアのパスワードを指定しない場合でも、キーストアの内容を読み取ることができます。このコマンドkeytool -listは、この動作を示しています (パスワードを空にして使用します)。

于 2010-03-01T16:00:51.960 に答える
31

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 を判断するために重要です。

于 2016-05-20T02:54:38.907 に答える
-3

トラストストアを指定しない場合は、代わりにデフォルトのトラストストアが使用されます。要求したホストを信頼するには、トラストストアを指定する必要があるというエラーが発生したと思いますか?デフォルトのトラストストアは$JAVA_HOME/ lib / security/jssecacertsにあります。

于 2010-02-26T20:57:07.270 に答える
-3

デフォルトでは、JRE トラスト ストアのパスワードは「changeit」です。Java を使用してプログラムでデフォルトのトラスト ストア (cacerts) のパスワードを変更する場合は、このリンクを参照してください。

于 2015-04-09T13:56:23.930 に答える