证书颁发机构配置

本文介绍了联合身份验证服务 (FAS) 的高级配置,以便与 FAS 管理控制台不支持的证书颁发机构服务器集成。这些说明使用 FAS 提供的 PowerShell API。在执行本文中的任何说明之前,需要具备 PowerShell 的基本知识。

配置 Microsoft 证书颁发机构以进行 TCP 访问

默认情况下,Microsoft 证书颁发机构使用 DCOM 进行访问。这可能会导致实施防火墙安全性时出现复杂情况,因此 Microsoft 提供了切换到静态 TCP 端口的规定。在 Microsoft 证书颁发机构上,打开 DCOM 配置面板并编辑“CertSrv Request”DCOM 应用程序的属性:

本地化图像

更改“Endpoints”以选择静态终结点并指定 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:

本地化图像

完成以下序列:

  1. 创建新的授权证书:New-FasAuthorizationCertificate

  2. 记下新授权证书的 GUID,由以下命令返回:Get-FasAuthorizationCertificate

  3. 将 FAS 服务器置于维护模式:Set-FasServer –Address <FAS server> -MaintenanceMode $true

  4. 交换新的授权证书:Set-FasCertificateDefinition –AuthorizationCertificate <GUID>

  5. 使 FAS 服务器退出维护模式:Set-FasServer –Address <FAS server> -MaintenanceMode $false

  6. 删除旧的授权证书:Remove-FasAuthorizationCertificate

相关信息

证书颁发机构配置