[Java, Security] Java 8 will use TLS 1.2 as default

原文はこちら。
https://blogs.oracle.com/java-platform-group/entry/java_8_will_use_tls

Transport Level Security (TLS) は2者間の会話を暗号化して他者が会話を読み取ったり改変できないことを保証することを目的として設計されています。認証局(Certificate Authorities)と組み合わせることで、適切な信頼レベルを確立します。つまり、会話の相手は誰なのか、そして会話が盗聴されたり改変されないように保護されていることがわかります。
Java 7(2011年)に初めてTLS 1.2のサポートが登場しました。互換性の理由により、デフォルトでサーバーソケットでは有効になっていますが、クライアント側では無効になっています。それ以後、業界では大幅な改善を行い、相互運用性と下位互換性の維持に対処してきました。
今回、以下の2個の理由から、Java 8ではTLS 1.2をデフォルトで利用することにしました。
  1. TLSには後方互換性があり、デフォルトから1.2へアップグレードした後も、TLS 1.1や1.0を使っているシステムは継続して機能を利用可能であるため(*)
    1. * セキュリティ上の理由で削除されたアルゴリズムを使って構成していないことが前提。ほとんどのシステムはこの影響を受けることはない。
      参考:Wikipedia
      https://en.wikipedia.org/wiki/Transport_Layer_Security#cite_ref-ciphers_16-2
    2. TLS 1.2を完全に理解したい方は、RFCをご覧下さい。
      The Transport Layer Security (TLS) Protocol Version 1.2
      Appendix E. Backward Compatibility
      http://tools.ietf.org/html/rfc5246#appendix-E
    3. TLSとSSLの違いを知りたい方は以下のリンクをどうぞ。
      Differences between SSL and TLS Protocol Versions
      http://www.yassl.com/yaSSL/Blog/Entries/2010/10/7_Differences_between_SSL_and_TLS_Protocol_Versions.html
  2. 盗聴に対し、インターネット通信の保護機能が強化されているため
    It’s Time for TLS 1.2
    https://casecurity.org/2013/09/19/its-time-for-tls-1-2/
Java 8の早期アクセス版でテストする場合、この設定はbuild 122からなされています。
JDK™ 8 Early Access Releases(2014/01/29現在、b124です)
https://jdk8.java.net/
TLSはほとんどの開発者やユーザーに透過的なものです。詳細をご所望の方のために、以下の内容について説明します。
  • Threats and the role of encryption(脅威と暗号化の役割)
  • Compatibility with Java and other systems(Javaや他システムとの互換性)
  • Understanding your TLS implementation(あなたのTLS実装の理解)
  • Other Considerations for TLS(TLSのその他の考慮事項)

Threats and the role of encryption

活発な暗号化に関するIETFのワーキンググループと、TLS 1.2に対する業界の幅広いサポートがあるため、システムのデフォルトを更新するにはちょうどよいタイミングです。
New IETF Group to Tackle TLS Implementation in Applications
https://threatpost.com/new-ietf-group-to-tackle-tls-implementation-in-applications/103183
Qualys SSL LabsがTLSの脅威モデルを説明するすばらしい研究結果をまとめています。TLS脅威モデルを扱う上でのベストプラクティスがこの動きを後押ししています(具体的には「2.2 use secure protocols」に説明があります)。
SSL脅威モデル(マインドマップ)
https://www.ssllabs.com/downloads/SSL_Threat_Model.png
SSL/TLS Deployment Best Practices
https://www.ssllabs.com/downloads/SSL_TLS_Deployment_Best_Practices_1.3.pdf

Compatibility with Java and other systems

TLS 1.2はRFCのAppendix Eにあるように、後方互換性をもつよう設計されています。TLS 1.2のクライアントが古いバージョンのTLSを実行しているサーバーと接続する場合、クライアントがあわせます。逆に、古いバージョンを使うクライアントがTLS 1.2を使っているサーバーに接続する場合、サーバーがあわせます。後方互換性のために、TLS 1.2をサポートするクライアントは改善された通信を受信できるとともに、旧バージョンのクライアントは継続して機能します。
Trustworthy Internet's SSL Pulseによる採用統計によると、十分数多くのインターネットに接続されたシステムがTLS 1.2と互換性のある暗号を使用しています。
SSL Pulse
https://www.trustworthyinternet.org/ssl-pulse/

Understanding your TLS implementation

開発者やシステム管理者は、Qualys SSL LabsやHow's My SSLといったウェブサイトを使ってサーバーやクライアントをテストすることができます。
Qualys SSL Labs - Projects / SSL Server Test
https://www.ssllabs.com/ssltest/index.html
Qualys SSL Labs - Projects / SSL Client Test
https://www.ssllabs.com/ssltest/viewMyClient.html
How's My SSL?
https://www.howsmyssl.com/ 
システム管理者は管理しているシステムのTLS実装を確認し、クライアントを監視したり、特定のTLSバージョンを無効化することができます。例えば、機密性の高いビジネスに関わるあるシステム管理者であれば、これまで使ってきた古いバージョンのTLSを無効化したくなるかもしれません。

GUIでクライアントのTLSのバージョンを確認するには

  1. Javaコントロールパネルを開く
  2. 詳細タブへ移動
  3. 最下部に「高度なセキュリティ設定」へ
  4. 「TLS X.Yを使用する」のチェックボックスをON/OFF

サーバーでの設定もしくはGUIを使わずに設定する場合

  1. 全体に適用する場合
    1. ユーザーレベルもしくはシステムレベルのdeployment.propertiesファイルを開く
    2. 適切なプロパティを設定する
      deployment.security.TLSvX.Y=false
  2. 特定のアプリケーションもしくはスクリプトに設定する場合
    1. スタートアップフラグを使う。
      -Ddeployment.security.TLSvX.Y=false

Other Considerations for TLS

「Keeping Your Secrets」というInfoQの記事では、開発者が理解しておくべきトランスポートセキュリティや暗号化に関する追加の情報を取り上げています。
Keeping Your Secrets (InfoQ)
http://www.infoq.com/articles/keeping-your-secrets
TLSのプロトコルバージョンの持つ役割の範囲外で、この記事は情報を保護するためのよいテクニックを説明しています。

システム管理者(もしくは開発者)へ

Perfect Forward SecrecyをJava TLS接続で使用することができます。このPerfect Forward Secrecyを使用すると、過去の会話を保護できます。鍵を将来紛失してしまった場合でも、誰も過去の会話を解読することはできません。TLSの実装と同様、Perfect Forward Secrecyはデフォルトで有効になっていません。利用したい場合は、https.cipherSuitesプロパティを更新する必要があります。このプロパティに設定可能な一般的な値は次のとおりです。

0 件のコメント:

コメントを投稿