38 JSSEベースSSL実装の使用

JSSEベースのSSL実装の使用方法を学習し、サポートされている暗号スイートおよびJSSEのCerticomベースの実装の違いを理解します。

ノート:

次の点に注意してください。

  • WebLogic Serverバージョン12.1.1以降では、サポートされるSSL実装はJSSEのみになります。CerticomベースのSSL実装はなくなり、WebLogic Serverでサポートされなくなりました。

  • SHA-2署名証明書は、WebLogic Serverで提供されているJSSE SSL実装でサポートされます。

  • JSSEはそのSSL実装でServer Name Indication(SNI)をサポートしますが、WebLogic ServerはSNIをサポートしません。

この章の内容は次のとおりです。

JSSEベース実装とCerticom SSL実装とのシステム・プロパティの相違

JSSE SSL実装とCerticom SSL実装によるWebLogicセキュリティ・システム・プロパティの処理方法の違いを学習します。

表38-1 システム・プロパティの相違

システム・プロパティ JSSEの適用性 説明

weblogic.security.SSL.ignoreHostnameVerification

このプロパティは引き続き機能し、JSSE統合による影響はありません。

証明書のホスト名に対してURLのホスト名を検証しません。

weblogic.ReverseDNSAllowed

このプロパティは引き続き機能し、JSSE統合による影響はありません。

trueに設定すると、逆引きDNSルックアップを使用して、urlhostnameがループバック・アドレス(localhostまたは127.0.0.1、あるいはIPV6の等価物)であるかどうかを判断します。

weblogic.security.SSL.trustedCAKeyStore

このプロパティは引き続き機能し、JSSE統合による影響はありません。

キーストアから信頼できるCA証明書をロードします。

weblogic.security.SSL.verbose

このプロパティをjavax.net.debug=allと組み合せて使用し、詳細デバッグ出力をSSL呼出しコードおよびJSSEベース実装から取得します。脚注 1

-Dssl.debug=trueが使用される場合の追加のSSLデバッグ用。

ssl.debug=true

このプロパティをjavax.net.debug=sslと組み合せて使用し、デバッグ出力をSSL呼出しコードおよびJSSEベース実装から取得します。脚注1

SSLデバッグ情報をコンソールまたはログに表示します。このプロパティは、呼出し側のWebLogicコード用です。JSSEベースSSL実装には、javax.net.debugプロパティによってアクティブ化される独自のロギング・システムが含まれます。

ノート: JSSEロギング(javax.net.debug)をWebLogic SSLロギング(ssl.debug)と別個に設定できます。

weblogic.security.SSL.disableJsseCipherSuiteAliases=true|false

デフォルトはfalseです。

必要に応じて、Certicom暗号スイート名のSunJSSE暗号スイート名への変換を無効化します。デフォルトでは、Certicom暗号スイート名は、JSSEがSSLに使用されているとき、JSSE暗号スイート名に変換されます。

Certicom暗号スイート名とそれらのSunJSSEの等価物のリストは、表38-2を参照してください。

weblogic.security.SSL.ignoreHostnameVerify

このプロパティは引き続き機能し、JSSE統合による影響はありません。

weblogic.security.SSL.ignoreHostnameVerificationを参照してください。

weblogic.security.SSL.HostnameVerifier=classname

このプロパティは引き続き機能し、JSSE統合による影響はありません。

カスタム・ホスト名検証クラスのクラス名を指定します。

weblogic.security.SSL.protocolVersion=protocol

このプロパティは引き続き機能し、JSSE統合による影響はありません。

サポートされるプロトコルの値は、JSSEでサポートされる同等のプロトコルにマップされます。

「SSL/TLSプロトコル・バージョンの指定」を参照してください。

次のうちいずれか。

  • weblogic.security.SSL.allowUnencryptedNullCipher

  • SSLMBean. SetAllowUnencryptedNullCipher(boolean)

  • weblogic.security.disableNullCipher

SunJSSEは次の2つのNull暗号をサポートしますが、デフォルトでは有効ではありません。

  • SSL_RSA_WITH_NULL_MD5

  • SSL_RSA_WITH_NULL_SHA

この設定が有効な場合、この2つのNull暗号は暗号リストに追加されます。

デフォルトでは、この制御は設定されず、Null暗号の使用はサーバーで許可されません。このような構成では、SSLクライアントでNull暗号スイートを使用する場合(唯一のサポート対象暗号スイートとしてSSL_RSA_WITH_NULL_MD5を指定)、SSLハンドシェイクは失敗します。

この制御を設定した場合、Null暗号スイート(SSL_RSA_WITH_NULL_MD5など)が、サポートされる暗号スイートのリストにサーバーによって追加されます。SSL接続では、クライアントが求めた場合にNull暗号スイートが使用する場合があります。Null暗号スイートが使用される合、メッセージは暗号化されません。

注意: 設定の意味とその結果を把握しないかぎり、本番環境ではこの制御を設定しないでください。

weblogic.security.SSL.enforceConstraints=option

Offはサポートされていませんが、他のオプションはサポートされています。

CA証明書の基本制約拡張が確実にCAとして定義されることを確認します。「証明書検証のレベルの制御」を参照してください。

weblogic.security.SSL.allowedcertificatepolicyids

サポートされていません。

WebLogic Serverでは、X.509証明書の証明書ポリシー拡張機能に対するサポートが制限されます。「証明書の証明書ポリシーの許可」を参照してください。

weblogic.security.SSL.nojce

サポートされていません。

「SSL/TLSの設定: 主なステップ」を参照してください。

脚注1

このWebLogicシステム・プロパティは、CerticomとJSSEベースSSL実装の両方に適用できます。ただし、JSSEの場合、このプロパティはSSL呼出しコードにのみ影響を及ぼし、JSSEベース実装には影響を及ぼしません。javax.net.debugシステム・プロパティおよびJSSEベースSSL実装のデバッグの詳細は、セキュリティ開発者ガイドユーティリティのデバッグ - Java Secure Socket Extension (JSSE)リファレンス・ガイドを参照してください。

暗号スイート

WebLogic Serverでサポートされている暗号スイート、匿名暗号の使用および暗号スイートの設定について学習します。

暗号スイートを設定するには、WebLogicリモート・コンソールまたはWLSTを使用します。Oracle WebLogic Remote Consoleオンライン・ヘルプ暗号スイートの設定に関する項または「WLSTを使用した暗号スイートの設定: サンプル」を参照してください。

このトピックには次のセクションが含まれます:

サポートされる暗号スイートのリスト

JDKのデフォルトのJSSEプロバイダ(SunJSSE)でサポートされている暗号スイートのセットのリストは、次を参照してください。

非推奨の暗号スイート

Oracleのセキュリティ・ガイドラインでは、接頭辞がTLS_RSA_または_CBC_を含むTLS暗号スイートは非推奨であり、デフォルトで無効になっています。無効になっているこれらの暗号スイートは脆弱であり、システムのセキュリティを十分に確保できません。ただし、使用環境に必要な場合は、次のいずれかの方法を使用してこれらのTLS暗号スイートを有効にできます:

  • weblogic.management.configuration.SSLMBean MBeanのExcludedCiphersuites属性を、空の文字列を1つのみ含む配列に設定します。たとえば、new String[]{""}などです。

  • weblogic.management.configuration.SSLMBean MBeanのMinimumTLSProtocolVersion属性をTLSv1.1またはそれ以前に設定します。

  • WebLogic Serverを起動するJavaコマンドで、システム・プロパティ-Dweblogic.security.SSL.minimumProtocolVersionTLSv1.1またはそれ以前に設定します。

  • WebLogic Serverを起動するJavaコマンドで、システム・プロパティ-Dweblogic.security.SSL.protocolVersionを設定します。「weblogic.security.SSL.protocolVersionシステム・プロパティの使用」を参照してください。

サポートされる暗号スイートの後方互換性

後方互換性のために、JSSEベースのSSL実装はSunJSSEと互換性のある暗号スイートのCerticom暗号スイート名を受け入れます。Certicom暗号スイート名は、SunJSSEの対応する名前に変換され、表38-2に示すように、通常は接頭辞「TLS_」が「SSL_」で置き換えられます。

Certicom暗号スイートとの後方互換性を考慮する上で、次のことを念頭においてください。

  • JSSEでは、デフォルトで選択されている暗号スイートはCerticom SSLと比較して強力ですが、パフォーマンスが低くなります。通常は、使用している環境のセキュリティ・ポリシーで、使用する必要のある暗号スイートの要件を設定します。ただし、非常にセキュアな環境の場合、許容できるパフォーマンスを提供する使用可能な最強の暗号を使用することをお薦めします。

  • 有効な暗号スイートまたはサポートされる暗号スイートが返される操作では、暗号スイートのCerticom名とSunJSSE名がどちらも返されます。(表38-1で説明されるように、weblogic.security.SSL.disableJsseCipherSuiteAliases=trueプロパティはこの動作を無効にします。)

  • 有効化された暗号スイートを指定する操作の場合、等価なCerticom暗号スイート名またはSunJSSE名のいずれかを使用できます。Certicom暗号スイートとそれらのSunJSSEの等価物は、表38-2にリストされています。(この先、Certicom暗号スイート名は使用しないことをお薦めします。)

  • _DSS_暗号スイートの場合、NIST FIPS Pub 186で定義されるDSS (Digital Signature Standard)で署名された証明書が必要です。DSAは、FIPS 186で説明されているキー生成スキームです。

  • _anon_暗号スイートはデフォルトで無効になっています。有効にするには、WebLogicリモート・コンソールまたはWLSTを使用できます。Oracle WebLogic Remote Consoleオンライン・ヘルプ暗号スイートの設定に関する項または「WLSTを使用した暗号スイートの設定: サンプル」を参照してください。

  • TLS DES暗号スイートは、デフォルトでJSSEプロバイダ・レベルで無効になっています。https://java.com/en/jre-jdk-cryptoroadmap.htmlにあるOracle JREおよびJDK暗号ロードマップを参照してください。

匿名暗号の使用

次の匿名暗号は、WebLogic ServerのJSSEベースのWebLogic SSL実装でデフォルトでサポートされていません。

  • TLS_DH_anon_WITH_3DES_EDE_CBC_SHA

  • TLS_DH_anon_WITH_RC4_128_MD5

  • TLS_DH_anon_WITH_DES_CBC_SHA

  • TLS_DH_anon_EXPORT_WITH_RC4_40_MD5

  • TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA

ただし前述の匿名暗号を有効にする場合は、次の引数を、WebLogic Serverを開始するJavaコマンドに追加します。

-Dweblogic.security.SSL.AllowAnonymousCipher=true

ほとんどの場合、WebLogic Serverまたはデプロイされたアプリケーションが、匿名暗号のみを使用するように構成されたSSLサーバー(LDAPサーバー、RDBMSシステムなど)へのアウトバウンド接続を行うSSLクライアントとして機能するときは、匿名暗号の有効化が必要です。一般的なユース・ケースは、非認証モードで構成されたOracle Internet Directoryインスタンスへの接続です。

ノート:

本番環境で匿名暗号を使用することはお薦めしません。

暗号スイート名の等価物

デフォルトでは、WebLogic ServerがJSSEベースのSSL実装を使用するように構成されるとき、Certicom暗号スイート名はSunJSSE暗号スイート名に変換されます。表38-2は、(削除された) WebLogic Server Certicom SSL実装とそのSunJSSEの等価物でサポートされる各暗号スイートをリストで表示します。TLS_名はCerticom暗号スイート名で、SSL_名は、等価なSunJSSEプロバイダの暗号スイート名です。

表38-2 暗号スイート名の等価物

Certicom暗号スイート SunJSSEの等価な暗号スイート

TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA

SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA

TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA

SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA

TLS_DHE_DSS_WITH_DES_CBC_SHA

SSL_DHE_DSS_WITH_DES_CBC_SHA

TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA

SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA

TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA

SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA

TLS_DHE_RSA_WITH_DES_CBC_SHA

SSL_DHE_RSA_WITH_DES_CBC_SHA

TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA

SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA

TLS_DH_anon_EXPORT_WITH_RC4_40_MD5

SSL_DH_anon_EXPORT_WITH_RC4_40_MD5

TLS_DH_anon_WITH_3DES_EDE_CBC_SHA

SSL_DH_anon_WITH_3DES_EDE_CBC_SHA

TLS_DH_anon_WITH_DES_CBC_SHA

SSL_DH_anon_WITH_DES_CBC_SHA

TLS_DH_anon_WITH_RC4_128_MD5

SSL_DH_anon_WITH_RC4_128_MD5

TLS_RSA_EXPORT_WITH_DES40_CBC_SHA

SSL_RSA_EXPORT_WITH_DES40_CBC_SHA

TLS_RSA_EXPORT_WITH_RC4_40_MD5

SSL_RSA_EXPORT_WITH_RC4_40_MD5

TLS_RSA_WITH_3DES_EDE_CBC_SHA

SSL_RSA_WITH_3DES_EDE_CBC_SHA

TLS_RSA_WITH_DES_CBC_SHA

SSL_RSA_WITH_DES_CBC_SHA

TLS_RSA_WITH_RC4_128_MD5

SSL_RSA_WITH_RC4_128_MD5

TLS_RSA_WITH_RC4_128_SHA

SSL_RSA_WITH_RC4_128_SHA

WLSTを使用した暗号スイートの設定: サンプル

次の例は、暗号スイートSSL_RSA_WITH_RC4_128_MD5SSL_RSA_WITH_RC4_128_SHAおよびSSL_RSA_WITH_3DES_EDE_CBC_SHAを設定するWLSTスクリプトを示しています。このスクリプトを実行すると、暗号スイートがドメイン構成(config.xmlファイル)に設定され、SSLリスナーがこの新しい暗号スイート設定で再起動されます。

ノート:

明確にするために、このWLSTサンプル・スクリプトでは、ユーザー名およびパスワードをクリア・テキストで表示しています。通常はWLSTコマンドにクリア・テキストのパスワードを入力しないでください。特に、クリア・テキストのパスワードが含まれるWLSTスクリプトをディスクに保存することは避けてください。このような状況では、暗号化されたパスワードを渡すメカニズムをかわりに使用する必要があります。WebLogic Scripting Toolの理解WLSTのセキュリティに関する項を参照してください。
url="t3://localhost:7001"
adminUsername="weblogic"
adminPassword="password"
connect(adminUsername, adminPassword, url)
edit()
server=cmo.lookupServer('myserver')
cd('Servers')
cd('myserver')
startEdit()
cd('SSL')
cd('myserver')
ssl = server.getSSL()
ciphers = ['SSL_RSA_WITH_RC4_128_MD5', 'SSL_RSA_WITH_RC4_128_SHA', 'SSL_RSA_WITH_3DES_EDE_CBC_SHA']
ssl.setCiphersuites(ciphers)
save()
activate()
disconnect()
exit()

SSLでのNull暗号の使用に関する重要なノート

暗号スイートとは、キー交換アルゴリズム、対称暗号化アルゴリズム、およびセキュア・ハッシュ・アルゴリズムを含むSSL暗号方式の一種です。通信の整合性を保護するために使用します。たとえば、RSA_WITH_RC4_128_MD5という暗号スイートは、キー交換用にRSA、バルク暗号化用に128ビット・キーを使うRC4、およびメッセージ・ダイジェスト用にMD5を使用します。

SSLクライアントは、サーバーに接続して、SSLハンドシェイクを開始します。接続の一環として、クライアントは、サポートする暗号スイートのリストをサーバーに送信します。次に、サーバーは、クライアントが提供したリストから、クライアントおよびサーバーの双方がサポートしている暗号スイートを選択し、このセッションで使用します。

ただし、不適切に構成されたクライアントが、null暗号しか含まれない一連の暗号スイートを指定する可能性があります。null暗号では、データがクリア・テキストでネットワークに渡されます。(null暗号を含む暗号スイートの例は、SSL_RSA_WITH_NULL_MD5です。)null暗号を使用した場合、ネットワーク・パケットを傍受して、SSLメッセージを見ることができます。実質的に、SSLは使用されますが、セキュリティは実現されません。

サーバーは、クライアントとサーバーが共通して持っている暗号スイートがnull暗号のみの場合に限り、null暗号を選択します。サーバーがクライアントの暗号スイート・リストからnull暗号を選択した場合、ログには、「Null暗号を使用するセッションがSSLで確立されました。」というメッセージが含まれます。

このメッセージは、サーバーがクライアントのリストからnull暗号を選択した場合にのみ出力されます。

ノート:

SSLクライアントが、null暗号を使用してサーバーに不適切に接続している可能性が少しでもある場合は、ログ・ファイルを調べて、このメッセージがあるかどうかを確認してください。新しいクライアントの構成の際は、null暗号の使用に関して十分な注意を払い、必ず、適切に構成することをお薦めします。

以前にnull暗号を使用していなければ、既存のクライアントの構成で、突然null暗号の使用が開始されることはほぼありえません。ただし、無意識のうちに誤って構成された既存のクライアントの構成で、null暗号が使用されている場合があります。

null暗号とは関連のない、その他のSSLエラーも生じる可能性があります。どちらの場合も、対応するエラー・メッセージがログに表示されます。

「SSLの構成」を参照してください。ログ・ファイルの表示の詳細は、Oracle WebLogic Remote Consoleオンライン・ヘルプログの表示に関する項を参照してください。

Null暗号の使用を防ぐためのWebLogic Serverのコントロール

WebLogicリモート・コンソールには、サーバーがnull暗号を使用しないようにするためのコントロールが含まれています。

「ツリーの編集」で、「環境」「サーバー」myServerの順に移動します。「セキュリティ」タブで、「SSL」サブタブを選択し、「拡張フィールドの表示」を有効にします。

「非暗号化null暗号の許可」コントロールは、null暗号が許可されるかどうかを決定します。デフォルトでは、この制御は無効になっており、Null暗号の使用はサーバーで許可されません。このような構成では、SSL/TLSクライアントが(サポートされる暗号スイートとしてSSL_RSA_WITH_NULL_MD5のみを指定して) null暗号スイートの使用を求めた場合、SSL/TLSハンドシェイクは失敗します。

この制御を有効にした場合、Null暗号スイート(SSL_RSA_WITH_NULL_MD5など)が、サポートされる暗号スイートのリストにサーバーによって追加されます。SSL/TLS接続では、クライアントが求めた場合にnull暗号スイートが使用される可能性があります。Null暗号スイートが使用される合、メッセージは暗号化されません。

注意:

設定の意味とその結果を認識しない限り、本番環境ではこのコントロールを設定しないでください。

このコントロールはシステムの実行時パラメータweblogic.security.SSL.allowUnencryptedNullCipher、およびSSLMBeanのAllowUnencryptedNullCipher属性としても公開されます。

ノート:

TLS匿名およびNULL暗号スイートは、JDKではデフォルトで無効です。

JSSE SSLでのデバッグの使用

JSSE SSLデバッグでは、SSLハンドシェイクおよび他の操作時に発生したSSLイベントに関する詳細情報が提供されます。「SSLデバッグ」を参照してください。

JSSEベースSSL実装が有効化されているときにSSLをデバッグする場合、表38-1に示されているデバッグ・ロギング・プロパティを使用できます。ただし、一部のプロパティは、SSL呼出しコードにのみ影響を及ぼし、JSSE実装には影響しません。JSSEベースSSL実装には、javax.net.debugプロパティによってアクティブ化される独自のロギング・システムが含まれます。javax.net.debugプロパティは、出力量を超える複数の制御レベルを提供し、WebLogic SSLロギング(ssl.debug)とは別個に使用できます。

javax.net.debugプロパティの詳細は、セキュリティ開発者ガイドユーティリティのデバッグ - Java Secure Socket Extension (JSSE)リファレンス・ガイドを参照してください。