Javaキーストアとトラストストアの違い

  • Java

  • link:/category/security-2/ [セキュリティ]

1. 概要

この簡単な記事では、JavaキーストアとJavaトラストストアの違いの概要を説明します。

2. 概念

ほとんどの場合、アプリケーションがSSL / TLSを介して通信する必要がある場合は、*キーストアとトラストストアを使用します*。
通常、これらは実行中のアプリケーションと同じファイルシステムにあるパスワードで保護されたファイルです。 これらのファイルに使用されるデフォルト形式は、Java 8までは* JKSです。
ただし、Java 9以降、*デフォルトのキーストア形式はPKCS12 *です。 JKSとPKCS12の最大の違いは、JKSはJava固有のフォーマットであるのに対して、PKCS12は暗号化された秘密キーと証明書を格納する標準化された言語に依存しない方法です。

3. Javaキーストア

  • Javaキーストアには、秘密キーエントリ、公開キー付きの証明書、またはさまざまな暗号化の目的で使用できる秘密キー*のみが格納されます。 ルックアップを容易にするために、それぞれをエイリアスで保存します。

    一般的に、キーストアはアプリケーションの所有するキーを保持し、これを使用して、たとえばペイロードに署名することで、メッセージの整合性と送信者の信頼性を証明できます。
    通常、サーバーでHTTPSを使用する場合は、*キーストアを使用します*。 SSLハンドシェイク中に、サーバーはキーストアから秘密鍵を検索し、対応する公開鍵と証明書をクライアントに提示します。
    これに対応して、クライアントも自身を認証する必要がある場合(相互認証と呼ばれる状況)、クライアントにはキーストアもあり、公開キーと証明書も提示します。
    デフォルトのキーストアはないため、暗号化されたチャネルを使用する場合は、_javax.net.ssl.keyStore_および_javax.net.ssl.keyStorePassword._を設定する必要があります。キーストアの形式がデフォルトと異なる場合は、 _javax.net.ssl.keyStoreType_を使用してカスタマイズします。
    *もちろん、これらの鍵を使用して他のニーズにも対応できます。*秘密鍵はデータに署名または復号化でき、公開鍵はデータを検証または暗号化できます。 秘密鍵はこれらの機能も実行できます。 キーストアは、これらのキーを保持できる場所です。
    link:/java-keystore [プログラムでキーストアとやり取りする]もできます。

4. Java TrustStore

トラストストアはその反対です。通常、キーストアは私たちを識別する証明書を保持しますが、トラストストアは他を識別する証明書を保持します。
  • Javaでは、これを使用して、通信しようとしているサードパーティを信頼します。*

    以前の例をご覧ください。 クライアントがHTTPSを介してJavaベースのサーバーと通信する場合、サーバーはキーストアから関連付けられたキーを検索し、公開キーと証明書をクライアントに提示します。
    *クライアントである私たちは、トラストストアで関連する証明書を検索します。*外部サーバーによって提示された証明書または認証局がトラストストアにない場合、_SSLHandshakeException_を取得し、接続は正常に設定されません。 。
    Javaは_cacerts_というトラストストアをバンドルしており、_ $ JAVA_HOME / jre / lib / security_ディレクトリーにあります。
    デフォルトの信頼できる認証局が含まれています。
$ keytool -list -keystore cacerts
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 92 entries

verisignclass2g2ca [jdk], 2018-06-13, trustedCertEntry,
Certificate fingerprint (SHA1): B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D
ここでは、トラストストアに92の信頼できる証明書エントリが含まれており、エントリの1つが_verisignclass2gca_ entry__であることがわかります。 __これは、JVMが_verisignclass2g2ca_によって署名された証明書を自動的に信頼することを意味します。
ここで、* _ javax.net.ssl.trustStore_プロパティを介してデフォルトのトラストストアの場所をオーバーライドできます*。 同様に、_javax.net.ssl.trustStorePassword_および_javax.net.ssl.trustStoreType_を設定して、トラストストアのパスワードとタイプを指定できます。

5. 結論

このチュートリアルでは、JavaキーストアとJavaトラストストアの主な違いとその目的について説明しました。
また、デフォルトをシステムプロパティでオーバーライドする方法を示しました。
次に、次のlink:/java-ssl[SSLガイド]またはhttps://docs.oracle.com/javase/8/docs/technotes/guides/securityをご覧ください。 Javaでの暗号化通信の詳細については、/ jsse / JSSERefGuide.html [JSSEリファレンスガイド]。