【Java】 キーストア / トラストストア

■ 用語の整理

 * キーストアとトラストストア両方とも、Javaに含まれている keytool によって操作・管理可能

キーストア (Key Store)

 * 自らの証明書を保管するためのファイル
用途
 * クライアント認証に使用

トラストストア (Trust Store)

 * Javaアプリがサーバ側の証明書を検証するために、サーバ側の証明書を管理するファイル
  => 通信先のサーバー証明書が送信された再、トラストストアに保存されている証明書によって
     署名がなされているかどうかによって認証の可否を判断する
用途
 * SSL 認証でサーバーを認証する際に使用

■ デフォルト

トラストストア

 * パス : %JAVA_HOME/lib/security/cacerts
 * パスワード : changeit

■ キーストア / トラストストアの指定の仕方

[1] JavaVMの引数として指定

java -Djavax.net.ssl.trustStore=【トラストストア・パス】 -Djavax.net.ssl.trustStorePassword=【トラストストア・パスワード】 -Djavax.net.ssl.keyStore=【キーストア・パス】 -Djavax.net.ssl.keyStorePassword=【キーストア・パスワード】

java -Djavax.net.ssl.keyStore=keys/serverKeystore.jks -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net.ssl.trustStore=keys/clientTruststore.jks  -Djavax.net.ssl.trustStorePassword=changeit

[2] システムプロパティとして指定

System.setProperty("javax.net.ssl.trustStore", "【トラストストア・パス】");
System.setProperty("javax.net.ssl.trustStorePassword", "【トラストストア・パスワード】");
System.setProperty("javax.net.ssl.keyStore", "【キーストア・パス】");
System.setProperty("javax.net.ssl.keyStorePassword", "【キーストア・パスワード】");

https://blogs.yahoo.co.jp/dk521123/33122920.html
より抜粋

System.setProperty("javax.net.ssl.keyStore", "keys/serverKeystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
System.setProperty("javax.net.ssl.trustStore", "keys/clientTruststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");


関連記事

Javaで、キーストアから証明書を追加・削除などを行う

https://blogs.yahoo.co.jp/dk521123/37097725.html

X.500 識別名(X500Principal)の文字列形式をCNやOUなど個別に扱えるようにする

https://blogs.yahoo.co.jp/dk521123/37112129.html

Javaで、キーストアファイルをロードし、一覧表示する

https://blogs.yahoo.co.jp/dk521123/37020660.html

Javaオブジェクト「X509Certificate」 ⇔ 証明書ファイル

https://blogs.yahoo.co.jp/dk521123/36989612.html

SSL証明書の拇印/フィンガープリントを生成するには...

https://blogs.yahoo.co.jp/dk521123/37002407.html

Java で、SSL通信を行うには

https://blogs.yahoo.co.jp/dk521123/33122920.html