1.绪论
1.1Why SAML and FAS
刚接触SAML和FAS时不能理解为什么会有这种需求,为什么要把登录过程搞的这么复杂,通过AD中的user account登录不更简单方便吗?实际上,在用户环境中有许多业务系统,Citrix应用和桌面只是其中之一,每个业务系统都有自己独立的账户,登录不同的系统就要使用不同的账户信息,对于用户体验非常不友好。借助SMAL和FAS用户登录Citrix环境时就不需要手动输入AD账户了,只要使用一个账户就可以登录各种业务系统,所以借助SAML可以实现SSO。
如下图所示,user使用的是OKTA账户,登录验证也是由OKTA处理,验证完成后将结果反馈给业务系统,比如Citrix ADC,然后就可以访问CVAD资源。用户也可以先访问ADC,ADC会重定向到OKTA做authentication,之后再返回到ADC。除了OKTA之外,用户也可以利用Azure AD、用户自己开发的认证平台等完成认证。

1.2 SAML and FAS
SAML: Security Assertion Markup Language,SAML是一种XML语言,翻译过来是安全断言标记语言,用于用户信息认证,与SAML相关的概念:
- IDP:Identity Provider 管理并认证用户账户,比如OKTA、Azure AD、用户自己开发的认证平台。
- SP:Service provider服务提供者,就是用户需要的业务系统,比如Citrix Gateway。
在Citrix环境中Gateway作为SP,当用户登录Gateway时,Gateway会把这个请求重定向到IDP去做认证。也可以用户先登录OKTA再跳转到Gateway。这两种分别叫SP-initiated SSO和IDP-initiated SSO:
- SP-initiated SSO:用户先访问SP(Gateway),然后再通过OKTA去认证,在这个demo中我们使用这种方式。

- IDP-initiated SSO: 用户先访问IDP (OKTA)做认证,认证通过之后再跳转去SP。

既然通过SAML这种方式登录VDA时用户不需要输入AD user account信息,那么用户是怎么完成windows登录过程呢?前面怎么验证VDA不关心,但是登录VDA时是绕不开Windows登录的过程。Windows登录支持以下两种方式:
- username/password
- Smart Card
Smart Card中存储了证书代表用户的个人信息,在登录时Windows读取了证书内容从而完成登录,这个是微软范畴内支持的方式。在SAML的场景中我们就是借助于类似Smart Card的方式来完成了Windows登录。这里我们就引入了Citrix FAS,FAS server去CA请求一个证书代表用户,用户登录VDA时VDA去FAS server请求该证书从而完成VDA的登录过程,Windows AD会把这个行为看做Smart Card的登录。
上面提到了FAS server去CA请求一个代表用户的证书,这个用户是SAML用户在AD中对应的账户,我们称为shadow account。管理员在搭建SAML环境时需要在AD中给SAML用户创建shadow account,可以手动逐个创建,也可以通过工具批量创建。Shadow account的UPN要和ADC传过来的UPN完全相同,他们是一一映射的关系。
SAML和FAS是两个独立的模块,SAML用于第三方账户的认证,FAS用于获取用户的证书用来登录VDA,两者相互配合完成VDA的登录,即使SF没有开启FAS,也不会影响用户通过SAML认证来进行资源枚举。在不开启FAS时,资源可以枚举并且ICA file可以被下载,但是在登录VDA的时候会提示输入用户名密码。理解了SAML和FAS的关系有助于narrow down问题排查范畴。
1.3通信端口

1.4整体架构

2.FAS Server安装
FAS server推荐安装在单独的Server上,其实其他Citrix模块都建议安装在单独的Server上,方便排错。
1.挂载Citrix Virtual App and Desktop 安装iso,选择”Federated Authentication Service”

2.同意许可信息

3.保持默认点击Next

4.防火墙策略保持默认,点击Next

5.点击Install开始安装,直至安装结束即可

6.安装完成

3.设置第一台FAS Server
下面这个表中总结了配置FAS是需要的权限:

3.1Deploy certificate templates
以管理员权限运行Citrix Federated Authentication Service ,如果不是fas server的本地管理员,运行时会提示以下错误:

1.点击Deploy certifiate templates右边的Deploy,目的是将三个证书模板添加到所有的CA server

2.点击OK将证书模板发布到AD

3.成功之后在CA的Certification Authority –>右键点击Certificate Template >Manage可以看到添加的证书模板。

如果当前用户在AD中的权限不够,那么会提示access dinied错误:

解决方法是将FAS server的三个template交给域管理员:C:\Program Files\Citrix\Federated Authentication Service\CertificateTemplates

在AD上template所在目录下运行Powershell命令,之后这三个template会添加到所有的CA server上。我在lab测试在任何一台CA上运行以上powershell命令,域中所有的CA中都会导入模板。
$template = [System.IO.File]::ReadAllBytes("$Pwd\Citrix_RegistrationAuthority.certificatetemplate")
$CertEnrol = New-Object -ComObject X509Enrollment.CX509EnrollmentPolicyWebService
$CertEnrol.InitializeImport($template)
$comtemplate = $CertEnrol.GetTemplates().ItemByIndex(0)
$writabletemplate = New-Object -ComObject X509Enrollment.CX509CertificateTemplateADWritable
$writabletemplate.Initialize($comtemplate)
$writabletemplate.Commit(1, $NULL)
$template = [System.IO.File]::ReadAllBytes("$Pwd\Citrix_RegistrationAuthority_ManualAuthorization.certificatetemplate")
$CertEnrol = New-Object -ComObject X509Enrollment.CX509EnrollmentPolicyWebService
$CertEnrol.InitializeImport($template)
$comtemplate = $CertEnrol.GetTemplates().ItemByIndex(0)
$writabletemplate = New-Object -ComObject X509Enrollment.CX509CertificateTemplateADWritable
$writabletemplate.Initialize($comtemplate)
$writabletemplate.Commit(1, $NULL)
$template = [System.IO.File]::ReadAllBytes("$Pwd\Citrix_SmartcardLogon.certificatetemplate")
$CertEnrol = New-Object -ComObject X509Enrollment.CX509EnrollmentPolicyWebService
$CertEnrol.InitializeImport($template)
$comtemplate = $CertEnrol.GetTemplates().ItemByIndex(0)
$writabletemplate = New-Object -ComObject X509Enrollment.CX509CertificateTemplateADWritable
$writabletemplate.Initialize($comtemplate)
$writabletemplate.Commit(1, $NULL)
3.2 Set up a certificate authority
1.点击Set up a certificate authority右边的Publish,这一步的目的是将上面三个证书模板发布,只有发布之后的证书模板才能使用

2.如果环境中有多个CA,先选择第一台,点击OK进行publish。

然后继续点击Publish按钮,此时选择ca02,点击OK进行publish

3.Publish完成

成功之后在Certification Authority –>Certificate Template可以看到对应的template:

如果遇到下面的错误:”Access is denied …”,是当前user account在CA server上的权限不够。解决方法:
https://support.citrix.com/article/CTX310627
或者换一个在CA上有权限的user account

FAS server是如何知道当前域中的CA server呢?根据我在lab的网络包,FAS server是通过LDAP查询到当前域中CA的信息。
Wireshark 网络包:10.110.25.228 是AD,10.110.25.232是FAS server
1431 12:43:50.329718 10.110.25.232 10.110.25.228 LDAP 527 SASL GSS-API Integrity: searchRequest(13) "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=qicai,DC=lab" wholeSubtree
1445 12:43:50.333268 10.110.25.228 10.110.25.232 LDAP 2938 SASL GSS-API Integrity: searchResEntry(14) "CN=qicai-CA01-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=qicai,DC=lab" searchResEntry(14) "CN=qicai-CA02-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=qicai,DC=lab" searchResDone(14) success [4 results]
在ADSI Edit中可以查看到域中的CA。

3.3 Authorize this service
1.点击Authorize this service右边的Authorize

2.选中CA,如果有多个CA只要在一台CA上做即可。
https://docs.citrix.com/en-us/federated-authentication-service/2203-ltsr/config-manage/ca-configuration.html
You do not have to perform the Authorize this service step for every CA, because the authorization certificate configured in this step can be used at any of your CAs.

3.点击CA的Console,在Pending Requests下面会产生一个证书的请求,然后点击Issue

4.回到FAS,点击刷新

如果遇到以下报错,去CA server Certification Authority > Failed Requests中可以看到报错信息,或者查看CA的application event log



解决方法是:修改Citrix_RegistrationAuthority和Citrix_RegistrationAuthority_ManualAuthorization 的template security,添加FAS server给与Read和Enroll权限。同一个域中CA会自动同步这个更改。

3.4Create a rule
1.点击Create a rule右边的Create的按钮

2.建议使用”default” rule,SF默认使用这个名称。如果自定义rule的名称,那么SF要更改对应的名称。如果名称不匹配,则无法启动桌面。解决方法是:https://support.citrix.com/article/CTX229160

3.勾选Citrix_SmartcardLogon (recommended)和Filter templates (recommended)

4.选择CA,这里有两个都选上。

5.保持默认

6.点击”Manage StoreFront access permissions

7.添加SF计算机账号

将Domain Computer移除,否则会报“无法启动桌面错误”,因为domain computers权限是deny

8.保持默认,点击Next

9.点击Create完成Rule创建

10.配置完成

4.设置第二台FAS server
以管理员权限运行Citrix FAS Administraton Console,此时Deploy certificate templates和Set up a certificate authority显示为配置完成状态。继续重复2.2.3和2.2.4步骤即可。
5.设置SF
1.设置CallBack URL :Manage Citrix Gateways –> Edit –> Authentication Settings

Note: SF能够解析ADC的URL并且SF要能访问ADC的443端口
2.Manage Authentication Methods > Pass-through from Citrix Gateway > Configure Delegated Authentication

3.在SF上以管理员权限运行Powershell开启FAS,将fastest替换成环境中真实的store名称
Enable FAS
asnp citrix*
$StoreVirtualPath = "/Citrix/fastest"
$store = Get-STFStoreService -VirtualPath $StoreVirtualPath
$auth = Get-STFAuthenticationService -StoreService $store
Set-STFClaimsFactoryNames -AuthenticationService $auth -ClaimsFactoryName "FASClaimsFactory"
Set-STFStoreLaunchOptions -StoreService $store -VdaLogonDataProvider "FASLogonDataProvider"
Disable FAS
asnp citrix*
$StoreVirtualPath = "/Citrix/fastest"
$store = Get-STFStoreService -VirtualPath $StoreVirtualPath
$auth = Get-STFAuthenticationService -StoreService $store
Set-STFClaimsFactoryNames -AuthenticationService $auth -ClaimsFactoryName "standardClaimsFactory"
Set-STFStoreLaunchOptions -StoreService $store -VdaLogonDataProvider ""
Check FAS status
$store = Get-STFStoreService -VirtualPath /Citrix/fastest
Get-STFStoreLaunchOptions -StoreService $store
6.设置DDC
在DDC上以管理员权限运行Powershell输入以下命令
asnp Citrix*
Set-BrokerSite -TrustRequestsSentToTheXmlServicePort $true
7.设置AD
7.1 Shadow Account
在AD中要为每个联合认证的用户创建一个用户账户,UPN要和SAML传过来的相同(邮箱),这个账户即为shadow account。我理解shadow account的作用:一是用户登录SF时,SF要去AD中查询用户是否存在;二是登录VDA时CA为这个用户签发证书。

根据SAML的登录原理,这个shadow account的密码可以任意设置,因为登录过程中用不到密码。虽然SAML + FAS登录时不需要使用密码,但是shadow account的密码过期之后则不能登录SF,报”cannot complete your request”错误。所以在创建shadow account时勾选“密码永不过期”选项。
1.如果IDP返回的UPN后缀和AD中不同,可以在AD上创建一个相同的UPN后缀:Server Manager > Tool > Active Director Domains and Trusts –>Properties –>UPN Suffixes

填入UPN 后缀

2.这样在创建shadow account时可以选择对应的UPN后缀

7.2组策略
通过组策略将FAS server的FQDN下发给以下三个模块:
- SF
- VDA
- FAS Server
FAS server C:\Program Files\Citrix\Federated Authentication Service\PolicyDefinitions\
- CitrixFederatedAuthenticationService.admx
- CitrixBase.admx
将以上admx拷贝到AD的C:\Windows\PolicyDefinitions目录。
FAS server C:\Program Files\Citrix\Federated Authentication Service\PolicyDefinitions\en-US\
- CitrixFederatedAuthenticationService.adml
- CitrixBase.adml
将以上adml拷贝到AD的C:\Windows\PolicyDefinitions\en-US目录。
策略路径:Computer Configuration > Policies > Administrative Templates > Citrix Components > Authentication > Federated Authentication Service

策略生效之后在VDA上对应的注册表键值:
HKLM\Software\Policies\Citrix\Authentication\UserCredentialService\Addresses

8.设置VDA
Windows VDA只需要拿的步骤2.6.2配置的GPO策略即可,无其他配置。因为LVDA拿不到AD GPO,所以需要手动设置。
1.设置FAS server地址
sudo /opt/Citrix/VDA/bin/ctxreg create -k "HKLM\Software\Citrix\VirtualDesktopAgent\Authentication\UserCredentialService" -t "REG_SZ" -v "Addresses" -d "fas01.citrix.com;fas02.citrix.com" --force
2.安装CA root证书,将CA root证书转成pem格式,然后拷贝到/etc/pki/CA/certs目录,如果有中间证书也一并拷贝。
sudo openssl x509 -inform der -in root.cer -out root.pem
sudo cp root.pem /etc/pki/CA/certs/
3.配置FAS
sudo /opt/Citrix/VDA/sbin/ctxfascfg.sh
9.Demo展示
1.访问Netscaler https://myaad.qicai.lab
2.自动重定向到Azure AD做认证,输入Azure用户名密码

3.AAD认证成功返回到Netscaler:

10.进阶配置
10.1CA HA以及证书
在章节2.2.4第4步中FAS server可以配置多个CA,当其中一个CA失败时FAS会选取其中一个可用的CA为user申请证书。

用户的证书周期是7天,这里的validity period是可以更改的,比如2周,直接修改即可。

FAS服务器Authority证书有效期是2年,当FAS server的证书过期之后需要手动申请,否则会影响用户登录,操作步骤如2.2.3.

这里的validity period也可以修改,比如修改成5年。但是要注意以下两点:
1.windows CA的以下注册表限制了CA签发的证书最长有效期,默认值是两年,所以即使把证书模板的有效期改成5年,签发的证书有效期还是2年。所以需要把下面的注册表值改大:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\qicai-CA01-CA\ValidityPeriodUnits
2.Windows CA不能签发比自己根证书有效期长的证书,所以即使上面的值调成了5年,但是CA签发的证书有可能不到5年。
参考:
FAS server把证书存到哪里了呢?
无论是CA颁发给FAS server的计算机证书还是用户的证书,都保存在FAS server上嵌入式数据库中。所以即使FAS联系不到CA,只要FAS server上有用户的证书并且证书没有过期,ICA session还是能正常建立。
https://docs.citrix.com/en-us/federated-authentication-service/2203-ltsr/config-manage/private-key-protection.html
FAS does not use the Microsoft certificate store on the FAS server to store its certificates. It uses an embedded database.
可以通过powershell查看FAS server的计算机证书,包括ExpiryDate和Status
PS C:\Users\administrator.QICAI> Get-FasAuthorizationCertificate -FullCertInfo -address fas02.qicai.lab
ThumbPrint : 0347A44B05CD0A3A6D6CB85858BF3856349C8DA1
ExpiryDate : 4/24/2025 1:41:26 PM
Certificate : -----BEGIN CERTIFICATE-----
MIIFxjCCBK6gAwIBAgITPQAAABbvQtVHlcqZmwAAAAAAFjANBgkqhkiG9w0BAQsFADBEMRMwEQYK
CZImiZPyLGQBGRYDbGFiMRUwEwYKCZImiZPyLGQBGRYFcWljYWkxFjAUBgNVBAMTDXFpY2FpLUNB
MDEtQ0EwHhcNMjMwNDI1MDU0MTI2WhcNMjUwNDI0MDU0MTI2WjBQMRMwEQYKCZImiZPyLGQBGRYD
bGFiMRUwEwYKCZImiZPyLGQBGRYFcWljYWkxEjAQBgNVBAMTCUNvbXB1dGVyczEOMAwGA1UEAxMF
RkFTMDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGXwWbI9Zwyf2XHd7xezr9d9kS
xj6UzHq7ZxlwISm0jn/eMk/8irPAQV+E34S4tshuuypXoo1h55rxR2vlkciFT4OIcDObPk9msM2f
C0YO2UU1RCs99heDua9kU5LSwnHKynP7owXDqGb8K8AOHhOPP40viUUl5TC12WxHqboLd4vAyyzv
DAG21WJqrfZbqJmJ8QInfSF3OKuz4EMfLShviJP+4YFOLW5baN+P80xljF01RTIc9Z1gJhYd2ytM
/kmQ/us1Hnbwj/0rqSxMv5afVy6blcUgrxll2x37R1T7RkGWDlMIEaxTEowzT5D/kU1mrpQUPhv3
oUKvaP9CcUlpAgMBAAGjggKjMIICnzAdBgNVHQ4EFgQUaXgSRFsJ+wClHbJ2lB0W/xZNDfQwHwYD
VR0jBBgwFoAUHaClwxtiOL8Tj94KeiF0s3AVkPMwgcYGA1UdHwSBvjCBuzCBuKCBtaCBsoaBr2xk
YXA6Ly8vQ049cWljYWktQ0EwMS1DQSxDTj1jYTAxLENOPUNEUCxDTj1QdWJsaWMlMjBLZXklMjBT
ZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPXFpY2FpLERDPWxhYj9jZXJ0
aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9p
bnQwgb0GCCsGAQUFBwEBBIGwMIGtMIGqBggrBgEFBQcwAoaBnWxkYXA6Ly8vQ049cWljYWktQ0Ew
MS1DQSxDTj1BSUEsQ049UHVibGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29u
ZmlndXJhdGlvbixEQz1xaWNhaSxEQz1sYWI/Y0FDZXJ0aWZpY2F0ZT9iYXNlP29iamVjdENsYXNz
PWNlcnRpZmljYXRpb25BdXRob3JpdHkwDgYDVR0PAQH/BAQDAgbAMBUGA1UdJQQOMAwGCisGAQQB
gjcUAgEwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIh53Sd+SMUoS1mRGCss99guKnGoEpgeTa
fIGe9ikCAQICAQIwHQYJKwYBBAGCNxUKBBAwDjAMBgorBgEEAYI3FAIBME8GCSsGAQQBgjcZAgRC
MECgPgYKKwYBBAGCNxkCAaAwBC5TLTEtNS0yMS0xNDE2ODk2MjU1LTIzOTU5ODkxMjUtMTc0NzI1
MDE4My0xMTI1MA0GCSqGSIb3DQEBCwUAA4IBAQBazzepwv8IZWrKf9uGJChg1tpZYqr6sW/G+tWk
rXCMXo9D3PL/64BfO1WVtaD1E55YzIB7QT51LoSSl2moOPlydPEmsqyjRLTtalZKsRJzL8hclMdp
JsUuGa2OyA2Ilf5qr2itQ50hi4jjTd5L+2YBqbM4WhW5714I4x4HId6H86e87FXASkVCvZ9IZ4AX
PJ1UsnGaWgHhKEW21Xh6GA7fwgiaWLT9/IpllaaE47GzKpEix8s4dEJyZCp+pPFe01Xocp3g3wk2
xLveIcn9RvzfuMq4IUTLBGzaQ6Ji/xcaJuSz2f6sWhOBaDboN6UCdw+174HfkhwVjLODbBV/Ux3v
-----END CERTIFICATE-----
PrivateKeyIdentifier : 91c81ac3-85a0-43c2-852c-61969eb288bf
PrivateKeyProvider : Microsoft Software Key Storage Provider
PrivateKeyIsCng : True
Id : d01f3fe5-e6c7-4eab-beac-ec08a6354828
Address : ca01.qicai.lab\qicai-CA01-CA
TrustArea : ef918f40-8ceb-480f-95e8-28b14208aea1
CertificateRequest :
Status : Ok
查看FAS server上的user证书:
PS C:\Users\administrator.QICAI> Get-FasUserCertificate -address fas02.qicai.lab
ThumbPrint : A8A943F32914DFDDDA439B5032737E2743DB53B0
UserPrincipalName : apjuser1@qicai.lab
Role : Default
CertificateDefinition : Default_Definition
SecurityContext :
ExpiryDate : 5/10/2023 2:21:13 PM
Certificate : -----BEGIN CERTIFICATE-----
MIIGDDCCBPSgAwIBAgITFAAAAAVk/bT5bKvT3wAAAAAABTANBgkqhkiG9w0BAQsFADBEMRMwEQYK
CZImiZPyLGQBGRYDbGFiMRUwEwYKCZImiZPyLGQBGRYFcWljYWkxFjAUBgNVBAMTDXFpY2FpLUNB
MDItQ0EwHhcNMjMwNTAzMDYyMTEzWhcNMjMwNTEwMDYyMTEzWjBSMRMwEQYKCZImiZPyLGQBGRYD
bGFiMRUwEwYKCZImiZPyLGQBGRYFcWljYWkxETAPBgNVBAsTCHNhbWx1c2VyMREwDwYDVQQDEwhh
cGp1c2VyMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKzB62R7Y4+2HseXVxc785po
mSjdKafQpsqU1LSyDyL0q1l6A3drsXKtZGcovOtyF4kCvXrBAepnTi2kLRJvocbm2MLjt/t6Xdb1
2QK4ShH47GIwjuhjNZ+ypExWLhRXHOLl+nMvQbbcKV+UiaKraTGEQa0st7086/37GMaWJtY6+f9N
nYPZH182xzd2AUG/siIxAaN1Uh7+CetH/eewwWmEEpJGxSvbpYoPLOWnOQ5nVfRxGuQ1E/gCASoC
I8YcVcXx/i8YRRi0CgRRT9p+hiSmPbj0PXNOa8E9Xs7TTLKt9IxPrRsHdABTq4HINXOxh7dS4Bgg
p1AxigdpRb5Dxp0CAwEAAaOCAucwggLjMB0GA1UdDgQWBBTtF3bQ5R7K9iHhS37KNe/My2C+9TAf
BgNVHSMEGDAWgBRAWlR4pdK0+B/1PJwsnjE5f2LbDjCBxgYDVR0fBIG+MIG7MIG4oIG1oIGyhoGv
bGRhcDovLy9DTj1xaWNhaS1DQTAyLUNBLENOPWNhMDIsQ049Q0RQLENOPVB1YmxpYyUyMEtleSUy
MFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9cWljYWksREM9bGFiP2Nl
cnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Q
b2ludDCBvQYIKwYBBQUHAQEEgbAwga0wgaoGCCsGAQUFBzAChoGdbGRhcDovLy9DTj1xaWNhaS1D
QTAyLUNBLENOPUFJQSxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1D
b25maWd1cmF0aW9uLERDPXFpY2FpLERDPWxhYj9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xh
c3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTAOBgNVHQ8BAf8EBAMCBaAwLQYDVR0RBCYwJKAiBgor
BgEEAYI3FAIDoBQMEmFwanVzZXIxQHFpY2FpLmxhYjA8BgkrBgEEAYI3FQcELzAtBiUrBgEEAYI3
FQiHndJ35IxShLWZEYKyz32C4qcagSmrhA6BudkQAgEDAgEBMB8GA1UdJQQYMBYGCCsGAQUFBwMC
BgorBgEEAYI3FAICMCkGCSsGAQQBgjcVCgQcMBowCgYIKwYBBQUHAwIwDAYKKwYBBAGCNxQCAjBP
BgkrBgEEAYI3GQIEQjBAoD4GCisGAQQBgjcZAgGgMAQuUy0xLTUtMjEtMTQxNjg5NjI1NS0yMzk1
OTg5MTI1LTE3NDcyNTAxODMtMTEyNzANBgkqhkiG9w0BAQsFAAOCAQEArsk+aiTMGJViEkySRh97
vO3l3t3z47d6F+vf/Rge5GZOWwa24ZiqGMaWjGRxsXstlLiSD5VpVGNpe9gCuU0dGIC0oktu0OxF
5+2Hx5SriftjTPQfr99JdwXG9uBXttiRg0iz18h3olqR0wGs0CokaSCk1Bm/B7dPzm7x1ukt5e6f
he8DtvMHbwDo0DDY67nuAXVIhMK0z4LoYqummxqH/iPNbjOU1uiJhcajEmb8SGG4VQSghFUkMytl
BNHLM5ocUdl1NJuBmcPiwgdQMa58zotQb2aFhOYiQ5xMXCWVATXSxAuYYQ4sGhRbeHOEIcW11s1M
XH4/oJyw7q6UKjb7Dw==
-----END CERTIFICATE-----
10.2 FAS HA
当用户首次登录SF时,FAS 根据一种hash算法决定这个user的Primary FAS server以及Failover FAS server,一旦分配之后,这个设置是永久的。比如分配给user的Primary server是fas02,Failover server是fas01,以后当user登录SF时首先会联系fas02,若fas02离线才会联系fas01,超时时间是5s。这样做的好处是,能最大限度的让用户能够联系到拥有这个用户证书的FAS server上,减少登录时长,降低CA的负载。通过以下powershell命令可以查看user分配的FAS server。
PS C:\Users\administrator.QICAI> Get-FasServerForUser -UserPrincipalNames apjuser1@qicai.lab
User Server Failover
---- ------ --------
apjuser1@qicai.lab fas02.qicai.lab fas01.qicai.lab
继续上面的场景,如果user登录SF之前fas02已经离线,那么SF会联系FAS01,user可以正常登录sf启动桌面。如果user登录SF时FAS02状态是正常的,但是在user点击desktop icon之前FAS02又突然离线了,那么桌面启动会失败。除非FAS02恢复正常或者重新登录SF。
https://support.citrix.com/article/CTX225721