Java™ SE 7リリースにおけるセキュリティの拡張機能
Java SE 7リリースには次の機能が追加されています。
- 楕円曲線暗号(ECC)
- いくつかのECCベースのアルゴリズム(ECDSA/ECDH)を提供する新しいネイティブ・プロバイダがJava SE 7リリースに追加されました。
- CertPathアルゴリズムの無効化
- 脆弱な暗号アルゴリズムを無効にできるようになりました。 たとえば、MD2ダイジェスト・アルゴリズムは現在セキュアではないと考えられています。 Java SE 7リリースでは、証明書パス処理とTLSハンドシェイクにおいて、特定のアルゴリズムの使用を拒否するためのメカニズムが提供されます。
- JSSE(SSL/TLS)
- TLS 1.1
- SunJSSEプロバイダが、TLS 1.1(RFC 4346に記載)をサポートするようになりました。 もっとも重要な更新内容は、暗号ブロック連鎖(CBC)への攻撃に対する保護機能です。
- TLS 1.2
- SunJSSEプロバイダが、TLS 1.2(RFC 5246に記載)をサポートするようになりました。 TLS 1.2の特に重要な点として、さまざまな内部ハッシング・アルゴリズムを規定し、新しい暗号スイート(Cipher Suite)を追加し、特に暗号アルゴリズムのネゴシエーションにおいて柔軟性を高めています。
- 脆弱な暗号スイートを非推奨に設定
- RFC 4346、RFC 5246、RFC 5469では、一部の暗号スイートが廃止されたため、これらの使用は推奨されません。 これらの廃止された暗号スイートは、SunJSSEではデフォルトですべて無効になっています。 詳細は、SunJSSEプロバイダに関するドキュメントの暗号スイートのリストを参照してください。
- コネクション重視のトラスト管理
- トラスト・マネージャとキー・マネージャが、ハンドシェイク中にTLSコネクション(具体的には作成中の
SSLSession
)のパラメータを検証できるようになりました。 たとえば、トラスト・マネージャは有効な署名アルゴリズムのリストに基づいて、使用される証明書の種類を制限できます。
- エンドポイントの検証
- リモート・コンピュータのホスト・アドレスが、付属する証明書と一致することを検証するための、エンドポイント識別アルゴリズムを指定できます。 この種の検証は、以前はHTTPSで実行されていましたが(
HttpsURLConnection
およびHostnameVerifier
を参照)、このような検証をTLSレベルで任意に実行できるようになりました。
- TLS再ネゴシエーション
- Java SEではRFC 5746がサポートされます。RFC 5746では、TLSプロトコルの再ネゴシエーションの問題が解決されています。
- SSLv2Helloをデフォルトで無効化
- Java SE 7では、デフォルトで有効なプロトコルのリストからSSLv2Helloが削除されています。
- アルゴリズムの無効化
- 前述のとおり、脆弱な暗号アルゴリズムを無効にできるようになりました。
- JSSEクライアントのServer Name Indication(SNI)
- Java SE 7リリースでは、JSSEクライアントでのServer Name Indication(SNI)拡張がサポートされます。 SNIについては、RFC 4366で説明されています。 この機能によって、TLSクライアントが仮想サーバーに接続できます。
- EncryptedPreMasterSecretバージョン番号の厳密な確認
- Java SE 7では、TLS 1.1およびTLS 1.2のハンドシェイク中のバージョン番号確認が厳密化されています。 詳細は、JSSE Reference Guideを参照してください。