Oracle HTTP Serverには、この付録に記載されたディレクティブおよびモジュールに加えて、通常、Oracle WebLogic Serverプロキシ・プラグインと呼ばれるmod_wl_ohsモジュールが含まれています。このモジュールのディレクティブの詳細は、Oracle WebLogic Serverプロキシ・プラグイン12.2.1の使用のWeb Serverプラグインのパラメータを参照してください。
mod_certheadersモジュールには次のディレクティブを使用できます。
CGI環境変数に変換する必要があるヘッダーを指定します。これは、AddCertHeaderディレクティブを使用して実行できます。このディレクティブは単一の引数を取ります。この引数は、受信リクエストのHTTPヘッダーから移入する必要があるCGI環境変数です。たとえば、SSL_CLIENT_CERT CGI環境変数を移入します。
|
mod_certheadersを使用すると、特定のリクエストがHTTP経由で受信された場合でも、HTTPS経由で受信されたかのようにそれらのリクエストを扱うように、Oracle HTTP Serverに指示することができます。これは、Oracle HTTP Serverがリバース・プロキシまたはロード・バランサのフロントエンドになっている場合に役立ちます。リバース・プロキシまたはロード・バランサは、SSLリクエストの終端点の機能を果たし、HTTPS経由でOracle HTTP Serverにリクエストを転送します。
|
Oracle HTTP Serverに対してSSLを構成するには、使用するmod_osslモジュールのディレクティブをssl.confファイルに入力します。
次の項で、これらのmod_osslディレクティブについて説明します。
証明書を発行したCA(認証局)からの証明書失効リスト(CRL)をまとめるファイルを指定します。このリストは、クライアント認証に使用されます。このファイルは、PEMでエンコードされた様々なCRLファイルを優先順位の順に連結したものです。このディレクティブは、SSLCARevocationPathの代替または補助用に使用できます。
|
PEMでエンコードされている証明書失効リスト(CRL)が格納されるディレクトリを指定します。CRLは、証明書の発行元のCA(認証局)から届きます。CRLのいずれかに記載されている証明書を使用してクライアントが自身を認証しようとすると、証明書は取り消され、そのクライアントはサーバーに対して自身を認証できなくなります。
このディレクティブは、CRLのハッシュ値が含まれるディレクトリを指している必要があります。ハッシュを生成するコマンドは、『Oracle Fusion Middlewareの管理』の「orapki」を参照してください。
|
クライアントがSSLハンドシェイク時に使用できるSSL暗号スイートを指定します。このディレクティブでは、カンマまたはコロンで区切られた暗号指定文字列を使用して暗号スイートを識別します。表11-2は、必要な暗号スイートを記述するためにこの文字列で使用できるタグを示しています。SSLCipherSuiteには次の接頭辞を使用できます。
none: リストに暗号を追加します。
+: リストに暗号を追加し、リスト内の正しい位置に配置します。
-: リストから暗号を削除します(後で追加できます)。
!: リストから暗号を永続的に削除します。
タグは、暗号指定文字列を構成する接頭辞と結合されます。表G-1に、暗号スイートのタグを示します。
|
|
表G-1 SSL暗号スイートのタグ
|
表G-2に、Oracle Advanced Security 12c (12.2.1)でサポートされている暗号スイートを示します。
表G-2 Oracle Advanced Security 12.2.1でサポートされている暗号スイート
| 暗号スイート | 鍵の交換 | 認証 | 暗号化 | データの整合性 | TLS v1 | TLS v1.1 | TLS v1.2 |
|---|---|---|---|---|---|---|---|
|
RSA |
|
|
|
○ |
○ |
○ |
|
RSA |
|
|
|
○ |
○ |
○ |
|
RSA |
|
|
|
○ |
○ |
○ |
|
RSA |
|
|
|
○ |
○ |
○ |
|
RSA |
|
|
|
× |
× |
○ |
|
RSA |
|
|
|
× |
× |
○ |
|
RSA |
|
|
|
× |
× |
○ |
|
RSA |
|
|
|
× |
× |
○ |
|
ECDHE |
|
|
|
○ |
○ |
○ |
|
ECDHE |
|
|
|
○ |
○ |
○ |
|
ECDHE |
|
|
|
× |
× |
○ |
|
ECDHE |
|
|
|
× |
× |
○ |
|
ECDHE |
|
|
|
× |
× |
○ |
|
ECDHE |
|
|
|
× |
× |
○ |
|
|
|
|
|
○ |
○ |
○ |
|
|
|
|
|
○ |
○ |
○ |
|
|
|
|
|
○ |
○ |
○ |
|
|
|
|
|
○ |
○ |
○ |
|
|
|
|
|
○ |
○ |
○ |
|
|
|
|
|
○ |
○ |
○ |
|
RSA署名付きのエフェメラルECDH |
RSA |
|
|
× |
× |
○ |
|
|
RSA |
|
|
× |
× |
○ |
|
|
RSA |
|
|
× |
× |
○ |
|
|
RSA |
|
|
× |
× |
○ |
SSLプロトコル・エンジンの使用を切り替えます。通常は<VirtualHost>セクションの中で使用し、特定の仮想ホストに対してSSLを有効にします。デフォルトでは、SSLプロトコル・エンジンは、メイン・サーバーとすべての構成済仮想ホストの両方で無効にされています。
|
このディレクティブは、SSLライブラリのFIPS_modeフラグの使用方法を切り替えます。これは、グローバル・サーバー・コンテキスト内に設定される必要があり、競合する設定(SSLFIPS offが続くSSLFIPS onなど)があると構成できません。このモードはすべてのSSLライブラリ操作に適用されます。
|
SSLFIPSの変更を構成する場合は、SSLFIPS on/offディレクティブがssl.conf内でグローバルに設定されている必要があります。仮想レベルの構成はSSLFIPSディレクティブ内で無効になっています。したがって、仮想ディレクティブにSSLFIPSを設定するとエラーになります。
注意:
SSLFIPSに関する次の制限に注意してください。
Oracle HTTP ServerでSSLFIPSモードを有効化するには、AESで暗号化された(compat_v12)ヘッダー付きで作成されたウォレットが必要になります。新しいウォレットを作成する場合、または既存のウォレットをAES暗号を使用して変換する場合は、Oracle Fusion Middlewareの管理のorapkiに関する項で次の項を参照してください。
orapkiを使用したOracleウォレットの作成と表示
AES暗号化によるOracleウォレットの作成
AES暗号化を使用するように既存のウォレットを変換
次の表で、SSLFIPSモードで様々なプロトコルとともに動作する暗号スイートについて説明します。これらの暗号スイートの実装方法の手順は、SSLCipherSuiteディレクティブを参照してください。
表G-3に、SSLFIPSモードのTLS 1.0、TLS1.1およびTLS 1.2プロトコルで動作する暗号スイートを示します。
表G-3 SSLFIPSモードのすべてのTLSプロトコルで動作する暗号
| 暗号名 | 暗号は次のプロトコルで動作します。 |
|---|---|
SSL_RSA_WITH_3DES_EDE_CBC_SHA |
TLS 1.0、TLS1.1およびTLS 1.2 |
SSL_RSA_WITH_AES_128_CBC_SHA |
TLS 1.0、TLS1.1およびTLS 1.2 |
SSL_RSA_WITH_AES_256_CBC_SHA |
TLS 1.0、TLS1.1およびTLS 1.2 |
表G-4に、SSLFIPSモードで使用できる暗号スイートおよびプロトコルを示します。
表G-4 FIPSモードで動作する暗号
| 暗号名 | 暗号は次のプロトコルで動作します。 |
|---|---|
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA |
TLS 1.0以降 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA |
TLS 1.0以降 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA |
TLS 1.0以降 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 |
TLS1.2以降 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 |
TLS1.2以降 |
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 |
TLS1.2以降 |
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 |
TLS1.2以降 |
TLS_RSA_WITH_AES_128_CBC_SHA256 |
TLS1.2以降 |
TLS_RSA_WITH_AES_256_CBC_SHA256 |
TLS1.2以降 |
TLS_RSA_WITH_AES_128_GCM_SHA256 |
TLS1.2以降 |
TLS_RSA_WITH_AES_256_GCM_SHA384 |
TLS1.2以降 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 |
TLS1.2以降 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 |
TLS1.2以降 |
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 |
TLS1.2以降 |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 |
TLS1.2以降 |
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA |
TLS 1.0以降 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA |
TLS 1.0以降 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA |
TLS 1.0以降 |
注意:
SSLFIPSがONに設定され、FIPSをサポートしない暗号がサーバーで使用されている場合、その暗号を使用するクライアント・リクエストは失敗します。
SSLFIPSがONに設定され、FIPSをサポートする暗号がサーバーで使用されている場合、その暗号を使用するクライアント・リクエストは成功します。
表G-5に、SSPFIPSモードで動作しない暗号スイートを示します。
表G-5 SSLFIPSモードで動作しない暗号
| 暗号名 | 説明 |
|---|---|
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA |
すべてのプロトコルでSSLFIPSモードで動作しない |
SSL_RSA_WITH_RC4_128_SHA |
すべてのプロトコルでSSLFIPSモードで動作しない |
TLS_ECDHE_RSA_WITH_RC4_128_SHA |
すべてのプロトコルでSSLFIPSモードで動作しない |
ハンドシェイク中に暗号を選択すると、通常、クライアントのプリファレンスが使用されます。このディレクティブが有効な場合、サーバーのプリファレンスがかわりに使用されます。
|
サーバーのプリファレンス順序はSSLCipherSuiteディレクティブを使用して構成できます。SSLHonorCipherOrderがONに設定されている場合、SSLCipherSuiteの値は暗号値の順序付きリストとして扱われます。
このリストの最初に表示される暗号値は、リストのそれ以降に表示される暗号よりもサーバーで優先されます。
例:
SSLCipherSuite TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 SSLHonorCipherOrder ON
この例では、サーバーはTLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384を、クライアントがサポートしている場合、リストで最初に表示され、SSL接続用にこの暗号を選択するので、SSLCipherSuiteディレクティブで構成されているその他のすべての暗号よりも優先します。
最初は指定されていたように、SSLプロトコルとTLSプロトコルのすべてのバージョン(TLS/1.2を含めて、これまで)は、ネゴシエーション中の中間者攻撃(CVE-2009-3555)に対して脆弱でした。この脆弱性によって、攻撃者は、Webサーバーで表示される任意の平文をHTTPリクエストの前に付け加えることができます。クライアントとサーバーの両方でサポートされている場合は、この脆弱性を修正するプロトコルの拡張が開発されています。
中間者攻撃(CVE-2009-3555)の詳細は、次を参照してください。
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2009-3555
デフォルト・モード
ディレクティブSSLInsecureRenegotionが構成に指定されていない場合、Oracle HTTP Serverは互換モードで動作します。
このモードでは、Renegotiation Info/Signaling Cipher Suite Value (RI/SCSV)をサポートしない脆弱なピアとの接続が可能になりますが、再ネゴシエーションはRI/SCSVをサポートしているピアとのみ許可されます。
SSLInsecureRenegotiation ON
このオプションでは、再ネゴシエーションを実行するRI/SCSVのない脆弱なピアを許可します。したがって、このオプションはCVE-2009-3555で説明している再ネゴシエーション攻撃に対してサーバーを脆弱なままにするため、注意して使用する必要があります。
SSLInsecureRenegotiation OFF
このオプションが使用されると、RI/SCSVをサポートするピアのみがセッションとネゴシエーションおよび再ネゴシエーションできます。これが最もセキュアな推奨されるモードです。
|
SSLInsecureRenegotiationを構成するには、ssl.confファイルを編集して、SSLInsecureRenegotiation ON/OFFをグローバルまたは仮想的に設定し、セキュアでない再ネゴシエーションを有効(または無効)に設定します。
ディレクトリ単位で様々なランタイム・オプションを制御します。一般に、1つのディレクトリに複数のオプションが適用される場合は、最も包括的なオプションが適用されます(オプションはマージされません)。ただし、SSLOptionsディレクティブのすべてのオプションの前にプラス(+)またはマイナス(-)符号が付いている場合は、オプションがマージされます。プラスが前に付いているオプションは、現在有効なオプションに追加され、マイナスが前に付いているオプションは、現在有効なオプションから除外されます。
使用できる値は次のとおりです。
StdEnvVars: SSLに関連するCGI/SSI環境変数の標準セットを作成します。抽出操作はCPU時間が長くかかること、また静的コンテンツを提供するときには一般に適用されないことから、これはデフォルトでは無効になっています。一般に、この値はCGI/SSIリクエストの場合にのみ有効にします。
ExportCertData: 次の追加CGI/SSI変数を有効にします。
SSL_SERVER_CERT
SSL_CLIENT_CERT
SSL_CLIENT_CERT_CHAIN_n (ここでn= 0, 1, 2...)
これらの変数には、現在のHTTPS接続のサーバーおよびクライアント用にPrivacy Enhanced Mail (PEM)でエンコードされたX.509証明書が含まれています。CGIスクリプトではこれを使用して、より詳しい証明書チェックを行うことができます。クライアント証明書連鎖の他の証明書がすべて提供されます。このオプションを使用するとパフォーマンスに時間がかかるため、デフォルトではOffになっています。
SSL_CLIENT_CERT_CHAIN_n変数の順序は、次のようになります。SSL_CLIENT_CERT_CHAIN_0は、SSL_CLIENT_CERTを署名する中間的なCAです。SSL_CLIENT_CERT_CHAIN_1は、SSL_CLIENT_ROOT_CERTをルートCAとして、SSL_CLIENT_CERT_CHAIN_0などを署名する中間的なCAです。
FakeBasicAuth: クライアントのX.509証明書の対象識別名をHTTP Basic認証のユーザー名に変換します。これは、標準のHTTPサーバー認証方式がアクセス制御に使用できることを意味します。ユーザーからはパスワードが取得されず、文字列passwordが置き換えられます。
StrictRequire: SSLRequireSSLディレクティブまたはディレクティブに従ってアクセスを禁止する必要がある場合にアクセスを拒否します。StrictRequireを指定しないと、Satisfy anyディレクティブ設定がSSLRequireまたはSSLRequireSSLディレクティブをオーバーライドして、クライアントがホスト制約を渡した場合、または有効なユーザー名とパスワードを指定した場合に、アクセスが許可されてしまう可能性があります。
このように、SSLRequireSSLまたはSSLRequireをSSLOptions +StrictRequireと組み合せることで、mod_osslはあらゆる場合にSatisfy anyディレクティブをオーバーライドできます。
CompatEnvVars: Apache SSL 1.x、mod_ssl 2.0.x、Sioux 1.0およびStronghold 2.xとの後方互換性のために、廃止された環境変数をエクスポートします。これは、既存のCGIスクリプトに対する互換性を提供するために使用します。
OptRenegotiate: SSLのディレクティブがディレクトリ単位のコンテキストで使用されるときに、最適化されたSSL接続再ネゴシエーション処理を有効にします。
|
mod_osslがサーバー環境を設定するときに使用するSSLプロトコルを指定しますクライアントは、指定されたプロトコルのいずれかでのみ接続できます。使用できる値は次のとおりです。
TLSv1
TLSv1.1
TLSv1.2
All
注意:
SSLv3はリリース12.2.1では無効化されています。
複数の値をスペース区切りのリストとして指定できます。構文で、"-"および"+"記号の意味は次のとおりです。
+ : プロトコルをリストに追加します
- : プロトコルをリストから削除します
現在のリリースでは、Allは+TLSv1 +TLSv1.1 +TLSv1.2として定義されます。
|
プロキシがSSLハンドシェイク時に使用できるSSL暗号スイートを指定します。このディレクティブでは、コロンで区切られた暗号指定文字列を使用して暗号スイートを識別します。表G-1に、必要な暗号スイートを記述するためにこの文字列で使用するタグを示します。SSLProxyCipherSuiteには次の値を使用できます。
none: リストに暗号を追加します。
+: リストに暗号を追加し、リスト内の正しい位置に配置します。
-: リストから暗号を削除します(後で追加できます)。
!: リストから暗号を永続的に削除します。
タグは、暗号指定文字列を構成する接頭辞と結合されます。タグは、暗号指定文字列を構成する接頭辞と結合されます。SSLProxyCipherSuiteディレクティブはSSLCipherSuiteディレクティブと同じタグを使用します。サポートされているスイート・タグのリストについては、表G-1を参照してください。
|
SSLProxyCipherSuiteディレクティブはSSLCipherSuiteディレクティブと同じ暗号スイートを使用します。Oracle Advanced Security 12.2.1でサポートされている暗号スイートのリストについては、表G-2を参照してください。
プロキシのSSL/TLSプロトコル・エンジンを有効または無効にします。SSLProxyEngineは<VirtualHost>セクションの中で使用し、特定の仮想ホストでのプロキシの使用に対してSSL/TLSを有効にします。デフォルトでは、SSL/TLSプロトコル・エンジンは、メイン・サーバーとすべての構成済仮想ホストの両方でプロキシに対して無効になっています。
SSLProxyEngineは、(ProxyディレクティブまたはProxyRequestディレクティブを使用した)フォワード・プロキシとして動作する仮想ホストに含めることはできません。プロキシSSL/TLSリクエストに対してフォワード・プロキシ・サーバーを有効化する際に、SSLProxyEngineは必須ではありません。
|
mod_osslがサーバー環境でプロキシ接続を設定するときに使用するSSLプロトコルを指定します。プロキシは、指定されたプロトコルのいずれかでのみ接続できます。使用できる値は次のとおりです。
TLSv1
TLSv1.1
TLSv1.2
All
複数の値をスペース区切りのリストとして指定できます。構文で、"-"および"+"記号の意味は次のとおりです。
+ : リストにプロトコルを追加
- : リストからプロトコルを削除
現在のリリースでは、Allは+TLSv1 +TLSv1.1 +TLSv1.2として定義されます。
|
プロキシ接続が使用する必要のある、WRLを使用してウォレットの場所を指定(ファイルパスとして指定)します。
|
任意の複合ブール式がTRUEでないかぎり、アクセスを拒否します。
|
式変数の理解
式変数は、次の構文と一致する必要があります(BNF構文表記として示してあります)。
expr ::= "true" | "false"
"!" expr
expr "&&" expr
expr "||" expr
"(" expr ")"
comp ::=word "==" word | word "eq" word
word "!=" word |word "ne" word
word "<" word |word "lt" word
word "<=" word |word "le" word
word ">" word |word "gt" word
word ">=" word |word "ge" word
word "=~" regex
word "!~" regex
wordlist ::= word
wordlist "," word
word ::= digit
cstring
variable
function
digit ::= [0-9]+
cstring ::= "..."
variable ::= "%{varname}"
表G-6と表G-7に、標準変数とSSL変数を示します。これらの値はvarnameの有効値です。
function ::= funcname "(" funcargs ")"
funcnameには、次の関数を使用できます。
file(filename)
file関数は文字列引数(ファイル名)を1つ取り、そのファイルの内容に拡張します。これは、正規表現に照らしてファイルの内容を評価する場合に役立ちます。
表G-6に、SSLRequireディレクティブのvarnameの標準変数を示します。
|
表G-6 SSLRequireのvarnameの標準変数
|
|
表G-7 SSLRequireのvarnameのSSL変数
|
SSLを使用していないクライアントに対してアクセスを拒否します。構成エラーにより、セキュリティがぜい弱になる可能性があるSSL対応の仮想ホストまたはディレクトリの完全保護に役立つディレクティブです。
|
グローバル・セッションまたはプロセス間セッションのセッション・キャッシュ・ストレージ・タイプを指定します。キャッシュは、リクエストのパラレル処理を高速化するオプションの方法を提供します。使用できる値は次のとおりです。
none: グローバルまたはプロセス間セッション・キャッシュを無効にします。機能に対する影響はありませんが、パフォーマンスに大きな差が出ます。
nonenotnull: グローバルおよびプロセス間セッション・キャッシュを無効にします。
shmcb:/path/to/datafile[bytes]: 高パフォーマンスのShared Memory Cyclic Buffer (SHMCB)セッション・キャッシュを使用して、サーバー・プロセスのローカルSSLメモリー・キャッシュと同期化します。注意: このshm設定では、ローカル・ディスクの/path/to/datafileの下にログ・ファイルは作成されません。
|
セッション・キャッシュ内でSSLセッションの有効期限が満了になるまでの秒数を指定します。
|
SSLTraceLogLevelは、Oracle Securityライブラリのエラー・ログに記録されるメッセージの冗長性を調整します。特定のレベルを指定すると、それより上位レベルの重要度のメッセージもすべて報告されます。たとえば、SSLTraceLogLevel sslが設定されていると、error、warn、userおよびdebugのログ・レベルのメッセージも報告されます。
注意:
このディレクティブはssl.confファイルにグローバルにのみ設定できます。
SSLTraceLogLevelでは次のログ・レベルが使用されます。
none: Oracle Security Traceが無効
fatal: 致命的なエラーが発生してシステムが使用できない状態
error: エラー状態
warn: 警告状態
user: 正常ではあるが、重大な状態
debug: デバッグ・レベルの状態
ssl: SSLレベルのデバッグ
|
接続時にクライアントが証明書を提示する必要があるかどうかを指定します。使用できる値は次のとおりです。
none: クライアント証明書は不要です。
optional: クライアントは有効な証明書を提示できます。
require: クライアントは有効な証明書を提示する必要があります。
|
注意:
mod_sslに含まれているレベルoptional_no_ca(クライアントは有効な証明書を提示できるが、証明書が検証可能である必要はない)は、mod_osslではサポートされていません。