配置 ADC-Thales 集成

以下流程图描述了将 Thales HSM 与 Citrix ADC 结合使用所需执行的任务:

流程图

如上面的流程图所示,您可以执行以下任务:

  1. 启用 HSM 上的远程配置推送。
  2. 将 ADC 配置为使用 Thales HSM。
    • 在 HSM 上添加 NSIP 地址。
    • 在 RFS 上配置 ADC 的访问权限。
    • 在引导时配置硬件服务器的自动启动。
    • 在 ADC 上注册 HSM。
    • 在 ADC 上添加 RFS 详细信息。
    • 将 ADC 同步到 RFS。
    • 验证是否已成功在 ADC 上注册 Thales HSM。
  3. (可选)创建 HSM RSA 密钥。
  4. 在 Citrix ADC 上配置实体。
    • 添加 HSM 密钥。
    • 使用 HSM 密钥添加证书密钥对。
    • 添加虚拟服务器。
    • 添加服务器对象。
    • 添加服务。
    • 将服务绑定到虚拟服务器。
    • 将证书密钥对绑定到虚拟服务器。
    • 验证配置。

配置 Thales HSM

您必须在 Thales HSM 上指定 RFS 的 IP 地址,以便其接受 RFS 向其推送的配置。使用 Thales HSM 上的 nShield Connect 前面板执行以下过程。

指定 Thales HSM 上远程计算机的 IP 地址

  1. 导航到“系统配置”>“配置文件选项”>“允许自动推送”。
  2. 选择 ,然后指定要接受配置的计算机 (RFS) 的 IP 地址。

启用 HSM 上的远程配置推送

您必须在 Thales HSM 上指定 RFS 的 IP 地址,以便其接受 RFS 向其推送的配置。使用 Thales HSM 上的 nShield Connect 前面板执行以下过程。

指定 Thales HSM 上远程计算机的 IP 地址

  1. 导航到“系统配置”>“配置文件选项”>“允许自动推送”。
  2. 选择开,然后指定要接受配置的计算机 (RFS) 的 IP 地址。

将 ADC 配置为使用 Thales HSM

本文档中使用的示例值:

NSIP 地址=10.217.2.43

Thales HSM IP 地址 = 10.217.2.112

RFS IP 地址=10.217.2.6

在 HSM 上添加 NSIP 地址

通常,您可以使用 nShield Connect 前面板将客户端添加到 HSM。有关详细信息,请参阅“nShield Connect 快速入门指南”。

或者,使用 RFS 将 ADC 作为客户端添加到 HSM。为此,您必须在 RFS 的 HSM 配置中添加 NSIP 地址,然后将配置推送到 HSM。在执行此操作之前,您必须知道 HSM 的电子序列号 (ESN)。

要获取 HSM 的 ESN,请在 RFS 上运行以下命令:

root@ns# /opt/nfast/bin/anonkneti <Thales HSM IP address>

示例:

root@ns# /opt/nfast/bin/anonkneti 10.217.2.112
BD17-C807-58D9 5e30a698f7bab3b2068ca90a9488dc4e6c78d822

ESN 编号为 BD17-C807-58D9。

获得 ESN 编号后,请使用编辑器(如 vi)编辑 RFS 上的 HSM 配置文件。

vi /opt/nfast/kmdata/hsm-BD17-C807-58D9/config/config

在 hs_客户端部分,添加以下条目:

# Amount of data in bytes to encrypt with a session key before session key# renegotiation, or 0 for unlimitied. (default=1024\*1024\*8b=8Mb).
#  datalimit=INT
addr=10.217.2.43
clientperm=unpriv
keyhash=0000000000000000000000000000000000000000
esn=
timelimit=86400
datalimit=8388608
-----

注意: 包含一个或多个连字符作为分隔符,以在同一部分中添加多个条目。

要将配置推送到 HSM,请在 RFS 上运行以下命令:

/opt/nfast/bin/cfg-pushnethsm --address=<Thales HSM IP address> --force /opt/nfast/kmdata/hsm-BD17-C807-58D9/config/config

示例:

/opt/nfast/bin/cfg-pushnethsm --address=10.217.2.112 --force
                /opt/nfast/kmdata/hsm-BD17-C807-58D9/config/config

在 RFS 上配置 ADC 的访问权限

要在 RFS 上配置 ADC 的访问权限,请在 RFS 上运行以下命令:

/opt/nfast/bin/rfs-setup --force -g --write-noauth <NetScaler IP address>

示例:

[root@localhost bin]# /opt/nfast/bin/rfs-setup --force -g --write-noauth 10.217.2.43
Adding read-only remote_file_system entries
Ensuring the directory /opt/nfast/kmdata/local exists
Adding new writable remote_file_system entries
Ensuring the directory /opt/nfast/kmdata/local/sync-store exists
Saving the new config file and configuring the hardserver
Done

通过使用端口 9004 验证 ADC 可以达到 RFS 和 Thales HSM。

在引导时配置硬件服务器的自动启动

创建文件,然后重新启动设备。现在,无论何时重新启动设备,如果找到此文件,Hardserver 都会自动启动。

在 shell 提示符处,键入:

touch /var/opt/nfast/bin/thales_hsm_is_enrolled

在命令提示窗口中,键入:

reboot

在 ADC 上注册 HSM

将目录更改为 /var/opt/nfast/bin。

要将 HSM 详细信息添加到 ADC 配置中,请在 ADC 上运行以下命令:

nethsmenroll --force <Thales_nShield_Connect_ip_address> $(anonkneti <Thales_nShield_Connect_ip_address>)

示例:

root@ns# ./nethsmenroll --force 10.217.2.112 $(anonkneti 10.217.2.112)
OK configuring hardserver's nethsm imports

此步骤在 /var/opt/nfast/kmdata/config/config 文件的 nethsm_imports 部分中的行 # ntoken_esn=ESN 后添加以下条目。

…
local_module=0
remote_ip=10.217.2.112
remote_port=9004
remote_esn=BD17-C807-58D9
keyhash=5e30a698f7bab3b2068ca90a9488dc4e6c78d822
timelimit=86400
datalimit=8388608
privileged=0
privileged_use_high_port=0
ntoken_esn=

将目录更改为 /var/opt/nfast/bin,并在 ADC 上运行以下命令:

touch "thales_hsm_is_enrolled"

注意: 要删除已注册到 ADC 上的 HSM,请键入:

./nethsmenroll –-remove <NETHSM-IP>

在 ADC 上添加 RFS 详细信息

要添加 RFS 详细信息,请将目录更改为 /var/opt/nfast/bin,然后运行以下命令:

./rfs-sync --no-authenticate --setup <rfs_ip_address>

示例:

./rfs-sync --no-authenticate --setup 10.217.2.6
No current RFS synchronization configuration.
Configuration successfully written; new config details:
Using RFS at 10.217.2.6:9004: not authenticating.

此步骤在 /var/opt/nfast/kmdata/config/config 文件的 rfs_sync_client 部分中的行 # local_esn=ESN 后添加以下条目。

……
remote_ip=10.217.2.6
remote_port=9004
use_kneti=no
local_esn=

注意: 要删除在 ADC 上注册的 RFS,请键入:

./rfs_sync –remove

将 ADC 与 RFS 同步

要同步所有文件,请将目录更改为 /var/opt/nfast/bin,然后在 ADC 上运行以下命令:

./rfs-sync –-update

此命令从 RFS 上的 /opt/nfaST/kmdata/本地目录中获取所有世界文件、模块文件和关键文件,并将它们放入 ADC 上的 /var/opt/nfaST/kmdat/本地目录中。Citrix 建议您手动复制 World 文件、module_XXXX_XXXX_XXXX 文件,其中 XXXX_XXXX_XXXX 是注册的 HSM 的 ESN,并且仅复制所需的 RSA 密钥和证书文件。

验证 Thales HSM 是否已成功注册到 ADC 上

将 ADC 与 RFS 同步后,请执行以下操作:

  • 验证本地硬件服务器已启动并正在运行。(nCipher 服务器正在运行)。
  • 获取已配置 HSM 的状态,并验证 n_modules(模块数)字段和 km 信息字段的值是否为非零。
  • 验证 HSM 是否正确注册并且是否可以由 ADC 使用(状态 0x2 可用)。
  • 使用签名测试正常运行加载测试。

将目录更改为 /var/opt/nfast/bin,并在 shell 提示符下运行以下命令:

root@ns# ./chkserv root@ns# ./nfkminfo root@ns# ./sigtest

请参 附录阅一个例子。

创建 HSM RSA 密钥

只支持 RSA 密钥作为 HSM 密钥。

注意: 如果密钥已经存在于 RFS 上的 /opt/nfaST/kmdat/本地文件夹中,请跳过此步骤。

创建 RSA 密钥、自签名证书和证书签名请求 (CSR)。将 CSR 发送到证书颁发机构以获取服务器证书。

在下面的示例中创建了以下文件:

  • 嵌入 RSA 密钥:key_embed_2ed5428aaeae1e159bdbd63f25292c7113ec2c78
  • 自签名证书:例如自我证书
  • 证书签名请求:示例 _ req

注意: 严格的 FIPS 140-2 级 3 级安全世界支持 生成键命令。需要管理员卡集 (ACS) 或操作员卡集 (OCS) 来控制许多操作,包括创建密钥和 OCS。运行 生成键命令时,系统会提示您插入 ACS 或 OCS 卡。有关严格的 FIPS 140-2 级 3 安全世界的详细信息,请参阅 nShield Connect 用户指南。

以下示例使用 2 级安全世界。在该示例中,这些命令采用粗体字形式。

示例:

[root@localhost bin]# ./generatekey embed
size: Key size? (bits, minimum 1024) [1024] > 2048
OPTIONAL: pubexp: Public exponent for RSA key (hex)? []
>
embedsavefile: Filename to write key to? []
> example
plainname: Key name? [] > example
x509country: Country code? [] > US
x509province: State or province? [] > CA
x509locality: City or locality? [] > Santa Clara
x509org: Organisation? [] > Citrix
x509orgunit: Organisation unit? [] > NS
x509dnscommon: Domain name? [] > www.citrix.com
x509email: Email address? [] > example@citrix.com
nvram: Blob in NVRAM (needs ACS)? (yes/no) [no] >
digest: Digest to sign cert req with? (md5, sha1, sha256, sha384, sha512)
  [default sha1] > sha512
key generation parameters:
 operation      Operation to perform               generate
 application    Application                        embed
 verify         Verify security of key             yes
 type           Key type                           RSA
 size           Key size                           2048
 pubexp         Public exponent for RSA key (hex)
 embedsavefile  Filename to write key to           example
 plainname      Key name                           example
 x509country    Country code                       US
 x509province   State or province                  CA
 x509locality   City or locality                   Santa Clara
 x509org        Organisation                       Citrix
 x509orgunit    Organisation unit                  NS
 x509dnscommon  Domain name                        www.citrix.com
 x509email      Email address                      example@citrix.com
 nvram          Blob in NVRAM (needs ACS)          no
 digest         Digest to sign cert req with       sha512
Key successfully generated.
Path to key: /opt/nfast/kmdata/local/key_embed_2ed5428aaeae1e159bdbd63f25292c7113ec2c78
You have new mail in /var/spool/mail/root

结果:

您已经创建了一个 CSR (example_req)、一个自签名证书 (example_selfcert) 和一个嵌入格式的应用程序密钥令牌文件(/opt/nfast/kmdata/local/key_embed_2ed5428aaeae1e159bdbd63f25292c7113ec2c78)

由于 ADC 仅支持简单格式的密钥,因此必须将嵌入密钥转换为简单密钥。

要将嵌入密钥转换为简单密钥,请在 RFS 上运行以下命令:

[root@localhost bin]# ./generatekey -r simple
from-application: Source application? (embed, simple) [embed] > embed
from-ident: Source key identifier? (c6410ca00af7e394157518cb53b2db46ff18ce29,
                                    2ed5428aaeae1e159bdbd63f25292c7113ec2c78)
  [default c6410ca00af7e394157518cb53b2db46ff18ce29]
> 2ed5428aaeae1e159bdbd63f25292c7113ec2c78
ident: Key identifier? [] > examplersa2048key
plainname: Key name? [] > examplersa2048key
key generation parameters:
 operation         Operation to perform    retarget
 application       Application             simple
 verify            Verify security of key  yes
 from-application  Source application      embed
 from-ident        Source key identifier   2ed5428aaeae1e159bdbd63f25292c7113ec2c78
 ident             Key identifier          examplersa2048key
 plainname         Key name                examplersa2048key
Key successfully retargetted.
Path to key: /opt/nfast/kmdata/local/key_simple_examplersa2048key

重要:

当系统提示输入源密钥标识符时,输入 2ed5428aaeae1e159bdbd63f25292c7113ec2c78 密钥作为嵌入密钥。

结果:

将创建一个带有前缀 key_simple(例如 key_simple_examplersa2048key)的键。

注意: examplersa2048key 是密钥标识符(ident),称为 ADC 上的 HSM 密钥名称。密钥标识符是唯一的。所有简单文件都有前缀 key_simple。

在 ADC 上配置实体

在 ADC 处理流量之前,必须执行以下操作:

  1. 启用功能。
  2. 添加子网 IP (SNIP) 地址。
  3. 将 HSM 密钥添加到 ADC。
  4. 使用 HSM 密钥添加证书密钥对。
  5. 添加虚拟服务器。
  6. 添加服务器对象。
  7. 添加服务。
  8. 将服务绑定到虚拟服务器。
  9. 将证书密钥对绑定到虚拟服务器。
  10. 验证配置。

ADC 上的使能功能

ADC 上必须存在许可证,然后才能启用某项功能。

使用 CLI 启用功能

在命令提示符下,运行以下命令:

enable feature lb
enable feature ssl

通过使用 GUI 启用功能

导航到“系统”>“设置”,然后在“模式和功能”组中选择“配置基本功能” • • ,然后选择• • SSL 卸载

添加子网 IP 地址

有关子网 IP 地址的更多信息,请参阅 配置子网 IP 地址

添加 SNIP 地址并使用 CLI 验证配置

在命令提示符下,运行以下命令:

add ns ip <IPAddress> <netmask> -type SNIP
show ns ip

示例:

add ns ip 192.168.17.253 255.255.248.0 -type SNIP
Done
show ns ip
        Ipaddress        Traffic Domain  Type             Mode     Arp      Icmp     Vserver  State
        ---------        --------------  ----             ----     ---      ----     -------  ------
1)      192.168.17.251   0               NetScaler IP     Active   Enabled  Enabled  NA       Enabled
2)      192.168.17.252   0               VIP              Active   Enabled  Enabled  Enabled  Enabled
3)      192.168.17.253   0               SNIP              Active   Enabled  Enabled  NA       Enabled
 Done

添加 SNIP 地址并使用 GUI 验证配置

导航到系统 > 网络 > IP,添加 IP 地址,然后选择 IP 类型作为子网 IP。

将 HSM 密钥和证书复制到 ADC

使用安全文件传输实用程序将密钥(key_simple_examplersa2048key)安全地复制到 /var/opt/nfast/kmdata/local 文件夹,并将证书 (example_selfcert) 安全地复制到 ADC 上的 /nsconfig/ssl 文件夹。

在 ADC 上添加密钥

所有键都有一个键-简单的前缀。将密钥添加到 ADC 时,请使用 ident 作为 HSM 密钥名称。例如,如果您添加的密钥是简单的密钥,则 HSM 密钥名称是 XXXX。

重要:

  • HSM 密钥名称必须与您在将嵌入密钥转换为简单密钥格式时指定的 ident 相同。
  • 密钥必须存在于 ADC 上的 /var/opt/nfa/kmdat/本地/目录中。

使用 CLI 添加 HSM 密钥

在 shell 提示符处,运行以下命令:

add ssl hsmKey <hsmKeyName> -key <string>

示例:

add ssl hsmKey examplersa2048key –key key_simple_examplersa2048key
Done

通过使用 GUI 添加 HSM 密钥

导航到 流量管理 > SSL > HSM ,然后添加 HSM 密钥。

在 ADC 上添加证书密钥对

有关证书密钥对的信息,请参阅 添加或更新证书密钥对

使用 CLI 添加证书密钥对

在命令提示符下,运行以下命令:

add ssl certKey <certkeyName> -cert <string> -hsmKey <string>

示例:

add ssl certKey key22 -cert example_selfcert -hsmKey examplersa2048key
Done

使用 GUI 添加证书密钥对

导航到流量管理 > SSL > 证书,然后添加证书密钥对。

添加虚拟服务器

有关虚拟服务器的信息,请参阅 SSL 虚拟服务器配置

使用 CLI 配置基于 SSL 的虚拟服务器

在命令提示符下,运行以下命令:

add lb vserver <name> <serviceType> <IPAddress> <port>

示例:

add lb vserver v1 SSL 192.168.17.252 443

使用 GUI 配置基于 SSL 的虚拟服务器

导航到 流量管理 > 负载平衡 > 虚拟服务器 ,创建虚拟服务器,并将协议指定为 SSL。

添加服务器对象

在可以在 ADC 上添加服务器对象之前,请确保已创建后端服务器。以下示例使用 Linux 系统上的内置 python HTTP 服务器模块。

示例:

%python –m SimpleHTTPServer 80

使用 CLI 添加服务器对象

在命令提示符下,运行以下命令:

add server <name> <IPAddress>

示例:

add server s1 192.168.17.246

通过使用 GUI 添加服务器对象

导航到流量管理 > 负载平衡 > 服务器,然后添加服务器。

添加服务

有关更多信息,请参阅 正在配置服务

使用 CLI 配置服务

在命令提示符下,运行以下命令:

add service <name> <serverName> <serviceType> <port>

示例:

add service sr1 s1 HTTP 80

使用 GUI 配置服务

导航到 流量管理 > 负载平衡 > 服务 ,然后创建服务。

将服务绑定到虚拟服务器

有关更多信息,请参阅 将服务绑定到 SSL 虚拟服务器

使用 CLI 将服务绑定到虚拟服务器

在命令提示符下,运行以下命令:

bind lb vserver <name> <serviceName>

示例:

bind lb vserver v1 sr1

使用 GUI 将服务绑定到虚拟服务器

  1. 导航到 流量管理 > 负载平衡 > 虚拟服务器
  2. 打开虚拟服务器,然后在“服务”窗格中单击以将服务绑定到虚拟服务器。

将证书密钥对绑定到 ADC 上的虚拟服务器

有关更多信息,请参阅 将证书密钥对绑定到 SSL 虚拟服务器

使用 CLI 将证书密钥对绑定到虚拟服务器

在命令提示符下,运行以下命令:

bind ssl vserver <vServerName> -certkeyName <string>

示例:

bind ssl vserver v1 -certkeyName key22
Warning: Current certificate replaces the previous binding

使用 GUI 将证书密钥对绑定到虚拟服务器

  1. 导航到 流量管理 > 负载平衡 > 虚拟服务器
  2. 打开 SSL 虚拟服务器,然后在“高级设置”中单击“SSL 证书”。
  3. 将服务器证书绑定到虚拟服务器。

验证配置

要使用 CLI 查看配置,请执行以下操作:

在命令提示符下,运行以下命令:

show lb vserver <name>
show ssl vserver <vServerName>

示例:

show lb vserver v1
        v1 (192.168.17.252:443) - SSL   Type: ADDRESS
        State: UP
        Last state change was at Wed Oct 29 03:11:11 2014
        Time since last state change: 0 days, 00:01:25.220
        Effective State: UP
        Client Idle Timeout: 180 sec
        Down state flush: ENABLED
        Disable Primary Vserver On Down : DISABLED
        Appflow logging: ENABLED
        No. of Bound Services :  1 (Total)       1 (Active)
        Configured Method: LEASTCONNECTION
        Current Method: Round Robin, Reason: Bound service's state changed to UP
        Mode: IP
        Persistence: NONE
        Vserver IP and Port insertion: OFF
        Push: DISABLED  Push VServer:
        Push Multi Clients: NO
        Push Label Rule: none
        L2Conn: OFF
        Skip Persistency: None
        IcmpResponse: PASSIVE
        RHIstate: PASSIVE
        New Service Startup Request Rate: 0 PER_SECOND, Increment Interval: 0
        Mac mode Retain Vlan: DISABLED
        DBS_LB: DISABLED
        Process Local: DISABLED
        Traffic Domain: 0

1) sr1 (192.168.17.246: 80) - HTTP State: UP    Weight: 1
Done
sh ssl vserver v1
        Advanced SSL configuration for VServer v1:
        DH: DISABLED
        Ephemeral RSA: ENABLED          Refresh Count: 0
        Session Reuse: ENABLED          Timeout: 120 seconds
        Cipher Redirect: DISABLED
        SSLv2 Redirect: DISABLED
        ClearText Port: 0
        Client Auth: DISABLED
        SSL Redirect: DISABLED
        Non FIPS Ciphers: DISABLED
        SNI: DISABLED
        SSLv2: DISABLED  SSLv3: DISABLED  TLSv1.0: ENABLED  TLSv1.1: DISABLED  TLSv1.2: DISABLED
        Push Encryption Trigger: Always
        Send Close-Notify: YES

        ECC Curve: P_256, P_384, P_224, P_521

1)      CertKey Name: key22       Server Certificate

1)      Cipher Name: DEFAULT
        Description: Predefined Cipher Alias
 Done

要使用 GUI 查看配置,请执行以下操作:

导航到“流量管理”>“负载平衡”>“虚拟服务器”,然后双击 SSL 虚拟服务器将其打开并查看配置。