§トラストストアとキーストアの設定
トラストストアとキーストアは X.509 証明書を含んでいます。これらの証明書は公開 (または秘密) 鍵を含んでおり、TrustManager または KeyManager の配下でそれぞれ組織され、管理されています。
X.509 証明書を生成する必要がある場合、より詳細は 証明書の生成 を参照してください。
§トラストマネージャの設定
トラストマネージャ は、認証局より発行されたルート証明書であるトラストアンカーを維持するために使われます: トラストマネージャは、リモート認証クリデンシャル (ひいては、その接続) を信頼すべきかどうかを決定します。HTTPS クライアントの場合、リクエストの大半はトラストマネージャを使います。
まったく設定していない場合、WS は cacerts
キーストアを ${java.home}/lib/security/cacerts
内で指し示すデフォルトのトラストマネージャを使います。トラストマネージャを明示的に指定した場合、デフォルトの設定は上書きされ、cacerts
ストアは取り込まれません。
デフォルトのトラストストアを使いつつ、証明書を含む別のストアを追加したい場合、トラストマネージャに複数のストアを定義することができます。CompositeX509TrustManager は、マッチするストアが見つかるまで、それぞれのストアを順番に試します。
play.ws.ssl {
trustManager = {
stores = [
{ path: ${store.directory}/truststore.jks, type: "JKS" } # Added trust store
{ path: ${java.home}/lib/security/cacerts, password = "changeit" } # Default trust store
]
}
}
注意: トラストストアは CA 証明書と公開鍵だけを、通常は JKS または PEM にて含むべきです。PKCS12 フォーマットもサポートされていますが、PKCS12 は リファレンス・ガイド に記されている通り、トラストストアに秘密鍵を保持すべきではありません。
§キーマネージャの設定
キーマネージャ は、リモートホストの鍵を提示するために使われます。キーマネージャは一般的に (相互 TLS として知られている) クライアント認証のためだけに使われます。
CompositeX509KeyManager には、トラストマネージャと同じ方法で複数のストアが含まれることがあります。
play.ws.ssl {
keyManager = {
stores = [
{
type: "pkcs12",
path: "keystore.p12",
password: "password1"
},
]
}
}
注意: 秘密鍵を保持するキーストアは、リファレンス・ガイド に示されている通り、PKCS12 フォーマットを使用するべきです。
§ストアの設定
ストアは、トラストストアおよびキーストアの両方に使用される キーストア オブジェクトに相当します。ストアは タイプ – PKCS12
, JKS
または (Base64 エンコード DER 証明書としても知られる) PEM
– を持つ場合があり、関連するパスワードを保持する場合があります。
ストアは path
または data
属性のいずれかを持つ必要があります。path
属性はファイルシステムパスでなければなりません。
{ type: "PKCS12", path: "/private/keystore.p12" }
data
属性には PEM エンコードされた認証文字列が含まれていなければなりません。
{
type: "PEM", data = """
-----BEGIN CERTIFICATE-----
...certificate data
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...certificate data
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...certificate data
-----END CERTIFICATE-----
"""
}
§デバッグ
キーマネージャ / トラストマネージャをデバッグする場合は、以下のフラグを設定してください:
play.ws.ssl.debug = {
ssl = true
trustmanager = true
keymanager = true
}
§併せて読みたい
ほとんどの場合、証明書を一旦インストールしてしまえば大がかりな設定が必要になることはありません。設定に難しいところがある場合は、以下のブログ記事が役に立つかも知れません:
- 鍵管理
- Java 2-way TLS/SSL (Client Certificates) and PKCS12 vs JKS KeyStores
- HTTPS with Client Certificates on Android
Next: プロトコルの設定
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。