フェデレーション認証サービスの証明機関の設定
この記事では、Citrixフェデレーション認証サービス(FAS)をFAS管理コンソールでサポートされていない証明機関(CA)サーバーと統合するための詳細設定について説明します。この説明では、FASが提供するPowerShell APIを使用します。この記事に記載されている説明を実行する前に、PowerShellの基礎知識を確認してください。
FASで使用するための複数CAサーバーのセットアップ
このセクションでは、複数のCAサーバーを使用して証明書を発行するための単一FASのセットアップ方法について説明します。 これにより、CAサーバーの負荷分散とフェールオーバーが可能になります。
手順1:FASが検出できるCAサーバーの数の確認
Get-FASMsCertificateAuthorityコマンドレットを使用して、FASが接続できるCAサーバーを特定します。次の例は、FASが3つのCAサーバーに接続できることを示しています。
PS > Add-PSSnapin Citrix*
PS > Get-FasMsCertificateAuthority
Address IsDefault PublishedTemplates
------- --------- ------------------
DC1.bvt.local\bvt-DC1-CA False {Citrix_SmartcardLogon, Citrix_Regis...
ca1.bvt.local\CA1.bvt.local False {Citrix_SmartcardLogon, Citrix_Regis...
ca2.bvt.local\ca2.bvt.local False {Citrix_SmartcardLogon, Citrix_Regis...
手順2:既存の証明書定義の変更
ロールの作成には、PowerShellではなくFAS管理コンソールを使用することをお勧めします。これにより、後から手動でSDLを追加する手間が省けます。次の例では、アクセスの規則が構成された「default」という名前の役割が作成されています:
証明機関フィールドに複数のCAを追加するには、PowerShellを使用して証明書定義を構成する必要があります。(複数のCAの追加すこのリリースでFAS管理コンソールからサポートされていません。)
最初に、証明書定義の名前が必要です。この名前を管理コンソールから特定できない場合は、Get-FASCertificateDefinitionコマンドレットを使用してください。
PS > Get-FasCertificateDefinition
Name : default_Definition
CertificateAuthorities : {DC1.bvt.local\bvt-DC1-CA}
MsTemplate : Citrix_SmartcardLogon
AuthorizationCertificate : 86ce221c-7599-43a3-9dbd-8e6a3c2be7b7
PolicyOids : {}
InSession : True
UIと同等のもの
証明書定義の名前が特定できたら、証明書定義を変更してCertificateAuthoritiesが1つではなく一覧で含まれるようにします。
Get-FASCertificateDefinitionコマンドレットによって以下が返されます。
PS > Get-FasCertificateDefinition
Name : default_Definition
CertificateAuthorities : {DC1.bvt.local\bvt-DC1-CA, ca1.bvt.local\CA1.bvt.local, ca2.bvt.local\ca2.bvt.local}
MsTemplate : Citrix_SmartcardLogon
AuthorizationCertificate : 86ce221c-7599-43a3-9dbd-8e6a3c2be7b7
PolicyOids : {}
InSession : True
複数のCAサーバーで構成した後は、FAS管理コンソールを使用してFASを構成できません。ここに示すように、「証明機関」と「証明書テンプレート」フィールドは空になります。
注:
コンソールを使用してアクセス規則を修正すると、複数のCAでの構成が上書きされます。手順2を繰り返すだけで、すべての証明機関を再構成することができます。
PowerShellからアクセス規則のACLを再構成する場合、使用する値が不明な場合は以下の方法をお勧めします。
- 同じCAを使用して別の規則を作成する(例:「テスト」など)。
- 「テスト」規則に必要なACLを構成する。
- PowerShellを使用してACLを検査する (Get-FasRule -name “テスト”)。
- PowerShellを使用して元の規則にACLを適用する(Set-FasRule)。
- 不要になった「テスト」規則を削除する。
想定される動作の変更
FASサーバーを複数のCAサーバーで構成した後は、ユーザー証明書の生成は構成済みのすべてのCAサーバー間で配信されます。さらに、構成済みのCAサーバーのうちいずれかでエラーが発生すると、FASサーバーは別の使用可能なCAサーバーに切り替えます。
Microsoft CAをTCPアクセス用に構成する
デフォルトでは、Microsoft CAはアクセスにDCOMを使用します。この場合、ファイアウォールの実装が複雑になるため、静的TCPポートに切り替えることができます。Microsoft CAで、[スタート]>[実行]> dcomcnfg.exeの順に選択してDCOM構成パネルを開き、[コンピューター]>[マイコンピューター]>[DCOMの構成] の順に展開して [CertSrvの要求] ノードを表示し、CertSrvの要求DCOMアプリケーションのプロパティを編集します。
[エンドポイント]を変更して静的エンドポイントを選択し、TCPポート番号を指定します(上の図では900です)。
Microsoft CAを再起動して、証明書要求を送信します。 「netstat –a –n –b」を実行する場合は、certsvrがポート900をリスンしていることを確認する必要があります。
DCOMにはRPCポートを使用するネゴシエーションステージがあるため、FASサーバー(またはCAを使用するその他のマシン)を構成する必要はありません。 クライアントがDCOMを使用する必要がある場合、クライアントは証明書サーバーのDCOM RPC Serviceに接続して特定のDCOMサーバーへのアクセスを要求します。 これによってポート900が開かれ、DCOMサーバーはFASサーバーに接続方法を指示します。
ユーザー証明書の事前生成
ユーザー証明書がFASサーバー内で事前生成されると、ユーザーのログオンにかかる時間が大幅に短縮されます。次のセクションでは、単一または複数のFASサーバーでユーザー証明書を事前生成する方法について説明します。
Active Directoryユーザーの一覧を取得します
AD に対してクエリを実行し、ユーザーの一覧を次の例のようにファイル(.csvファイルなど)に保存することにより、証明書の生成を改善することができます。
Import-Module ActiveDirectory
$searchbase = "cn=users,dc=bvt,dc=local" # AD User Base to Look for Users, leave it blank to search all
$filename = "user_list.csv" # Filename to save
if ($searchbase -ne ""){
Get-ADUser -Filter {(UserPrincipalName -ne "null") -and (Enabled -eq "true")} -SearchBase $searchbase -Properties UserPrincipalName | Select UserPrincipalName | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $filename
} else {
Get-ADUser -Filter {(UserPrincipalName -ne "null") -and (Enabled -eq "true")} -Properties UserPrincipalName | Select UserPrincipalName | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $filename
}
<!--NeedCopy-->
Get-ADUserは、ユーザーの一覧を要求するための標準コマンドレットです。上述の例にはUserPrincipalNameでステータスが「有効」のユーザーのみを一覧表示するためのフィルター引数が含まれています。
SearchBase引数によって、ADのユーザー検索が制限されます。すべてのユーザーをADに含めたい場合、これを省略できます。注: このクエリによって、多数のユーザーが返される可能性があります。
CSVの外観は、次のようになります。
FASサーバー
以下のPowerShellスクリプトでは、以前生成されたユーザーの一覧を使用してユーザー証明書の一覧が作成されます。
Add-PSSnapin Citrix.A*
$csv = "user_list.csv"
$rule = "default" # rule/role in your admin console
$users = Import-Csv -encoding utf8 $csv
foreach ( $user in $users )
{
$server = Get-FasServerForUser -UserPrincipalNames $user.UserPrincipalName
if( $server.Server -ne $NULL) {
New-FasUserCertificate -Address $server.Server -UserPrincipalName $user.UserPrincipalName -CertificateDefinition $rule"_Definition" -Rule $rule
}
if( $server.Failover -ne $NULL) {
New-FasUserCertificate -Address $server.Failover -UserPrincipalName $user.UserPrincipalName -CertificateDefinition $rule"_Definition" -Rule $rule
}
}
<!--NeedCopy-->
複数のFASサーバーが存在する場合は、特定のユーザーの証明書がメインサーバーで1回、フェールオーバーサーバーで1回の合計2回生成されます。
上述の例は「default」という名前の規則の場合です。規則名が異なる場合(「hello」など)は、スクリプトの$rule変数を変更してください。
登録機関証明書を更新します
複数のFASサーバーを使用中の場合は、ログオン中のユーザーに影響することなくFAS認証証明書を更新できます。注: GUIを使用してFASの権限を取り消したり再び付与したりすることもできますが、これによってFASの構成オプションがリセットされます。
以下の手順を実行します。
-
新しい認証証明書を作成します。
New-FasAuthorizationCertificate
-
次のコマンドによって返される新しい認証証明書のGUIDをメモします:
Get-FasAuthorizationCertificate
-
FASサーバーをメンテナンスモードにします:
Set-FasServer –Address <FAS server> -MaintenanceMode $true
-
新しい認証証明書を置換します。
Set-FasCertificateDefinition –AuthorizationCertificate <GUID>
-
FASサーバーのメンテナンスモードを解除します。
Set-FasServer –Address <FAS server> -MaintenanceMode $false
-
古い認証証明書を削除します。
Remove-FasAuthorizationCertificate
関連情報
- FASのインストールと構成については、「Federated Authentication Service」を参照してください。
- 一般的なFAS環境については、「フェデレーション認証サービスのアーキテクチャの概要」を参照してください。
- 「フェデレーション認証サービスの構成と管理」ではそのほかの「方法」記事を紹介しています。