Documentation

§暗号スイートの設定

暗号スイート は、実際には鍵交換、バルク暗号化、メッセージ認証とランダム数関数の四つの異なる暗号化技術をひとつにしたものです。暗号化スイートの 公式な命名規約はありません が、ほとんどの暗号化スイートでは順番に表現されています – 例えば、“TLS_DHE_RSA_WITH_AES_256_CBC_SHA” は鍵交換に DHE、サーバ証明書認証に RSA、ストリーム暗号に 256 ビット鍵の AES を CBC モードで、そしてメッセージ認証に SHA を使います。

§利用可能な暗号の設定

暗号スイートのリストは 1.6, 1.7 そして 1.8 で大幅に変更されています。

1.7 と 1.8 の場合、デフォルト そのまま の暗号スイートリストが使われます。

1.6 の場合、デフォルトのリストは 順不同 で、弱い暗号が強いものよりも前に設定されていたり、現在では脆弱と見なされている暗号をいくつか含んでいます。利用可能な暗号スイートのリストは、以下のとおりです:

  "TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
  "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
  "TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
  "TLS_RSA_WITH_AES_256_CBC_SHA",
  "TLS_RSA_WITH_AES_128_CBC_SHA",
  "SSL_RSA_WITH_RC4_128_SHA",
  "SSL_RSA_WITH_RC4_128_MD5",
  "TLS_EMPTY_RENEGOTIATION_INFO_SCSV" // per RFC 5746

暗号スイートのリストは play.ws.ssl.enabledCiphers 設定を使って手動で設定することができます:

play.ws.ssl.enabledCiphers = [
  "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"
]

これは、例えば DHE と ECDHE のみ PFE を有効にしたい場合などに便利です。

§推奨: DHE 鍵長の伸張

ディフィー・ヘルマンは最近、PFS を提供することで話題になりました。しかし、1.6 と 1.7 では DHE のサーバハンドシェイクは最大 1024 に設定されているため、脆弱と見なされており、攻撃者により侵害される可能性があります。

JDK 1.8 の場合、-Djdk.tls.ephemeralDHKeySize=2048 システムプロパティを設定して、ハンドシェイクの鍵長をより強固にすることが推奨されています。エフェメラルDiffie-Hellman鍵のサイズのカスタマイズ を参照してください。

§推奨: PFS を伴う暗号の使用

セキュアな TLS および DTLS の利用のすすめ の通り、以下の暗号スイートが推奨されています:

play.ws.ssl.enabledCiphers = [
  "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
  "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
  "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
  "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
]

これらの暗号のうち、いくつかは JDK 1.8 でのみ利用できます。

§弱い暗号と弱い鍵長のグローバルな無効化

jdk.tls.disabledAlgorithms は、弱い暗号およびハンドシェイクに使われる 短い鍵長 を防止するために使うことができます。これは、Oracle JDK 1.7 以降でのみ利用できる 便利な機能 です。

無効化済アルゴリズムに関する公式なドキュメントは JSSEリファレンス・ガイド にあります。

TLS の場合、コードは暗号スイートのはじめの部分のうち、プロトコルの後ろの部分、例えば TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 の場合は ECDHE を関連する暗号としてマッチします。無効化アルゴリズムに使われる引数名は明白ではありませんが、プロバイダドキュメント に一覧があり、ソースコード を確認することができます。

(X.509 証明書内の署名アルゴリズムと弱い鍵を検査する) jdk.tls.disabledAlgorithms または jdk.certpath.disabledAlgorithms を有効にするには、プロパティファイルを作らなければなりません:

# disabledAlgorithms.properties
jdk.tls.disabledAlgorithms=EC keySize < 160, RSA keySize < 2048, DSA keySize < 2048
jdk.certpath.disabledAlgorithms=MD2, MD4, MD5, EC keySize < 160, RSA keySize < 2048, DSA keySize < 2048

その後、JVM を java.security.properties を付けて起動します:

java -Djava.security.properties=disabledAlgorithms.properties

§デバッグ

暗号と弱い鍵をデバッグする場合、以下のデバッグ設定を有効にしてください:

play.ws.ssl.debug = {
 ssl = true
 handshake = true
 verbose = true
 data = true
}

Next: 証明書検証の設定


このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。