証明機関の設定
この記事では、フェデレーション認証サービス(FAS)を証明機関(CA)サーバーと統合するための詳細設定について説明します。 これらの設定の大半はFAS管理コンソールでサポートされていません。 この説明では、FASが提供するPowerShell APIを使用します。 この記事に記載されている説明を実行する前に、PowerShellの基礎知識を確認してください。
FASで使用するための複数CAサーバーのセットアップ
FAS管理コンソールを使用して、複数の証明機関でFASを構成し、ルールを作成または編集できます:
選択したすべてのCAがCitrix_SmartcardLogon証明書テンプレート(またはルールで選択したテンプレート)を公開する必要があります。
使用するいずれかのCAが必要なテンプレートを公開していない場合、CAの証明機関をセットアップする手順を実行します。
メモ:
この手順で構成された認証証明書はどのCAでも使用できるため、すべてのCAでこのサービスを認証する手順を実行する必要はありません。
想定される動作の変更
FASサーバーを複数のCAサーバーで構成した後は、ユーザー証明書の生成は構成済みのすべてのCAサーバー間で配信されます。 さらに、構成済みのCAサーバーのうちいずれかでエラーが発生すると、FASサーバーは別の使用可能なCAサーバーに切り替えます。
Microsoft証明機関をTCPアクセス用に構成する
FASはDCOMを使用してMicrosoft CAにアクセスします。 DCOMはポート135を使用し、サービスがリッスンしているポートを検出します。 デフォルトでは、リスニングポートは動的に割り当てられます。 これにより、ファイアウォールセキュリティの実装が複雑になる可能性があります。 そのため、Microsoftでは静的ポートを構成するための規定を設けています。 Microsoft CAで静的ポートを構成するには、[スタート] > [実行] > dcomcnfg.exe
を選択してDCOM構成パネルを開きます。 [コンピューター] > [マイコンピューター] > [DCOMの構成]の順に展開して、CertSrv Requestノードを表示します。 次に、CertSrv Request DCOMアプリケーションのプロパティを編集します:
[エンドポイント] を変更して静的エンドポイントを選択し、TCPポート番号を指定します(上の図では900です)。
この例では、ファイアウォールはポート135とポート900を許可する必要があります。
変更を適用するには、Microsoft証明機関を再起動します。
DCOMにはRPCポート135を使用するネゴシエーションステージがあるため、FASサーバー(または証明機関を使用するその他のマシン)を構成する必要はありません。 クライアントがDCOMを使用する必要がある場合、クライアントはサーバーのDCOM RPC Serviceに接続して特定のDCOMサーバーへのアクセスを要求します。 これによってポート900(この例の場合)が開かれ、DCOMサーバーはクライアントにこのポートに接続するよう指示します。
ユーザー証明書の事前生成
ユーザー証明書が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
}
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
}
}
複数のFASサーバーが存在する場合は、特定のユーザーの証明書がメインサーバーで1回、フェールオーバーサーバーで1回の合計2回生成されます。
前のスクリプトは、「default」という名前のルールの場合のものです。 ルール名が異なる場合(「hello」など)は、スクリプトの$rule
変数を変更してください。
FAS認証証明書の更新
FASユーザーを中断することなく、FAS認証証明書を更新できます。
FAS管理コンソールの使用
- 新しいFAS認証証明書要求を生成するには、[Reauthorize]をクリックします:
CAで要求を手動で承認する必要があります。 詳しくは、「フェデレーション認証サービスへの権限付与」を参照してください。
- 新しい認証証明書が生成されると、FASはそれがまだルールに関連付けられていないことを示します。 [Update the configuration]をクリックして、新しい認証証明書をルールに関連付けます。
PowerShellの使用
以下の手順を実行します。
-
認証証明書を作成します:
New-FasAuthorizationCertificate
-
次のコマンドによって返される新しい認証証明書のGUIDをメモします:
Get-FasAuthorizationCertificate
-
新しい認証証明書を置換します:
Set-FasCertificateDefinition –AuthorizationCertificate <GUID>
-
古い認証証明書を削除します:
Remove-FasAuthorizationCertificate
。 ユーザーアクティビティが中断されないように、必ずDeleteUserCerts $false
オプションを使用してください。
FAS の認証解除と FAS 証明書の削除
FAS管理コンソールの使用
-
[Deauthorize]リンクをクリックして、認証証明書を削除します。 すべてのユーザー証明書とすべてのルールを削除できます(ただしこれは、証明書をクリアするために必須ではありません)。
-
ルールを削除しないと、後でFASを承認するときに警告が表示されます:
この警告は、認証証明書がまだルールに関連付けられていないことを示します。 [Update the configuration]をクリックして、新しい認証証明書をルールに関連付けます。
PowerShellの使用
認証証明書とユーザー証明書を削除するには、次のPowerShellコマンドを使用します:
$AuthCert = Get-FasAuthorizationCertificate -Address localhost
Remove-FasAuthorizationCertificate -Address localhost -Id $AuthCert.Id
メモ:
Get-FasAuthorizationCertificate
は、認証証明書と保留中の認証証明書要求の一覧を返します。これにより、Remove-FasAuthorizationCertificate
に進む前に、$AuthCert
の値を検査できます。
DeleteUserCerts
パラメーターをfalseに設定することで、認証証明書を削除しながらユーザー証明書を保持することができます:
Remove-FasAuthorizationCertificate -Address localhost -Id $AuthCert.Id -DeleteUserCerts $false
残りのユーザー証明書は、FASによってVDAサインインおよびセッション内証明書に引き続き使用できるため、FAS認証を更新するときに役立ちます。 詳しくは、「FAS認証証明書の更新」を参照してください。
- ユーザー証明書は次のように削除できます:
Remove-FasUserCertificate -Address localhost
このコマンドは、FASサーバーからすべてのユーザー証明書を削除します。 このコマンドには、削除される証明書のセットをフィルタリングするオプションがあります。
メモ:
FASが内部ストレージから認証証明書またはユーザー証明書を削除すると、関連付けられているキーペアも削除されます。
オフライン認証
PowerShellを使用して、FAS認証証明書をオフラインで要求できます。 これは、証明機関がオンラインの証明書署名要求で認証証明書を発行することがないようにしたい組織に適しています。
-
管理コンソールを使用した初回FAS構成時には、最初の「証明書テンプレートの展開」および「証明機関のセットアップ」の2つの手順だけを完了します。
-
FASサーバーで次のPowerShellコマンドレットを読み込みます:
Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1`
-
キーペアを生成し、FASサーバーで次のPowerShellコマンドレットを入力して証明書署名要求を作成します:
$AuthCertRequest = New-FasAuthorizationCertificateRequest -Address localhost $AuthCertRequest
結果は次のようになります:
メモ:
生成されるキーペアのプロパティは、FAS認証キー構成によって決まります。 詳しくは、「秘密キー保護」を参照してください。
-
証明書要求をディスクにコピーします。
`$AuthCertRequest.CertificateRequest > c:\temp\authcert.csr
-
証明書要求ファイル(この例ではauthcert.csr)を証明機関に提示し、要求を承認して、証明書応答を取得します。
次の5つの手順は、Microsoftエンタープライズ証明機関の使用に特有のものです。他のCAについては、CAベンダーにお問い合わせください。
-
証明機関サーバーで、証明書テンプレートMMCスナップインを追加します。 Citrix_RegistrationAuthority_ManualAuthorizationテンプレートを右クリックし、[テンプレートの複製]を選択します。 [一般]タブを選択します。 テンプレート名と有効期間を変更します。 この例では、テンプレート名はOffline_RA、有効期間は2年間です:
-
証明機関サーバーで、証明機関MMCスナップインを追加します。 3. [証明書テンプレート]を右クリックします。 [新規作成]を選択し、[発行する証明書テンプレート]をクリックします。 作成したテンプレートを選択します。
-
以下のコマンドをFASサーバーのPowerShellコマンドプロンプトに入力して、証明書署名要求を証明機関に送信します:
certreq -submit -attrib "certificatetemplate:<certificate template from step 5a>" <certificate request file from step 4>
例:
certreq -submit -attrib "certificatetemplate:Offline_RA" C:\temp\authcert.csr
上記のコマンドを実行すると、次の結果になります:
この時点で、「証明機関の一覧」ウィンドウが表示される可能性があります。 この例の証明機関ではDCOM(上部)およびHTTP(下部)登録の両方が有効です。 利用可能な場合は、DCOMを選択し、[OK]をクリックします:
証明機関が指定されると、コマンドが完了し、RequestIDが表示されます:
-
証明機関サーバーの証明機関MMCスナップインで[Pending Requests]をクリックします。 要求IDを見つけます。 要求を右クリックし、[発行]を選択します。
-
[Issued Certificates]ノードを選択します。 発行した証明書(要求IDが一致する証明書)を見つけます。 証明書をダブルクリックして開きます。 [詳細] タブをクリックします。 [ファイルへコピー] をクリックします。 証明書のエクスポートウィザードが開きます。 [次へ] をクリックします。 次のファイル形式のオプションを選択します。
形式はCryptographic Message Syntax Standard – PKCS #7証明書(.P7B)で、証明のパスにある証明書を可能であればすべて含むを選択する必要があります。
-
-
エクスポートされた証明書をFASサーバーにコピーします。
-
FASサーバー上で次のPowerShellコマンドレットを入力して、登録機関証明書をFASサーバーにインポートします:
Import-FasAuthorizationCertificateResponse -Address localhost -Id $AuthCertRequest.Id -Pkcs7CertificateFile <Certificate file from step 6>
例:
Import-FasAuthorizationCertificateResponse -Address localhost -Id $AuthCertRequest.Id -Pkcs7CertificateFile C:\temp\response.p7b
このコマンドを実行すると、次の結果になります:
-
FAS管理コンソールを確認します。 FASが承認されるようになったことが表示されている必要があります。
メモ:
手順[Authorize this service]の横に緑色のチェックマークが付いています。
-
ルールを作成して構成を続行します。 詳しくは、「ルールの構成」を参照してください。