トラストストアとキーストアの定義


回答:


268

キーストアには、秘密鍵と、対応する公開鍵を持つ証明書が含まれています。

トラストストアには、通信を期待している他のパーティーからの証明書、または他のパーティーを識別するために信頼している認証局からの証明書が含まれています。


12
これは実際には当てはまるはずですが、同じものにすることができます(多くの場合、同じです)。プライベートキーとパブリック証明書を[javaホーム] / jre / lib / security / cacertsのデフォルトの「トラストストア」に実際にインポートできます。keytoolユーティリティは2つの用語を区別せず、ストアタイプ(JKSとPKCS12のみ)のみを区別します。さらに言えば、Javaはソースコードでも同じことを行います。java.security.KeyStoreを作成し、トラストマネージャーを使用して証明書を管理しますが、TrustStoreクラスはありません。

4
Java TrustStore 自体はありません。または、Javaドキュメントでそれを見つけることができませんでした(たとえば、java.security.TrustStore)。認証局を信頼したい場合、それはを通じて信頼されますKeyStore(そしてKeyStoreはに渡されますTrustManagerFactory)。
jww 2014年

5
KeyStore.load(InputStream is, char[] password)docs)はnullパスワードを取ることができ、パブリック証明書へのアクセスを許可することに言及する価値があります。つまり、トラストストアを参照したいコードは、パスワードを知る必要はありません(非常に正当な理由により)
xverges

83
  1. キーストアには秘密鍵が含まれています。これは、サーバーである場合、またはサーバーがクライアント認証を必要とする場合にのみ必要です。

  2. トラストストアには、信頼するCA証明書が含まれています。サーバーの証明書が認識されたCAによって署名されている場合、JREに同梱されているデフォルトのトラストストアはすでにそれを信頼します(信頼できるCAをすでに信頼しているため)。 JREから。

ソース


73

SSLハンドシェイクでは、trustStoreの目的は資格を検証することであり、keyStoreの目的は資格を提供することです。

keyStore

JavaのkeyStoreは、公開鍵に対応する秘密鍵と証明書を格納し、SSLサーバーであるか、SSLがクライアント認証を必要とする場合に必要です。

TrustStore

TrustStoreはサードパーティからの証明書を格納します。Javaアプリケーションは通信するか、CA(Verisign、Thawte、Geotrust、GoDaddyなどの認証局)によって署名された証明書を使用してサードパーティを識別します。

TrustManager

TrustManagerは、リモート接続を信頼する必要があるかどうかを決定します。つまり、リモートパーティがそれを主張する人物であるかどうかを決定し、KeyManagerは、SSLハンドシェイク中に認証のためにリモートホストに送信する認証資格情報を決定します。

SSLサーバーの場合、鍵交換アルゴリズム中に秘密鍵を使用し、公開鍵に対応する証明書をクライアントに送信します。この証明書はkeyStoreから取得されます。SSLクライアント側では、Javaで記述されている場合、trustStoreに格納されている証明書を使用してサーバーのIDを確認します。SSL証明書は最も一般的に.cerファイルとして提供され、任意のキー管理ユーティリティ(keytoolなど)を使用してkeyStoreまたはtrustStoreに追加されます

ソース:http : //javarevisited.blogspot.ch


31

標準のJSSE文書の一部として、Sunからの記事に興味があるかもしれません。

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

通常、トラストストアは、X.509認証などの検証目的で、公開鍵のみを格納するために使用されます。管理性の目的で、管理者または開発者が2つを1つのストアに単純に統合することは非常に一般的です。


1
残念ながら404を示します
クリスビーチ

@ChrisBeach-Oracleサイトで正しいリンクへのリンクを更新しました。
Peter Mularien、2014年

1
トラストストアは、信頼できる署名者証明書
ローン侯爵

9

Javaでは、キーストアとトラストストアの違いは何ですか?

以下は、Java Secure Socket Extension(JSSE)リファレンスガイドのJavaドキュメントからの説明です。他の人が言ったことと何も違うとは思わない。しかし、それは公式のリファレンスを提供します。

キーストア/トラストストア

キーストアは、キーマテリアルのデータベースです。キーマテリアルは、認証やデータの整合性など、さまざまな目的で使用されます。PKCS12やOracleのJKSなど、さまざまなタイプのキーストアを利用できます。

一般的に、キーストア情報は、キーエントリと信頼できる証明書エントリの2つのカテゴリにグループ化できます。キーエントリは、エンティティのIDとその秘密キーで構成され、さまざまな暗号化の目的で使用できます。対照的に、信頼できる証明書エントリには、エンティティのIDに加えて公開鍵のみが含まれます。したがって、javax.net.ssl.KeyManagerなどの秘密鍵が必要な場合は、信頼できる証明書エントリを使用できません。JKSのJDK実装では、キーストアにキーエントリと信頼できる証明書エントリの両方を含めることができます。

トラストストアは、何を信頼するかを決定するときに使用されるキーストアです。すでに信頼しているエンティティからデータを受信し、そのエンティティが本物であると主張しているものであることを確認できれば、データは実際にはそのエンティティからのものであると想定できます。

エントリは、ユーザーがそのエンティティを信頼する場合にのみ、トラストストアに追加する必要があります。鍵ペアを生成するか、証明書をインポートすることにより、ユーザーはそのエントリに信頼を与えます。トラストストアのすべてのエントリーは、信頼できるエントリーと見なされます。

2つの異なるキーストアファイルがあると便利です。1つはキーエントリのみを含み、もう1つはCA証明書を含む信頼できる証明書エントリを含みます。前者には個人情報が含まれていますが、後者には含まれていません。単一のキーストアファイルの代わりに2つのファイルを使用すると、自分の証明書(および対応する秘密鍵)と他の証明書の論理的な違いをより明確に分離できます。秘密鍵の保護を強化するには、秘密鍵をアクセスが制限された鍵ストアに保管し、必要に応じて、より公的にアクセス可能な鍵ストアに信頼できる証明書を提供します。


4
  1. trustStoreとkeyStoreの最初の大きな違いは、trustStoreはTrustManagerによってリモート接続を信頼するかどうかを決定するために使用されることです。keyStoreはKeyManagerから使用され、SSLハンドシェイク中に認証のためにリモートホストに送信する認証資格情報を決定します。

  2. もう1つの違いは、SSL接続でサーバーを実行している場合、またはサーバー側でクライアント認証を有効にしている場合にのみ理論的に必要な秘密鍵がkeyStoreに含まれている一方で、trustStoreはCA(認証局)からの公開鍵または証明書を格納し、リモートパーティまたはSSL接続を信頼します。

    実際、秘密鍵と公開鍵の両方を同じファイルに保存できます。これらのファイルを管理するツールは同じ(keytool)なので、1つのファイルを両方の目的に使用できますが、おそらく使用しないでください

  3. 少なくとも私のMac OSXでは、デフォルトのkeyStoreはで${user.home}/.keystore、デフォルトのtrustStoreは/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacertsです。

    それらをオーバーライドする場合は、JVMパラメータ-Djavax.net.ssl.keyStore /path/to/keyStoreまたはを 追加する必要があります -Djavax.net.ssl.trustStore /path/to/trustStore。の場合は java.security.UnrecoverableKeyException: Password must not be null、パラメータ -Djavax.net.ssl.trustStorePassword=passwordまたは-Djavax.net.ssl.trustStorePassword=password

主な情報源:

http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.