ノート: JDK 8のリリース以降に行われた追加の変更および拡張については、Java Development Kit 8更新リリース・ノートを参照してください。
JDK 8リリースには、次の機能および拡張機能が追加されています。
TLS 1.1およびTLS 1.2をデフォルトで有効化: SunJSSE
プロバイダでは、クライアントのTLS 1.1およびTLS 1.2プロトコルがデフォルトで有効になっています。 「プロトコル」を参照してください。 どのSunJSSE
プロトコルを有効にするかは、新しいシステム・プロパティjdk.tls.client.protocols
を使って構成します。 「JSSEのカスタマイズ」を参照してください。
制限されたdoPrivileged: 他のアクセス権をチェックするためのスタックの完全なトラバースを禁止せずにコード内でコードの特権のサブセットを表明できるAccessController.doPrivileged
メソッドのバージョンが追加されました。 「特権ブロックのためのAPI」の特権のサブセットの表明に関するセクションおよび「RFE 7083329」を参照してください。
パスワードベース暗号化のアルゴリズムの強化: AESに基づくいくつかのパスワードベース暗号化(PBE)アルゴリズム(PBEWithSHA256AndAES_128やPBEWithSHA512AndAES_256など)がSunJCEプロバイダに追加されました。 「Oracleプロバイダのドキュメント」、「JEP 121」および「RFE 6383200」を参照してください。
JSSEサーバーでのSSL/TLS Server Name Indication (SNI)拡張のサポート: SNI拡張は、SSL/TLSプロトコルを拡張して、クライアントがハンドシェーク時に接続しようとしているサーバー名を示す機能です。 サーバーはServer Name Indicationの情報を使って、特定のSSLSocket
またはSSLEngine
インスタンスが接続を受け入れる必要があるかどうかを判定できます。 JDK 7のSunJSSEでは、クライアント・アプリケーションのSNI拡張がデフォルトで有効になっています。 JDK 8では、サーバー・アプリケーションのSNI拡張がサポートされます。
新しいクラスの説明と例へのリンクを含む概要は、「JSSEリファレンス・ガイド」の次のセクションを参照してください。
「JEP 114」も参照してください。
AEADアルゴリズムのサポート: SunJCEプロバイダが、AES/GCM/NoPadding暗号実装をGCMアルゴリズム・パラメータとともにサポートするように拡張されました。 SunJSSEプロバイダが、AEADモード・ベースの暗号化方式群をサポートするように拡張されました。 「Oracleプロバイダのドキュメント」および「JEP 115」を参照してください。
キーストアの拡張機能: keytoolユーティリティに、パスワードを受け取り、それを秘密キーとしてセキュアに格納する新しいコマンド・オプション-importpassword
が追加されました。 DKS
キーストア・タイプをサポートするための新しいクラスjava.security.DomainLoadStoreParameter
が追加されました。 キーストアの拡張機能をサポートするため、他の新しいクラス(java.security.PKCS12Attribute
など)が追加され、他のセキュリティAPIが変更されました。
Javaセキュリティの概要ドキュメントを参照してください。
「JEP 166」および「JDK-8005408」も参照してください。
SHA-224メッセージ・ダイジェスト: JDK 8では、メッセージ・ダイジェスト実装のSHA-2ファミリのSHA-224バリアントによって暗号化アルゴリズムが拡張されました。 「Oracleプロバイダのドキュメント」、「標準アルゴリズム名のドキュメント」、「PKCS#11リファレンス・ガイド」、「JEP 130」および「RFE 4963723」を参照してください。
NSA Suite B暗号化サポートの拡張: これには、次が含まれます。
「Oracleプロバイダのドキュメント」、「標準アルゴリズム名のドキュメント」および「RFE 7044060」を参照してください。
高エントロピー乱数生成のサポートの向上: SecureRandom
クラスは、非公開キーや公開キー、暗号、署名付きメッセージなどに使用される強力な暗号化による乱数を提供します。 一部のSecureRandom
実装は、他の実装より優れています。 JDK 8では、各プラットフォームで使用できるもっとも強力なSecureRandom
実装のインスタンスを返すgetInstanceStrong()
メソッドが導入されました。 RSAの非公開キーと公開キーのペアなど、価値の高い永続的な秘密を作成する必要がある場合に使用してください。
詳細は、「JCAリファレンス・ガイド」のSecureRandomに関するセクションおよびSecureRandom API仕様を参照してください。
SecureRandom
には他にも次のような変更点があります。
java.security
ファイルのSecureRandom
シード・ソース・プロパティを適切に使用するようになりました。 (file:///dev/urandom
やfile:/dev/./urandom
を使用するあいまいな回避策は不要になりました。) 乱数生成の変更点の詳細は、「JEP 123」を参照してください。
新しいPKIXRevocationChecker
クラス: PKIXRevocationCheckerクラスは、PKIXアルゴリズムを使って証明書の失効ステータスをチェックします。 これは、ベストエフォートのチェック、エンドエンティティ証明書のチェックおよびメカニズム固有のオプションとパラメータをサポートします。 「Java PKIプログラマーズ・ガイド」のPKIXRevocationCheckerクラスによる証明書の失効ステータスのチェックに関する項、「JEP 124」および「RFE 6854712」を参照してください。
Windows用の64ビットPKCS11: PKCS 11プロバイダによるWindowsのサポートが、64ビットを含むように拡張されました。 「JDK 8 PKCS#11リファレンス・ガイド」の「2.1 要件」のセクション、「JEP 131」および「RFE 6880559」を参照してください。
Kerberos 5リプレイ・キャッシングの新しいrcacheタイプ: Kerberos 5に2つの新しいrcacheタイプが追加されました。 タイプnoneはrcacheが存在しないことを意味し、タイプdflはDFLスタイルのファイルベースのrcacheを意味します。 また、アクセプタが要求するサブキーがサポートされるようになりました。 これらは、sun.security.krb5.rcacheおよびsun.security.krb5.acceptor.subkeyシステム・プロパティを使用して構成されます。
Kerberos 5のプロトコル遷移と制約付き委任: JDK 8では、Kerberos 5のプロトコル遷移と制約付き委任が同じレルム内でサポートされます。 「RFE 6355584」を参照してください。
脆弱な暗号化をデフォルトで無効化: DES関連のKerberos 5暗号化タイプはデフォルトでサポートされません。 krb5.conf
ファイルにallow_weak_crypto=true
を追加すれば、これらの暗号化タイプを有効にすることができますが、DES関連の暗号化タイプは安全性がきわめて低いとみなされるため、使用しないでください。 「RFE 8012679」を参照してください。
GSS-API/Kerberos 5メカニズムに対する未バインドのSASL: JAAS構成ファイルのKrb5LoginModule
プリンシパル値をアクセプタ側でアスタリスク(*)に設定して、未バインドのアクセプタを指定できます。 つまり、アクセプタがそのサービスの長期の秘密キーを持っている場合、イニシエータはサービス・プリンシパル名を使用してサーバーにアクセスできます。 この名前は、コンテキストの確立後にアクセプタによりGSSContext.getTargName()
メソッドを使用して取得できます。 「RFE 8001104」を参照してください。
複数のホスト名に対するSASLサービス: SASLサーバーの作成時に、サーバー名をnullに設定して未バインドのサーバーを指定できます。これにより、クライアントは任意のサーバー名を使用してサービスを要求できます。 コンテキストの確立後、サーバーはキー名SASL.BOUND_SERVER_NAME
を使ってネゴシエートされたプロパティとして名前を取得できます。 「RFE 7110803」を参照してください。
Mac OS X上のネイティブJGSSへのJNIブリッジ: ネイティブJGSSへのJNIブリッジがMac OS Xでサポートされるようになりました。 これを有効にするには、システム・プロパティsun.security.jgss.native
をtrue
に設定します。 「RFE 8010192」を参照してください。
SunJSSEプロバイダでのより強力な一時的DHキーのサポート: SunJSSEプロバイダでは、SSL/TLSハンドシェーク中の一時的DHキーを証明書キーの長さと一致させてください。 一時的DHキーのサイズをカスタマイズするための新しいシステム・プロパティjdk.tls.ephemeralDHKeySize
が定義されました。 設定可能な最小のDHキー・サイズは、エクスポート可能な暗号化方式群またはレガシー・モード(jdk.tls.ephemeralDHKeySize=legacy
)を除き、1024ビットです。 「一時的DHキーのサイズのカスタマイズ」および「RFE 6956398」を参照してください。
JSSEでの暗号化方式群設定のカスタマイズのサポート: デフォルトでは、SunJSSEプロバイダはクライアントの暗号化方式群設定を適用します。 ただし、サーバーのSSLParameters.setUseCipherSuitesOrder(true)
を呼び出すことで、サーバーの暗号化方式群設定を適用するようにこの動作を変更できます。 「暗号化方式群設定」および「RFE 7188657」を参照してください。