Active Directoryフェデレーションサービスプロキシ統合プロトコルへの準拠
Web アプリケーションプロキシの代わりにサードパーティプロキシを使用する場合は、ADFS および WAP 統合ルールを指定する MS-ADFSPIP プロトコルをサポートする必要があります。ADFSPIP は Active Directory フェデレーションサービスを認証およびアプリケーションプロキシと統合し、企業ネットワークの境界の外側にあるクライアントが、企業ネットワークの境界内にあるサービスにアクセスできるようにします。
前提条件
プロキシサーバーとADFSファームの間に信頼を正常に確立するには、NetScalerアプライアンスで次の構成を確認します。
-
バックエンドの SSL プロファイルを作成し、SSL プロファイルで SNI を有効にします。SSLv3/TLS1 を無効にします。コマンドプロンプトで、次のコマンドを入力します:
add ssl profile <new SSL profile> -sniEnable ENABLED -ssl3 DISABLED -tls1 DISABLED -commonName <FQDN of ADFS> <!--NeedCopy-->
-
サービスの SSLv3/TLS1 を無効にします。コマンドプロンプトで、次のコマンドを入力します:
set ssl service <adfs service name> -sslProfile ns_default_ssl_profile_backend <!--NeedCopy-->
-
バックエンドサーバーハンドシェイクの SNI 拡張を有効にします。コマンドプロンプトで、次のコマンドを入力します:
set vpn parameter –backendServerSni ENABLED set ssl parameter -denySSLReneg NONSECURE <!--NeedCopy-->
重要
認証をADFSサーバーにオフロードする必要があるホームレルム検出(HRD)シナリオでは、NetScalerアプライアンスで認証とSSOの両方を無効にすることをお勧めします。
認証メカニズム
認証のイベントフローの概要を次に示します。
-
ADFSサーバーとの信頼の確立 -NetScalerサーバーは、クライアント証明書を登録してADFSサーバーとの信頼を確立します。信頼が確立されると、NetScalerアプライアンスは再起動後にユーザーの介入なしに信頼を再確立します。
証明書の有効期限が切れたら、ADFS プロキシプロファイルを削除して再度追加して、信頼を再確立する必要があります。
-
公開エンドポイント -NetScalerアプライアンスは、信頼の確立後、ADFSサーバー上の公開エンドポイントのリストを自動的にフェッチします。これらの公開されたエンドポイントは、ADFS サーバーに転送される要求をフィルタリングします。
-
クライアント要求にヘッダーを挿入する -NetScalerアプライアンスがクライアント要求をトンネリングすると、ADFSPIPに関連するHTTPヘッダーがパケットに追加され、ADFSサーバーに送信されます。ADFS サーバーでは、これらのヘッダー値に基づいてアクセス制御を実装できます。次のヘッダーがサポートされています。
- X-MSプロキシ
- X-MS-エンドポイント-絶対パス
- X-MS 転送クライアント IP
- X-MSプロキシ
- X-MS-ターゲット-ロール
- X-MS-ADFS-プロキシ-クライアント-IP
-
エンドユーザートラフィックの管理 — エンドユーザートラフィックは、目的のリソースに安全にルーティングされます。
注:
-
Citrix ADC はフォームベースの認証を使用します。
-
Citrix ADCは、AActive Directory フェデレーションサービスプロキシ統合プロトコルコンプライアンスを使用したアプリケーションの公開をサポートしていません。
-
ADFSサーバーをサポートするようにNetScalerを構成する
前提条件
-
Context Switching(CS; コンテキストスイッチング)サーバをフロントエンドとして設定し、CS の背後に認証、許可、および監査サーバコマンドプロンプトで入力します:
add cs vserver <cs vserver name> SSL 10.220.xxx.xx 443 -cltTimeout 180 -AuthenticationHost <adfs server hostname> -Authentication OFF -persistenceType NONE <!--NeedCopy-->
add cs action <action name1> -targetLBVserver <lb vserver name> <!--NeedCopy-->
add cs action <action name2> -targetLBVserver <lb vserver name> <!--NeedCopy-->
add cs policy <policy name1> -rule " http.req.url.contains("/adfs/services/trust") || http.req.url.contains("federationmetadata/2007-06/federationmetadata.xml")" -action <action name1> <!--NeedCopy-->
add cs policy <policy name2> -rule "HTTP.REQ.URL.CONTAINS("/adfs/ls")" -action <action name2> <!--NeedCopy-->
bind cs vserver <cs vserver name> -policyName <policy name1> -priority 100 <!--NeedCopy-->
bind cs vserver <cs vserver name> -policyName <policy name2> -priority 110 <!--NeedCopy-->
bind cs vserver <cs vserver name> -lbvserver <lb vserver name> <!--NeedCopy-->
-
ADFS サービスを追加します。コマンドプロンプトで入力します:
add service <adfs service name> <adfs server ip> SSL 443 <!--NeedCopy-->
set ssl service <adfs service name> -sslProfile ns_default_ssl_profile_backend <!--NeedCopy-->
-
負荷分散された仮想サーバを追加します。コマンドプロンプトで入力します:
add lb vserver <lb vserver name> SSL 0.0.0.0 0 <!--NeedCopy-->
set ssl vserver <lb vserver name> -sslProfile ns_default_ssl_profile_frontend <!--NeedCopy-->
-
負荷分散されたサーバーにサービスをバインドします。コマンドプロンプトで入力します:
bind lb vserver <lb vserver name> <adfs service name> <!--NeedCopy-->
NetScalerがADFSサーバーと連携するように構成するには、次の手順を実行する必要があります。
- ADFS プロキシプロファイルで使用する SSL CertKey プロファイルキーを作成する
- ADFS プロキシプロファイルを作成する
- ADFS プロキシプロファイルを LB 仮想サーバに関連付けます。
ADFS プロキシプロファイルで使用するプライベートキーを含む SSL 証明書を作成する
コマンドプロンプトで入力します:
add ssl certkey <certkeyname> –cert <certificate path> -key <keypath>
<!--NeedCopy-->
注: 証明書ファイルとキーファイルがNetScalerアプライアンスに存在する必要があります。 CLI を使用して ADFS プロキシプロファイルを作成する
コマンドプロンプトで入力します:
add authentication adfsProxyProfile <profile name> -serverUrl <https://<server FQDN or IP address>/> -username <adfs admin user name> -password <password for admin user> -certKeyName <name of the CertKey profile created above>
<!--NeedCopy-->
どこ;
[Profile name]:作成するAFDSプロキシプロファイルの名前
serverURL — プロトコルとポートを含む ADFS サービスの完全修飾ドメイン名。例:https://adfs.citrix.com
Username
— ADFS サーバに存在する管理者アカウントのユーザ名
Password — ユーザー名として使用する管理者アカウントのパスワード
certKeyName — 以前に作成された SSL CertKey プロファイルの名前
CLI を使用して ADFS プロキシプロファイルを負荷分散仮想サーバーに関連付ける
ADFS 展開では、2 つの負荷分散仮想サーバーが使用されます。1 つはクライアントトラフィック用で、もう 1 つはメタデータ交換用です。ADFS プロキシプロファイルは、ADFS サーバーのフロントエンドである負荷分散仮想サーバーに関連付ける必要があります。
コマンドプロンプトで入力します:
set lb vserver <adfs-proxy-lb> -adfsProxyProfile <name of the ADFS proxy profile>
<!--NeedCopy-->
ADFSPIP の信頼更新サポート
有効期限が近づいているか、既存の証明書が有効でない場合は、既存の証明書の信頼を更新できます。証明書の信頼の更新は、NetScalerアプライアンスとADFSサーバーの間で信頼が確立された場合にのみ実行されます。証明書の信頼性を更新するには、新しい証明書を提供する必要があります。
重要
新しい証明書の信頼更新には、手動による介入が必要です。
次の例は、証明書信頼の更新に関係する手順を示しています。
- NetScalerアプライアンスは、信頼の更新のために、POST要求で古い(シリアル化されたTrustCertificate)証明書と新しい証明書(SerializedReplacementCertificate)の両方をADFSサーバーに送信します。
- 信頼が正常に更新されると、ADFS サーバーは 200 OK 成功を返して応答します。
- 信頼の更新が成功した場合、NetScalerアプライアンスは状態を「ESTABLISHED_RENEW_SUCCESS」として更新します。信頼の更新に失敗すると、状態は「ESTABLISHED_RENEW_FAILED」として更新され、NetScalerアプライアンスは古い証明書を使用し続けます。
注
証明書キーがすでに一部の ADFS プロキシプロファイルにバインドされている場合は、証明書キーを更新できません。
CLI を使用して証明書の信頼更新を設定するには
コマンドプロンプトで入力します:
set authentication adfsProxyProfile <name> [-CertKeyName <string>]
<!--NeedCopy-->
例:
set authentication adfsProxyProfile adfs_2 –CertKeyName ca_cert1
<!--NeedCopy-->
ADFS サーバーでのクライアント証明書ベースの認証
Microsoftは、Windows Server 2016 以降、プロキシサーバーを介して ADFS にアクセスするときにユーザーを認証する新しい方法を導入しました。これで、エンドユーザーは証明書を使用してログインできるようになり、パスワードの使用を回避できます。
エンドユーザーは、特に社内にいない場合に、プロキシ経由で ADFS にアクセスすることがよくあります。したがって、ADFS プロキシサーバーは ADFSPIP プロトコルによるクライアント証明書認証をサポートする必要があります。
NetScalerアプライアンスを使用してADFSを負荷分散する場合、ADFSサーバーで証明書ベースの認証をサポートするには、ユーザーは証明書を使用してNetScalerアプライアンスにもログインする必要があります。これにより、NetScalerはユーザー証明書をADFSに渡して、ADFSサーバーにSSOを提供できます。
次の図は、クライアント証明書認証フローを示しています。
クライアント証明書を使用して ADFS サーバの SSO を設定する
クライアント証明書を使用してADFSサーバーのSSOを構成するには、まずNetScalerアプライアンスでクライアント証明書認証を構成する必要があります。次に、証明書認証ポリシーを認証、承認、および監査仮想サーバーにバインドする必要があります。
また、次の手順を実行する必要があります。
-
ポート 49443 を持つ追加のコンテキストスイッチング仮想サーバを設定し、このコンテキストスイッチング仮想サーバが、前に作成したすべてのポートに対して開いている同じ負荷分散仮想サーバをポイントする必要があります。
-
認証のために、NetScalerアプライアンスでポート49443を開く必要があります。
-
コンテキストスイッチングポリシーは、先に作成したポート 443 が開いているのと同じ負荷分散仮想サーバにバインドする必要があります。
-
前に作成したものと同じ SSL サービスを、負荷分散仮想サーバーにバインドする必要があります。
-
バックエンドの SSL プロファイルを既に作成している場合は、そのプロファイルを使用する必要があります。
コマンドプロンプトで次を入力します:
add cs vserver <name> <serviceType> <port>
bind cs vserver <name> (-lbvserver <string> | -vServer <string> | [-targetLBVserver <string>]
set ssl vserver <vServerName [-sslProfile <string>]
bind ssl vserver <vServerName -certkeyName <string>
add authentication certAction <action name>
add authentication Policy <policy name> -rule <expression> -action <action name>
add authentication policylable <label Name>
bind authentication policylabel <label Name> -policyName <name of the policy> -priority<integer>
<!--NeedCopy-->
例:
add cs vserver srv123_adfsproxy_csvs_tls SSL $VIP_1 49443
bind cs vserver srv123_adfsproxy_csvs_tls -lbvserver srv123_adfs_lbvserver
set ssl vserver srv123_adfsproxy_csvs_tls -sslProfile ns_default_ssl_profile_frontend
bind ssl vserver srv123_adfsproxy_csvs_tls -certkeyName srv123_wildcardcert
add authentication certAction adfsproxy-cert
add authentication Policy cert1 -rule TRUE -action adfsproxy-cert
add authentication policylable certfactor
bind authentication policylabel certfactor –policyName cert1 –priority 100
<!--NeedCopy-->
NetScalerアプライアンスでのクライアント証明書の構成について詳しくは、「 高度なポリシーを使用したクライアント証明書認証の構成」を参照してください。