クライアント認証または相互 TLS (mTLS)
通常の SSL トランザクションでは、セキュリティで保護された接続を介してサーバーに接続しているクライアントが、サーバーの有効性を確認します。そのためには、SSL トランザクションを開始する前にサーバーの証明書をチェックします。ただし、サーバーに接続しているクライアントを認証するようにサーバーを構成したい場合があります。
注: リリース13.0ビルド41.x以降、NetScaler ADCアプライアンスは、合計サイズが32 KB以内の場合に複数のレコードにフラグメント化される証明書要求メッセージをサポートします。以前は、サポートされる最大サイズは 16 KB で、フラグメンテーションはサポートされていませんでした。
SSL仮想サーバーでクライアント認証を有効にすると、NetScaler ADCアプライアンスはSSLハンドシェイク中にクライアント証明書を要求します。アプライアンスは、発行者の署名や有効期限などの通常の制約について、クライアントから提示された証明書をチェックします。
リリース13.1ビルド42.x以降、NetScaler ADCアプライアンスはクロス署名証明書検証をサポートしています。つまり、証明書が複数の発行者によって署名されている場合、ルート証明書への有効なパスが少なくとも 1 つあれば検証は成功します。以前は、証明書チェーン内の証明書の 1 つがクロス署名されていて、ルート証明書へのパスが複数ある場合、ADC アプライアンスはパスを 1 つだけチェックしていました。そのパスが有効でない場合、検証は失敗しました。
(注)
アプライアンスが発行者の署名を検証するには、クライアント証明書を発行した CA の証明書が次の条件を満たしている必要があります。
- アプライアンスにインストールされている。
- クライアントがトランザクションを行っている仮想サーバにバインドされます。
証明書が有効な場合、アプライアンスはクライアントにすべてのセキュアなリソースへのアクセスを許可します。ただし、証明書が無効な場合、アプライアンスは SSL ハンドシェイク中にクライアント要求を破棄します。
アプライアンスは、まずクライアント証明書から始まり、クライアントのルート CA 証明書(Verisign など)で終わる証明書のチェーンを作成して、クライアント証明書を検証します。ルート CA 証明書には、1 つまたは複数の中間 CA 証明書が含まれる場合があります (ルート CA がクライアント証明書を直接発行しない場合)。
NetScaler ADCアプライアンスでクライアント認証を有効にする前に、有効なクライアント証明書がクライアントにインストールされていることを確認してください。次に、トランザクションを処理する仮想サーバのクライアント認証を有効にします。最後に、クライアント証明書を発行した CA の証明書をアプライアンス上の仮想サーバーにバインドします。
注: NetScaler MPXアプライアンスは、512ビットから4096ビットの証明書とキーのペアのサイズをサポートしています。証明書は、次のいずれかのハッシュアルゴリズムを使用して署名する必要があります。
- MD5
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
SDXアプライアンスでは、SSLチップがVPXインスタンスに割り当てられている場合、MPXアプライアンスの証明書とキーのペアサイズのサポートが適用されます。それ以外の場合は、VPXインスタンスの通常の証明書とキーのペアサイズのサポートが適用されます。
NetScaler ADC仮想アプライアンス(VPXインスタンス)は、次のサイズまで、512ビット以上の証明書をサポートします。
- 仮想サーバー上の 4096 ビットサーバー証明書
- サービス上の 4096 ビットのクライアント証明書
- 4096 ビット CA 証明書
- 物理サーバー上の 4096 ビット証明書
リリース13.1ビルド17.x以降、すべてのNetScalerプラットフォームは、RSASSA-PSSアルゴリズムを使用して署名された証明書をサポートしています。 これらのアルゴリズムは X.509 証明書パスの検証でサポートされています。 次の表は、NetScalerアプライアンスでサポートされているRSASSA-PSSパラメーターセットを示しています。
パブリックキー OID | マスク生成関数 (MGF) | MGFダイジェスト機能 | シグネチャダイジェスト関数 | 塩の長さ |
---|---|---|---|---|
RSAEncryption | MGF1 | SHA-256 | SHA-256 | 32 バイト |
RSAEncryption | MGF1 | SHA-384 | SHA-384 | 48 バイト |
RSAEncryption | MGF1 | SHA-512 | SHA-512 | 64 バイト |
注: リリース13.0ビルド79.x以降、VPXプラットフォームでのSSLハンドシェイク中、4096ビットRSAクライアント証明書によるクライアント認証がサポートされています。
注:
- MPX FIPS の制限については、 MPX FIPS の制限を参照してください。
- SDX FIPS の制限については、 SDX FIPS の制限を参照してください。
クライアント証明書の提供
クライアント認証を構成する前に、有効なクライアント証明書をクライアントにインストールしておく必要があります。クライアント証明書には、NetScaler ADCアプライアンスとの安全なセッションを作成する特定のクライアントシステムに関する詳細が含まれています。各クライアント証明書は一意であり、1 つのクライアントシステムでのみ使用する必要があります。
CAからクライアント証明書を取得するか、既存のクライアント証明書を使用するか、NetScaler ADCアプライアンスでクライアント証明書を生成するかにかかわらず、証明書を正しい形式に変換する必要があります。NetScaler ADCアプライアンスでは、証明書はPEMまたはDER形式で保存され、クライアントシステムにインストールする前にPKCS #12 形式に変換する必要があります。証明書を変換してクライアントシステムに転送したら、証明書がそのシステムにインストールされ、クライアントアプリケーション用に構成されていることを確認します。Webブラウザーなどのアプリケーションは、SSLトランザクションの一部である必要があります。
証明書を PEM または DER 形式から PKCS #12 形式に変換する方法については、「 SSL ファイルのインポートと変換」を参照してください。
クライアント証明書を生成する方法については、「 証明書の作成」を参照してください。
クライアント証明書ベースの認証を有効にする
デフォルトでは、NetScaler ADCアプライアンスではクライアント認証が無効になっており、すべてのSSLトランザクションはクライアントを認証せずに続行されます。SSL ハンドシェイクの一部として、クライアント認証をオプションまたは必須のいずれかに設定できます。
クライアント認証がオプションの場合、アプライアンスはクライアント証明書を要求しますが、クライアントが無効な証明書を提示した場合でも SSL トランザクションは続行されます。クライアント認証が必須の場合、SSL クライアントが有効な証明書を提供しない場合、アプライアンスは SSL ハンドシェイクを終了します。
注意: クライアント証明書ベースの認証チェックをオプションに変更する前に、適切なアクセス制御ポリシーを定義することをお勧めします。
注: クライアント認証は、グローバルではなく個々の SSL 仮想サーバーに対して構成されます。
CLI を使用してクライアント証明書ベースの認証を有効にする
コマンドプロンプトで次のコマンドを入力して、クライアント証明書ベースの認証を有効にし、構成を確認します。
set ssl vserver <vServerName> [-clientAuth (ENABLED | DISABLED)] [-clientCert (MANDATORY | OPTIONAL)]
show ssl vserver <vServerName>
<!--NeedCopy-->
例:
set ssl vserver vssl -clientAuth ENABLED -clientCert Mandatory
Done
show ssl vserver vssl
Advanced SSL configuration for VServer vssl:
DH: DISABLED
Ephemeral RSA: ENABLED Refresh Count: 0
Session Reuse: ENABLED Timeout: 120 seconds
Cipher Redirect: DISABLED
SSLv2 Redirect: DISABLED
ClearText Port: 0
Client Auth: ENABLED Client Cert Required: Mandatory
SSL Redirect: DISABLED
Non FIPS Ciphers: DISABLED
SNI: DISABLED
OCSP Stapling: DISABLED
HSTS: DISABLED
HSTS IncludeSubDomains: NO
HSTS Max-Age: 0
SSLv2: DISABLED SSLv3: ENABLED TLSv1.0: ENABLED TLSv1.2: ENABLED TLSv1.2: ENABLED
1) CertKey Name: sslckey Server Certificate
1) Policy Name: client_cert_policy Priority: 0
1) Cipher Name: DEFAULT
Description: Predefined Cipher Alias
Done
<!--NeedCopy-->
GUI を使用してクライアント証明書ベースの認証を有効にする
- Traffic Management > Load Balancing > Virtual Serversに移動して仮想サーバーを開きます。
- [ SSL パラメータ ] セクションで [ クライアント認証] を選択し、[ クライアント証明書 ] リストで [ 必須] を選択します。
注:
クライアント認証が必須に設定されていて、クライアント証明書にポリシー拡張が含まれていると、証明書の検証は失敗します。リリース 12.0-56.x からは、フロントエンド SSL プロファイルにパラメータを設定して、このチェックをスキップできます。このパラメーターはデフォルトでは無効になっています。つまり、このチェックはデフォルトで実行されます。
CLI を使用してクライアント認証中にポリシー拡張チェックをスキップする
コマンドプロンプトで入力します。
set ssl profile ns_default_ssl_profile_frontend -clientauth ENABLED -skipClientCertPolicyCheck ENABLED
Parameter
skipClientCertPolicyCheck
Control policy extension check, if present inside the X509 certificate chain. Applicable only if client authentication is enabled and client certificate is set to mandatory. Possible values functions as follows:
- ENABLED: Skip the policy check during client authentication.
- DISABLED: Perform policy check during client authentication.
Possible values: ENABLED, DISABLED
Default: DISABLED
<!--NeedCopy-->
GUI を使用してクライアント認証中にポリシー拡張チェックをスキップする
- [ システム ] > [ プロファイル ] > [ SSL プロファイル] に移動します。
- 新しいフロントエンドプロファイルを作成するか、既存のフロントエンドプロファイルを編集します。
- クライアント認証が有効になっていて、クライアント証明書が必須に設定されていることを確認します。
- [ クライアント証明書ポリシーチェックをスキップ] を選択します。
CA 証明書を仮想サーバにバインドする
NetScaler ADCアプライアンスに証明書が存在するCAは、クライアント認証に使用されるクライアント証明書を発行する必要があります。この証明書を、クライアント認証を実行するNetScaler ADC仮想サーバーにバインドします。
アプライアンスがクライアント証明書を検証するときに完全な証明書チェーンを形成できるように、CA 証明書を SSL 仮想サーバーにバインドします。そうしないと、証明書チェーンの形成に失敗し、証明書が有効であってもクライアントはアクセスを拒否されます。
CA 証明書は SSL 仮想サーバに任意の順序でバインドできます。アプライアンスは、クライアント証明書の検証中に正しい順序を形成します。
たとえば、クライアントが CA_Aによって発行された証明書を提示する場合、 CA_Aは証明書が CA_Bによって発行される中間 CA であり、証明書は信頼されたルート CA Root_CAによって発行されます。この証明書は、これらの3つの証明書はすべて、NetScaler ADCアプライアンス上の仮想サーバーにバインドする必要があります。
1 つ以上の証明書を仮想サーバーにバインドする手順については、SSL 仮想サーバーへの証明書とキーのペアのバインドを参照してください。
証明書のチェーンを作成する手順については、「 証明書のチェーンを作成する」を参照してください。
クライアント証明書の検証の厳密な制御
NetScaler ADCアプライアンスは、単一のルートCAによって発行された場合、有効な中間CA証明書を受け入れます。つまり、ルート CA 証明書のみが仮想サーバーにバインドされ、そのルート CA がクライアント証明書とともに送信された中間証明書を検証すると、アプライアンスは証明書チェーンを信頼し、ハンドシェイクは成功します。
ただし、クライアントがハンドシェイクで一連の証明書を送信する場合、証明書が SSL 仮想サーバーにバインドされていない限り、CRL または OCSP レスポンダーを使用して中間証明書を検証することはできません。したがって、中間証明書の 1 つが失効しても、ハンドシェイクは成功します。ハンドシェイクの一部として、SSL 仮想サーバはバインドされている CA 証明書のリストを送信します。より厳密に制御するために、その仮想サーバーにバインドされた CA 証明書の 1 つによって署名された証明書のみを受け入れるように SSL 仮想サーバーを構成できます。これを行うには、仮想サーバーにバインドされている SSL プロファイルで ClientAuthUseBoundCAChain 設定を有効にする必要があります。仮想サーバーにバインドされているCA証明書の1つがクライアント証明書に署名していない場合、ハンドシェイクは失敗します。
たとえば、clientcert1 と clientcert2 の 2 つのクライアント証明書が、それぞれ中間証明書 int-CA-A と int-CA-B によって署名されているとします。中間証明書は、ルート証明書 root-CA によって署名されます。int-CA-A とルート CA は SSL 仮想サーバにバインドされます。デフォルトの場合 (ClientAuthuseBoundCachain は無効)、clientcert1 と clientcert2 の両方が受け入れられます。ただし、ClientAuthUseBoundCachainが有効な場合、NetScaler ADCアプライアンスはclientcert1のみを受け入れます。
CLI を使用して、クライアント証明書の検証をより厳密に制御できるようにする
コマンドプロンプトで入力します。
set ssl profile <name> -ClientAuthUseBoundCAChain Enabled
<!--NeedCopy-->
GUI を使用してクライアント証明書の検証をより厳密に制御できるようにする
- [ システム ] > [ プロファイル] に移動し、[ SSL プロファイル ] タブを選択して SSL プロファイルを作成するか、既存のプロファイルを選択します。
- [ バインドされた CA チェーンを使用したクライアント認証を有効にする] を選択します。