“联合身份验证服务”证书颁发机构配置

本文介绍 Citrix 联合身份验证服务 (FAS) 的高级配置,以便与不受 FAS 管理控制台支持的证书颁发机构 (CA) 服务器集成。这些说明信息将采用 FAS 所提供的 PowerShell API。在执行本文中的任何说明之前,您应具有 PowerShell 基础知识。

设置用于 FAS 的多个 CA 服务器

本节介绍如何设置单个 FAS 服务器以使用多个 CA 服务器颁发证书。 这将允许对 CA 服务器进行负载平衡和故障转移。

步骤 1:查找 FAS 可找到的 CA 服务器的数量

使用 Get-FASMsCertificateAuthority cmdlet 确定 FAS 可以连接到的 CA 服务器。在以下示例中,FAS 可连接到三个 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:修改现有证书定义

Citrix 建议您使用 FAS 管理控制台而不是 PowerShell 创建角色。这样可避免在以后手动添加 SDL。在下面的示例中,将创建一个名为“default”的角色并配置访问规则:

本地化后的图片

要向证书颁发机构字段添加多个 CA,必须使用 PowerShell 配置证书的定义。(本版本中的 FAS 管理控制台不支持添加多个 CA。)

首先,需要使用证书定义名称。无法从管理控制台中确定该名称;请使用 Get-FASCertificateDefinition cmdlet。

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

等效用户界面是:

本地化后的图片

在具有证书定义名称之后,修改证书定义以具有一组而非一个 CertificateAuthorities:

本地化后的图片

FASCertificateDefinition cmdlet 现在将返回:

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 创建第二个规则(例如名为“testing”的规则)。
  • 根据“testing”规则的要求配置 ACL。
  • 使用 PowerShell 检查 ACL (Get-FasRule –name “testing”)。
  • 使用 PowerShell 将 ACL 应用到原始规则 (Set-FasRule)。
  • 删除“testing”规则,因为不再需要该规则。

预期的行为变化

在配置 FAS 服务器和多个 CA 服务器后,将在所有已配置的 CA 服务器之间分配用户证书生成任务。此外,如果配置的 CA 服务器之一发生故障,则 FAS 服务器将切换到另一个可用的 CA 服务器。

配置 Microsoft CA 以进行 TCP 访问

默认情况下,Microsoft CA 使用 DCOM 进行访问。这会导致需在实现防火墙安全功能时执行复杂的操作,因此,Microsoft 提供了一个预配项,可用于切换到静态 TCP 端口。在 Microsoft CA 中,使用开始 > 运行 > dcomcnfg.exe 打开 DCOM 配置面板,展开计算机 > 我的电脑 > DCOM 配置以 显示 CertSrv Request(CertSrv 请求)节点,然后编辑 CertSrv Request DCOM 应用程序的属性:

本地化后的图片

更改“端点”以选择静态端点,并指定 TCP 端口号(在上图中为 900)。

重新启动 Microsoft CA 并提交证书申请。如果您运行“netstat –a –n –b”,将看到 certsvr 在侦听端口 900:

本地化后的图片

无需配置 FAS 服务器(或任何其他正在使用 CA 的计算机),因为 DCOM 具有一个将通过 RPC 端口进行的协商阶段。 当客户端需要使用 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 是一个用于查询用户列表的标准 cmdlet。以上示例中包含一个 filter 参数以便只列出名称为 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 服务器,则将生成特定用户证书两次:一次在主服务器上生成,一次在故障转移服务器上生成。

以上脚本针对一个名为“default”的规则。如果您具有不同的规则名称(例如“hello”),则只需更改脚本中的 $rule 变量。

本地化后的图片

更新注册机构证书

如果正在使用多个 FAS 服务器,则可以续订 FAS 授权证书而不会影响已登录的用户。注意: 虽然也可以使用 GUI 取消授权和重新授权 FAS,但这会导致重置 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

相关信息

“联合身份验证服务”证书颁发机构配置