1. ホーム

[解決済み】トラストストアとキーストアの比較 - keytoolで作成する場合

2022-04-14 04:28:47

質問

鍵ストアは通常秘密鍵/公開鍵を保持し、トラストストアは公開鍵のみ(そして通信する予定の信頼できる相手のリストを表す)であると理解しています。これが私の最初の仮定なので、それが正しくない場合は、おそらく私はあまりうまく起動していないでしょう...。

しかし、keytoolを使用する際に、どのように/いつストアを区別しているのかを理解することに興味がありました。

でキーストアを作成しました。

keytool -import -alias bob -file bob.crt -keystore keystore.ks

で、私の keystore.ks ファイルが作成されます。私は yes という質問に対して、bob を信頼するかどうかという質問をしていますが、これによって作成されたのが keystore ファイルなのか truststore ファイルなのか、私にはよくわかりません。このファイルをどちらか一方として使用するようにアプリケーションを設定することはできます。

-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x

であり System.setProperty( "javax.net.debug", "ssl") を設定すると、信頼された証明書の下に証明書が表示されます (ただし、キーストアのセクションには表示されません)。私がインポートしている特定の証明書は公開鍵しか持っておらず、私はそれを使ってBobにSSL接続で物を送るつもりです(しかし、おそらくそれは別の質問に残しておくのが最善でしょう!)。

何かご指摘やご説明がありましたら、よろしくお願いします。keytoolの出力は、何をインポートしても同じで、一方はキーストア、他方はトラストストアという慣習なのでしょうか?SSLなどを使用する場合の関係はどうなっているのでしょうか?

解決方法は?

用語は確かに少しわかりにくいですが、どちらも javax.net.ssl.keyStorejavax.net.ssl.trustStore は、使用する鍵ストアを指定するためのもので、2つの異なる目的で使用されます。鍵束にはさまざまな形式があり、必ずしもファイルである必要はありません ( 本題 )、そして keytool は、それに対して様々な操作(import/export/list/...)を行うためのツールに過ぎません。

javax.net.ssl.keyStorejavax.net.ssl.trustStore パラメータは KeyManagerTrustManager をそれぞれ作成し、それを使って SSLContext を経由して SSL/TLS 接続をするときに使う SSL/TLS 設定を含んでいます。 SSLSocketFactory または SSLEngine . これらのシステムプロパティは、単にデフォルト値が由来しており、それを SSLContext.getDefault() によって使用されます。 SSLSocketFactory.getDefault() などがあります。(デフォルト値を使いたくなければ、APIでカスタマイズすることができますし、特定の SSLContext を使用することができます)。

との違いは KeyManagerTrustManager (の間(つまり javax.net.ssl.keyStorejavax.net.ssl.trustStore から引用)は、次のとおりです。 JSSEレフガイド ):

TrustManagerです。 を使用するかどうかを決定します。 リモート認証の認証情報(および 接続を行う必要があります。 を信頼する。

KeyManager(キーマネージャー)。 どの に送信する認証クレデンシャル。 リモートホストの

(他のパラメータも利用可能で、そのデフォルト値については JSSE参照ガイド . トラストストアにデフォルト値がある一方で、キーストアにはないことに注意してください)。

本来、鍵ストアは javax.net.ssl.keyStore は秘密鍵や証明書を格納するためのもので、一方 javax.net.ssl.trustStore は、リモートパーティが証明書を提示したときに、あなたが信頼してもいいと思うCA証明書を格納することを意味します。場合によっては、これらは同じストアにすることもできますが、(特にファイルベースの場合は)別々のストアを使用する方がよい場合が多いです。