证书颁发机构配置
本文介绍了联合身份验证服务 (FAS) 与证书颁发机构 (CA) 服务器集成的高级配置。FAS 管理控制台不支持其中大多数配置。这些说明使用 FAS 提供的 PowerShell API。在执行本文中的任何说明之前,您应该具备 PowerShell 的基本知识。
在 FAS 中设置多个 CA 服务器
您可以在创建或编辑规则时,使用 FAS 管理控制台将 FAS 配置为使用多个 CA:

您选择的所有 CA 都必须发布 Citrix_SmartcardLogon 证书模板(或您在规则中选择的任何模板)。
如果您希望使用的某个 CA 未发布所需模板,请为该 CA 执行设置证书颁发机构步骤。
注意:
您不必为每个 CA 执行授权此服务步骤,因为在此步骤中配置的授权证书可用于您的任何 CA。
预期行为更改
将 FAS 服务器配置为使用多个 CA 服务器后,用户证书生成将在所有已配置的 CA 服务器之间进行分发。此外,如果某个已配置的 CA 服务器发生故障,FAS 服务器将切换到另一个可用的 CA 服务器。
配置 Microsoft 证书颁发机构以进行 TCP 访问
默认情况下,Microsoft CA 使用 DCOM 进行访问。这在实施防火墙安全性时可能会导致复杂性,因此 Microsoft 提供了一种切换到静态 TCP 端口的规定。在 Microsoft CA 上,使用 “开始”>“运行”>dcomcnfg.exe 打开 DCOM 配置面板,展开 “计算机”>“我的电脑”>“DCOM 配置” 以显示 CertSrv 请求节点,然后编辑 CertSrv 请求 DCOM 应用程序的属性:

更改“终结点”以选择静态终结点并指定 TCP 端口号(上图中的 900)。
重新启动 Microsoft 证书颁发机构并提交证书请求。如果您运行 netstat –a –n –b,您应该会看到 certsvr 现在正在侦听端口 900:

无需配置 FAS 服务器(或使用证书颁发机构的任何其他计算机),因为 DCOM 具有使用 RPC 端口的协商阶段。当客户端需要使用 DCOM 时,它会连接到证书服务器上的 DCOM RPC 服务并请求访问特定的 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 是一个标准 cmdlet,用于查询用户列表。上面的示例包含一个筛选器参数,用于仅列出具有 UserPrincipalName 且帐户状态为“enabled”的用户。
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 服务器,特定用户的证书将生成两次:一个在主服务器中,另一个在故障转移服务器中。
上述脚本适用于名为“default”的规则。如果您有不同的规则名称(例如,“hello”),只需更改脚本中的 $rule 变量。

续订注册机构证书
如果正在使用多个 FAS 服务器,您可以在不影响已登录用户的情况下续订 FAS 授权证书。
注意:
您还可以使用 GUI 重新授权 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
