Sun の Java SE 実装バージョン 6 以降では、SSL/TLS 実装を含む SunJSSE プロバイダを、そのデフォルトモードの代わりに FIPS 140 準拠モードで動作するように構成できます。このドキュメントでは、FIPS 140 準拠モード (以下「FIPS モード」と呼ぶ) について説明します。
SunJSSE を FIPS モードに構成するには、SunJSSE で必要なすべての暗号化アルゴリズムの実装を提供する適切な FIPS 140 準拠の暗号化プロバイダに SunJSSE を関連付けます。これは次のいずれかの方法で行うことができます。
ファイル ${java.home}/lib/security/java.security
を編集し、com.sun.net.ssl.internal.ssl.Provider
を指定する行を変更して、FIPS 140 準拠の暗号化プロバイダのプロバイダ名を指定します。たとえば、暗号化プロバイダの名前が SunPKCS11-NSS
の場合、
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
to
security.provider.4=com.sun.net.ssl.internal.ssl.Provider SunPKCS11-NSS
指定された名前のプロバイダのクラスも、セキュリティープロバイダとして java.security
ファイル内に指定する必要があります。
実行時に、java.security.Provider
オブジェクトをパラメータとして受け取る SunJSSE プロバイダのコンストラクタを呼び出します。たとえば、変数 cryptoProvider
が暗号化プロバイダの参照である場合、new com.sun.net.ssl.internal.ssl.Provider(cryptoProvider)
を呼び出します。
実行時に、String オブジェクトをパラメータとして受け取る SunJSSE プロバイダのコンストラクタを呼び出します。たとえば、暗号化プロバイダの名前が SunPKCS11-NSS
である場合、new com.sun.net.ssl.internal.ssl.Provider("SunPKCS11-NSS")
を呼び出します。指定された名前のプロバイダは、構成済みのいずれかのセキュリティープロバイダである必要があります。
ある Java プロセスにおいて、SunJSSE は FIPS モードまたはデフォルトモードのいずれかで使用できますが、両方のモードを同時に使用することはできません。SunJSSE がいったん初期化されると、モードを変更できません。つまり、いずれかの実行時構成オプション (オプション 2 または 3) を使用する場合、SSL/TLS 操作を実行する前に構成を実行する必要があることを意味します。
指定された構成済みプロバイダのみが、SunJSSE によるすべての暗号化操作に使用されることに注意してください。Java SE 実装に組み込まれているものを含む、その他すべての暗号化プロバイダは、無視されて使用されません。
FIPS モードでは、SunJSSE はデフォルトモードと同じように動作しますが、次の点が異なっています。
FIPS モードの特徴
SunJSSE は、上記のようにして構成した暗号化プロバイダを使用して、すべての暗号化操作を実行します。これには対称および非対称の暗号化、署名の生成および検証、メッセージダイジェストおよびメッセージ認証コード、鍵の生成および派生、乱数生成などがあります。
構成済みの暗号化プロバイダが例外をスローしてエラーを報告した場合、SunJSSE は現在の操作を中止して、例外をアプリケーションに伝達します。
構成済みの暗号化プロバイダによって、FIPS ガイドラインが定めるセルフテスト障害などのクリティカルエラーが発生したことが認識された場合、暗号化プロバイダは再初期化されるまでエラー状態を維持する必要があります。FIPS 暗号化モジュールで構成された SunJSSE を使用するアプリケーションをリブートする必要があります。これにより、セキュリティーを損なうクリティカルエラーが FIPS モジュールで許容されなくなります。
TLS 1.0 以降のみ使用できます。SSL 2.0 および SSL 3.0 は使用できません。SSL 2.0 または 3.0 を使用可能にしようとすると、失敗して例外が発生します。
暗号化方式群のリストは、適切なアルゴリズムを使用するものに限定されます。現在使用可能な暗号化方式群のリストを次に示します。リストにない暗号化方式群を有効化しようとすると、失敗してエラーが発生します。
次に示すのは、SunJSSE によって FIPS モードで使用できる暗号化方式群の現行リストで、構成された FIPS 暗号化モジュールが必要なアルゴリズムをサポートすると仮定した場合に TLS プロトコルに割り当てられる名前と ID が示されています。SunJSSE はこれらの一部の暗号化方式群の名前に接頭辞 SSL_
を使用していますが、これらは以前のバージョンの仕様との互換性を保つためのものに過ぎません。FIPS モードでは、SunJSSE は常に TLS 1.0 以降を使用し、これらの仕様の要求に応じた暗号化方式群を実装します。
SSL_RSA_WITH_3DES_EDE_CBC_SHA |
0x000a |
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA |
0x0016 |
TLS_RSA_WITH_AES_128_CBC_SHA |
0x002f |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA |
0x0032 |
TLS_DHE_RSA_WITH_AES_128_CBC_SHA |
0x0033 |
TLS_RSA_WITH_AES_256_CBC_SHA |
0x0035 |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA |
0x0038 |
TLS_DHE_RSA_WITH_AES_256_CBC_SHA |
0x0039 |
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA |
0xC003 |
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA |
0xC004 |
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA |
0xC005 |
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA |
0xC008 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA |
0xC009 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA |
0xC00A |
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA |
0xC00D |
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA |
0xC00E |
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA |
0xC00F |
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA |
0xC012 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA |
0xC013 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA |
0xC014 |
TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA |
0xC017 |
TLS_ECDH_anon_WITH_AES_128_CBC_SHA |
0xC018 |
TLS_ECDH_anon_WITH_AES_256_CBC_SHA |
0xC019 |
FIPS モードの Network Security Services (NSS) などの適切な FIPS 140 準拠の暗号化プロバイダを一緒に使用して SunJSSE を FIPS 140 準拠モードに構成すると、SunJSSE は FIPS 140 に準拠するようになります。