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をデフォルトで利用することにしました。
- TLSには後方互換性があり、デフォルトから1.2へアップグレードした後も、TLS 1.1や1.0を使っているシステムは継続して機能を利用可能であるため(*)
- * セキュリティ上の理由で削除されたアルゴリズムを使って構成していないことが前提。ほとんどのシステムはこの影響を受けることはない。
参考:Wikipedia
https://en.wikipedia.org/wiki/Transport_Layer_Security#cite_ref-ciphers_16-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 - 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 - 盗聴に対し、インターネット通信の保護機能が強化されているため
It’s Time for TLS 1.2
https://casecurity.org/2013/09/19/its-time-for-tls-1-2/
JDK™ 8 Early Access Releases(2014/01/29現在、b124です)TLSはほとんどの開発者やユーザーに透過的なものです。詳細をご所望の方のために、以下の内容について説明します。
https://jdk8.java.net/
- 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 ApplicationsQualys SSL LabsがTLSの脅威モデルを説明するすばらしい研究結果をまとめています。TLS脅威モデルを扱う上でのベストプラクティスがこの動きを後押ししています(具体的には「2.2 use secure protocols」に説明があります)。
https://threatpost.com/new-ietf-group-to-tackle-tls-implementation-in-applications/103183
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をサポートするクライアントは改善された通信を受信できるとともに、旧バージョンのクライアントは継続して機能します。- JavaはJava 7(2011年7月)でTLS 1.2のサポートを追加しましたがデフォルトではありませんでした。Java 8(2014年)では、デフォルトでTLS 1.2を使用します。
JDK-6916074 : Add support for TLS 1.2
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6916074 - OpenSSLはバージョン1.0.1(2012年3月)でTLS 1.2のサポートを追加しました。ほとんどのLinuxディストリビューションやスクリプト言語では、OpenSSLを使用しています。
OpenSSL 1.0.1 Branch Release notes
http://www.openssl.org/news/openssl-1.0.1-notes.html - マイクロソフトは、Windows 7でTLS 1.2をサポートしました。 Internet Explorerと.NETも同様です。TLS 1.2はInternet Explorer 11(2013年10月)で初めてデフォルトで有効になりました。
Windows 7 adds support for TLSv1.1 and TLSv1.2
http://blogs.msdn.com/b/ieinternals/archive/2009/06/19/windows-7-support-for-tls-and-ciphers.aspx - Firefoxはバージョン27(2014年2月)で、デフォルトでTLS 1.2が有効になります。
Bug 861266 - Implement TLS 1.2 (RFC 5246) in Gecko (Firefox, Thunderbird), on by default
https://bugzilla.mozilla.org/show_bug.cgi?id=861266 - Chromeはバージョン29(2013年8月)で、TLS 1.2をサポートしました。
Issue 90392: No TLS 1.2 (SHA-2) Support
http://code.google.com/p/chromium/issues/detail?id=90392 - その他は以下のリンクからどうぞ。
https://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers
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システム管理者は管理しているシステムのTLS実装を確認し、クライアントを監視したり、特定のTLSバージョンを無効化することができます。例えば、機密性の高いビジネスに関わるあるシステム管理者であれば、これまで使ってきた古いバージョンのTLSを無効化したくなるかもしれません。
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/
GUIでクライアントのTLSのバージョンを確認するには
- Javaコントロールパネルを開く
- 詳細タブへ移動
- 最下部に「高度なセキュリティ設定」へ
- 「TLS X.Yを使用する」のチェックボックスをON/OFF
サーバーでの設定もしくはGUIを使わずに設定する場合
- 全体に適用する場合
- ユーザーレベルもしくはシステムレベルのdeployment.propertiesファイルを開く
- 適切なプロパティを設定する
deployment.security.TLSvX.Y=false - 特定のアプリケーションもしくはスクリプトに設定する場合
- スタートアップフラグを使う。
-Ddeployment.security.TLSvX.Y=false
Other Considerations for TLS
「Keeping Your Secrets」というInfoQの記事では、開発者が理解しておくべきトランスポートセキュリティや暗号化に関する追加の情報を取り上げています。Keeping Your Secrets (InfoQ)TLSのプロトコルバージョンの持つ役割の範囲外で、この記事は情報を保護するためのよいテクニックを説明しています。
http://www.infoq.com/articles/keeping-your-secrets
システム管理者(もしくは開発者)へ
Perfect Forward SecrecyをJava TLS接続で使用することができます。このPerfect Forward Secrecyを使用すると、過去の会話を保護できます。鍵を将来紛失してしまった場合でも、誰も過去の会話を解読することはできません。TLSの実装と同様、Perfect Forward Secrecyはデフォルトで有効になっていません。利用したい場合は、https.cipherSuitesプロパティを更新する必要があります。このプロパティに設定可能な一般的な値は次のとおりです。- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- DHE(Diffie-Hellman交換)のタイプが続く、TLS(トランスポートレベルセキュリティ)で始まるAlgorithm Standard Name(アルゴリズム標準名)リスト上の任意のプロパティ。
JSSE Cipher Suite Names
http://download.java.net/jdk8/docs/technotes/guides/security/StandardNames.html#ciphersuites
0 件のコメント:
コメントを投稿