Documentation


§証明書検証の設定

SSL 接続において、リモートサーバのアイデンティティは、認証局によって署名された X.509 証明書を使って検証されます。

JSSE の X.509 証明書実装は PKIプログラマーズ・ガイド に定義されています。

いくつかのサーバで使われている X.509 証明書は古く、攻撃者に侵害される可能性のある署名を使っています。このため、これらの署名アルゴリズムが使われているサーバのアイデンティティは検証できない可能性があります。幸い、これは稀です – 95% 以上の信頼されたリーフ証明書と署名証明書が NIST 推奨の鍵長 を使っています。

WS は 現在の標準 に従って、弱い署名アルゴリズムと弱い鍵を自動的に利用できないようにします。

この機能は jdk.certpath.disabledAlgorithms に似ていますが、jdk.certpath.disabledAlgorithms は JVM をまたがってグローバルで、セキュリティプロパティによって設定されなければならず、かつ JDK 1.7 以降でのみ利用できる一方、WS クライアントに特化されており、動的に設定することができます。

これはお好みで上書きできますが、最低限デフォルトと同じくらい厳格であることが推奨されています。適切な署名は プロバイダに関するドキュメント で探すことができます。

§弱い署名アルゴリズムによる証明書の無効化

無効化された署名アルゴリズムの一覧は以下に定義されています:

play.ws.ssl.disabledSignatureAlgorithms = "MD2, MD4, MD5"

MD5 は 衝突攻撃 の証明と Mozilla の推奨に基づいて無効化されています:

MD5 証明書は、正当なシグネチャを持ち、かつ信頼されている証明書と同じ値のハッシュを持つ偽の証明書を攻撃者が生成できた場合、侵害される可能性があります。Mozilla は MD5 ベース の署名をサポートしないことで、この潜在的な脆弱性を軽減することができます。 MD5 ルート証明書の署名は (自己署名されており) 検証されないため、NSS から削除する必要はありません。MD5 の無効化は、署名が検証される中間および末端の証明書に影響を与えます。

関連のある認証局は MD5 証明書の発行を停止することを発表しました。しかしながら、MD5 ベースの署名が 2010 年にサポートされなくなると影響を受ける末端の証明書は未だ多く存在します。このため、認証局には反映までの時間を希望し、かつ MD5 ベース署名のサポートを 2011 年 6 月 30 日に打ち切るよう提案しています。関連する認証局は、Mozilla が必要に応じて MD5 のサポートをより早く打ち切ることを認識しています。

SHA-1 は脆弱であると見なされており、新しい証明書は SHA-2 ファミリ にあるダイジェストアルゴリズムを使うべきです。とは言え、古い証明書も引き続き妥当であると見なされています。

§弱い鍵長による証明書の無効化

WS は弱い鍵長のデフォルトリストを以下のように定めています:

play.ws.ssl.disabledKeyAlgorithms = "DHE keySize < 2048, ECDH keySize < 2048, ECDHE keySize < 2048, RSA keySize < 2048, DSA keySize < 2048, EC keySize < 224"

これらの設定は keylength.com と Mozilla 推奨の一部に基づいています:

NIST は 2010 年 12 月 31 日までに 1024-bit RSA 証明書を中止するよう勧告しています。そのため、認証局はこの年末までどのような証明書にも 1024 ビットで署名すべきではないと忠告されています。

1024 ビットのルート証明書を削除/無効にするための日付は公開鍵暗号方式における最先端の技術に依存することになりますが、どのような場合でも、あらゆる組織は 2013 年 12 月 31 日以降、このモジュールサイズの継続的なサポートを期待すべきではありません。上述したとおり、新しい攻撃が発見された場合、この日付は実質的に早まることがあります。web 上のセキュアなトランザクションに関与するすべての組織が、できるだけ早く 1024 ビットのモジュールから離れることをお勧めします。

注意: 弱い鍵長は (JSSE に含まれる PKIX 証明書パスチェッカ で利用できる証明書チェーンには含まれない) ルート証明書にも適用されるので、このオプションを設定すると、受け取った発行者がデフォルトを含め、設定されたトラストマネージャおよびキーマネージャに含まれているか確認します。

95% 以上の信頼されたリーフ証明書と署名証明書が NIST 推奨の鍵長 を使っているので、これは安全なデフォルトと見なすことができます。

§弱い証明書のグローバルな無効化

JVM を超えてグローバルに署名アルゴリズムと鍵長を無効化する場合、jdk.certpath.disabledAlgorithms セキュリティプロパティ を使ってください。セキュリティプロパティは 暗号スイートの設定 章でより詳しくカバーされています。

注意 jdk.certpath.disabledAlgorithmsプロパティを設定する場合、disabledKeyAlgorithms および disabledSignatureAlgorithms 両方の設定を含んでいなければなりません。

§証明書検証のデバッグ

証明書検証をより詳しく確認する場合、以下のデバッグ設定をセットしてください:

play.ws.ssl.debug.certpath = true

ドキュメントにない -Djava.security.debug=x509 設定も同様に便利かもしれません。

§参考文献

Next: 証明書失効の設定


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