支持Azure密钥库
Citrix ADC设备与外部hsm (SafeNet和Thales)集成,用于内部部署。对于云部署,ADC设备与Azure密钥库集成。设备将其私钥存储在Key Vault中,以便于在公共云域中管理和保护私钥。您不再需要在跨多个数据中心和云提供商部署的ADC设备的不同位置存储和管理密钥。
将ADC与Azure Key Vault Premium定价层(提供HSM支持的密钥)一起使用,可提供FIPS 140-2 2级兼容性。
Azure密钥库是微软提供的标准产品。有关Azure密钥库的详细信息,请参阅Microsoft Azure文档。
注意:
Citrix ADC与Azure密钥库的集成由TLS 1.3协议支持。
体系结构概述
Azure密钥库是一种在Azure云中安全地存储秘密的服务。通过将密钥存储在Azure密钥库中,您可以减少密钥被盗的可能性。密钥库设置好后,您可以将密钥存储在其中。在ADC设备上配置虚拟服务器,以执行key Vault中的私钥操作。ADC设备为每次SSL握手访问密钥。
下图说明了身份验证后从Azure Active Directory获取访问令牌的过程。此令牌用于使用私钥进行加密操作的REST API调用。
下图显示了典型的RSA握手。使用公钥加密的客户端密钥交换(CKE)消息使用存储在密钥库中的私钥解密。
在ECDHE握手中,Citrix ADC设备发送的服务器密钥交换(SKE)消息使用存储在密钥库中的私钥进行签名。
先决条件
您必须有Azure订阅。
(可选)在Linux机器上安装Azure CLI。有关说明,请参阅Azure文档https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-apt?view=azure-cli-latest。
在配置ADC设备上的实体之前,先在Azure门户上完成配置。
配置ADC Azure密钥库集成
首先在Azure门户上执行配置,然后在ADC设备上执行配置。
在Azure门户上执行以下步骤
下面的流程图显示了Azure门户上所需配置的高级流程。
- 在Azure Active Directory中创建应用程序和服务主体。
- 在资源组中创建密钥库。
- 配置应用程序和服务主体以对密钥库执行签名和解密操作。
使用以下方法之一在密钥库中创建密钥:
- 通过导入密钥文件。
- 通过生成证书。
有关配置上述步骤的命令的信息,请参阅Azure文档https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals。
在ADC设备上执行以下步骤
下面的流程图显示了ADC设备所需的高级配置流程。
- 配置DNS服务器
- 配置根证书以验证Azure提供的证书。
- 创建Azure应用程序。
- 创建Azure密钥库实体。
- 创建HSM密钥。
- 创建证书-密钥对。
- 将证书密钥对绑定到虚拟服务器。
配置DNS服务器
需要一个DNS服务器来解析密钥库主机和Azure Active Directory端点的名称。
通过命令行方式配置DNS服务器
在命令提示符下,输入:
添加dns nameserver
例子:
添加DNS名称服务器192.0.2.150
通过GUI界面配置DNS服务器
导航到流量管理> DNS >名称服务器。点击添加。
- 请输入以下参数:
- IP地址—外部名称服务器的IP地址,如果选择“Local”,则为本地DNS服务器的IP地址。
- 协议-名称服务器使用的协议。如果名称服务器是设备上配置的DNS虚拟服务器,则UDP_TCP无效。
- 点击创建。
添加并绑定根证书
下载Azure Key Vault提供的证书的根证书https:// < vault_name > .vault.azure.net
和Azure Active Directory (AAD)https://login.microsoftonline.com并将其加载到ADC设备上。需要这些证书来验证Azure密钥库和AAD提供的证书。在CA证书组中绑定一个或多个证书ns_callout_certs
。
使用CLI方式添加根证书
在命令提示符下,输入:
添加ssl certkey -cert 绑定ssl caCertGroup
例子:下面以Azure密钥库和AAD提供的根证书为例进行说明。
添加ssl certKey rootcert -cert RootCyberTrustRoot。crt bind ssl cacertGroup ns_callout_certs rootcert
使用GUI界面添加根证书
导航到流量管理> SSL >证书> CA证书。
- 请输入以下参数:
- 证书密钥对名称
- 证书文件名
点击安装。
导航到流量管理> SSL > CA证书组。
选择ns_callout_certs并点击显示绑定。
点击绑定。
选择之前创建的CA证书,单击选择。
- 点击绑定,然后点击关闭。
配置Azure应用程序
Azure应用程序实体包含对Azure Active Directory进行身份验证和获取访问令牌所需的凭据。也就是说,要获得对密钥库资源和api的授权访问,请在ADC设备上添加Azure应用程序ID、秘密(密码)和租户ID。
通过CLI配置Azure Application实体时,必须输入该密码。如果使用GUI,则Azure应用程序实体包含对Azure Active Directory进行身份验证并获取访问令牌所需的凭据。
通过使用CLI配置Azure应用程序
从13.0-61版开始。. x中增加了一个参数vaultResource添加azure应用程序
命令,在向应用程序授予访问令牌之前获取资源组的域。由于不同地区的域名可能不同,添加此参数。例如,域可能是vault.azure.net
或vault.usgov.net
。
在命令提示符下,输入:
添加azure应用 -clientID -clientSecret -tenantID -vaultResource [-tokenEndpoint ]显示azure应用
例子:
添加azure应用程序app10 -clientiD 12345t23aaa5 -clientsecret csHzOoEzmuY= -vaultResource example.vault.azure.net -tenantID 33583ee9ca5b完成> sh azure应用程序app10 1)名称:app10 ClientID: 12345t23aaa5 TokenEndpoint: "https://login.microsoftonline.com/33583ee9ca5b/" TenantID: 33583ee9ca5b VaultResource: example.vault.azure.net完成
通过使用GUI配置Azure应用程序
导航到流量管理> SSL > Azure >应用程序。
在详细信息窗格中,单击添加。
请输入以下参数:
- 名称——Citrix ADC设备上应用程序对象的名称。
- 客户端ID -在Azure Active Directory中使用Azure CLI或Azure门户(GUI)创建应用程序时生成的应用程序ID。
- 客户端密码-在Azure Active Directory中配置的应用程序的密码。密码在Azure CLI中指定或在Azure门户(GUI)中生成。
- 租户ID -在Azure Active directory中创建应用程序的目录ID。
- Vault Resource -授予访问令牌的Vault资源。例子
vault.azure.net
。 - 令牌结束点-可以从其中获得访问令牌的URL。如果不指定令牌结束点,则缺省值为
https://login.microsoftonline.com/ <承租者id >
。
配置Azure密钥库
在ADC设备上创建Azure密钥库对象。
使用命令行方式配置Azure密钥库
在命令提示符下,输入:
add azure keyVault -azureVaultName -azureApplication show azure keyVault
例子:
add azure keyvault kv1 -azureapplication app10 -azurevaultName pctest.vault.azure.net > sh azure keyvault 1)名称:kv1 AzureVaultName: pctest.vault.azure.net AzureApplication: app10状态:"Access token succeeded " Done
下表列出了Azure密钥库的状态可以采用的不同值,以及关于每种状态的简要说明。
状态 | 描述 |
---|---|
创建 |
密钥库对象的初始状态。没有尝试身份验证。 |
无法到达令牌结束点 |
说明未配置DNS服务器、颁发者证书未绑定CA证书组或网络问题。 |
授权失败 |
不正确的应用程序凭证。 |
令牌解析错误 |
来自Azure Active Directory的响应不是预期的格式。 |
获得的访问令牌 |
Azure Active Directory认证成功。 |
通过使用GUI配置Azure密钥库
导航到流量管理> SSL > Azure >密钥库。
请输入以下参数:
- 名称-密钥库的名称。
- Azure密钥库名称-使用带有域名的Azure CLI或Azure门户(GUI)在Azure云中配置的密钥库的名称。
- Azure应用程序名称——在ADC设备上创建的Azure应用程序对象的名称。具有此名称的Azure应用程序对象用于Azure Active Directory的身份验证。
添加HSM键
将您的私钥存储在HSM中提供了FIPS 140-2级遵从性。
使用CLI方式添加HSM密钥
在命令提示符下,输入:
add ssl hsmKey [-hsmType ] [-key | -serialNum ] {-password} [-keystore ]
例子:
add ssl hsmKey h1 -keystore kv1 -key san15key -hsmType KEYVAULT > sh ssl hsmKey h1 HSM密钥名称:h1类型:KEYVAULT密钥:san15key密钥存储:kv1状态:" Created " Done
下表列出了HSM键的状态可以采用的不同值,并简要介绍了每种状态。
状态 | 描述 |
---|---|
创建 | HSM密钥被添加到ADC设备上。尚未尝试键操作。 |
访问令牌不可用 | 试图进行键操作时,访问令牌不可用。 |
未经授权的 | 已配置的Azure应用程序没有执行密钥操作的权限。 |
不存在 | 该密钥在Azure密钥库中不存在。 |
遥不可及的 | 网络上无法访问密钥库主机。 |
下调 | 由于在键操作期间的阈值错误,HSM键在ADC设备上被标记为DOWN。 |
关键操作成功 | 从密钥库接收到密钥操作的成功响应。 |
关键操作失败 | 从密钥库收到的密钥操作失败响应。 |
键操作受限 | 密钥操作请求由密钥库进行限制。 |
通过GUI添加HSM键
导航到流量管理> SSL > HSM。
输入以下参数的值。
- HSM密钥名称-密钥的名称。
- HSM type - HSM的类型。
- 密钥存储-密钥存储对象的名称,表示存储密钥的HSM。例如,密钥库对象或Azure密钥库认证对象的名称。仅适用于
KEYVAULT
HSM类型。
点击添加
添加证书密钥对
使用前面创建的HSM密钥添加证书-密钥对。
使用CLI方式添加证书-密钥对
在命令提示符下,输入:
add ssl certKey (-cert [-password]) -hsmKey ] show ssl certKey
例子:
添加ssl certKey serverrsa_2048 -cert /nsconfig/ssl/san_certs/san15。pem -hsmKey h1 > sh ssl certkey serverrsa_2048名称:serverrsa_2048状态:有效,截止日期:9483版本:3序列号:F5CFF9EF1E246022签名算法:sha256WithRSAEncryption颁发者:C=in,O=citrix,CN=ca有效期不早:Mar 20 05:42:57 2015 GMT不晚:Mar 12 05:42:57 2045 GMT证书类型:"服务器证书"主题:C=in,O=citrix公钥算法:rsaEncryption公钥大小:2048 Ocsp响应状态:NONE Done
使用GUI添加证书-密钥对
导航到流量管理> SSL >安装证书(HSM)。
请输入以下参数:
- 证书密钥对名称
- 证书文件名
- HSM关键
点击安装。
将证书密钥对绑定到虚拟服务器
用于处理SSL事务的证书必须绑定到接收SSL数据的虚拟服务器。
使用命令行绑定SSL证书-密钥对
在命令提示符下,输入:
绑定ssl vserver -certkeyName < certificatekeypairname >显示ssl vserver
例子:
bind ssl vserver v1 -certkeyName serverrsa_2048 sh ssl vserver v1 ssl高级配置:DH: DISABLED DH私钥指数大小限制:DISABLED Ephemeral RSA: ENABLED刷新计数:0会话重用:ENABLED超时:120秒Cipher重定向:DISABLED ClearText Port: 0客户端认证:DISABLED ssl重定向:DISABLED非FIPS加密:DISABLED SNI: DISABLED OCSP Stapling: DISABLED HSTS: DISABLED HSTS inclesubdomains: NO HSTS Max-Age: 0 HSTS Preload: NO SSLv3:ENABLED TLSv1.0: ENABLED TLSv1.1: ENABLED TLSv1.2: ENABLED TLSv1.3: DISABLED Push Encryption Trigger: Always Send Close-Notify: YES Strict sign - digest Check: DISABLED Zero RTT Early Data: DISABLED DHE Key Exchange With PSK: NO ticket Per Authentication Context: 1 ECC Curve: P_256, P_384, P_224, P_521 1) CertKey Name: serverrsa_2048 Server Certificate 1) Cipher Name: DEFAULT Description:默认密码列表,加密强度>= 128bit Done
使用GUI将SSL证书-密钥对绑定到虚拟服务器
导航到流量管理>负载均衡>虚拟服务器并打开SSL虚拟服务器。单击Certificate部分内的。
单击箭头选择证书密钥对。
从列表中选择证书-密钥对。
将证书密钥对绑定到虚拟服务器。
限制
- 对Azure密钥库进行密钥操作的并发调用的数量是有限的。ADC设备的性能取决于密钥库的限制。有关更多信息,请参阅:Microsoft Azure密钥库文档。
- 不支持EC键。
- 不支持EDT和DTLS协议。
- 不支持带有英特尔Coleto SSL芯片的ADC设备。
- 不支持集群分区和管理分区。
- 在将Azure应用程序实体、Azure密钥库对象和HSM证书密钥对添加到ADC设备后,无法更新它们。
- 不支持带有HSM密钥的证书包。
- 如果HSM密钥和证书不匹配,则不会出现错误。添加证书-密钥对时,请确保HSM密钥和证书匹配。
- 不能将HSM密钥绑定到DTLS虚拟服务器。
- 不能使用使用HSM密钥创建的证书-密钥对对OCSP请求进行签名。
- 如果证书密钥对是使用HSM密钥创建的,则不能将证书密钥对绑定到SSL服务。
常见问题解答
当与Azure密钥库集成时,私钥是否存储在ADC设备内存中?
不,私钥不存储在ADC设备内存中。对于每个SSL事务,设备向Key Vault发送一个请求。
集成FIPS 140-2是否符合2级标准?
是的,集成解决方案提供FIPS 140-2 Level 2支持。
支持哪些键类型?
只支持RSA密钥类型。
支持什么密钥大小?
RSA密钥支持1024位、2048位和4096位。
支持哪些密码?
支持ADC设备上支持的所有密码,包括具有ECDHE和SHA256的TLSv1.3密码。
是否记录事务?
ADC设备记录它使用密钥库进行的每个事务。详细信息,如时间、保险库IP地址、端口、连接成功或失败、错误记录。下面是一个SSL日志输出示例。
4月9日16:35:30
10.102.57.30 04/09/2019:16:35:30 GMT 0- ppe -0: default SSLLOG SSL_HANDSHAKE_SUCCESS 896 0:后端SPCBId 30894 - ServerIP 104.211.224.186 - ServerPort 443 - ProtocolVersion TLSv1.2——密码套件”ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Non-Export 256位”-会话新SERVER_AUTHENTICATED serialnumber“200005 a75b04365827852d630000000005a75b”——SignatureAlgorithm“sha256WithRSAEncryption”——ValidFrom“格林尼治时间2019年3月17日03:28:42”——ValidTo“格林尼治时间2021年3月17日03:28:42”——HandshakeTime 40毫秒4月9日16:35:30 < local0.debug > 10.102.57.30 04/09/2019:16:35:30 0-PPE-0格林尼治时间:default SSLLOG SSL_HANDSHAKE_ISSUERNAME 897 0: SPCBId 30894 - IssuerName " C=US,ST=Washington,L=Redmond,O=Microsoft Corporation,OU=Microsoft IT,CN=Microsoft IT TLS CA 2"四月9日16:35:30 10.102.57.30 04/09/2019:16:35:30 GMT 0- pe -0: default SSLLOG SSL_HANDSHAKE_SUBJECTNAME 898 0: SPCBId 30894 - SubjectName " CN=vault.azure.net"