Citrix ADC

OTP 加密工具

自 Citrix ADC 版本 13.0 Build 41.20 起,OTP 密钥数据以加密格式存储,而非纯文本格式,以增强安全性。以加密格式存储 OTP 密钥是自动的,不需要手动干预。

以前,Citrix ADC 设备将 OTP 密钥作为纯文本存储在 Active Directory 中。以纯文本格式存储 OTP 密钥会构成安全威胁,因为恶意攻击者或管理员可以通过查看其他用户的共享密钥来利用数据。

OTP 加密工具具有以下优势:

  • 即使您的旧设备使用旧格式(纯文本),也不会导致任何数据丢失。
  • 与旧 Citrix Gateway 版本的向后兼容性支持有助于集成以及与现有设备及新设备一起使用。
  • OTP 加密工具可帮助管理员同时迁移所有用户的所有 OTP 密钥数据。

注意

OTP 加密工具不会加密或解密 KBA 注册数据或电子邮件注册数据。

OTP 加密工具的使用

OTP 加密工具可用于执行以下操作:

  • 加密。以加密格式存储 OTP 密钥。该工具提取向 Citrix ADC 注册的设备的 OTP 数据,然后将纯文本格式的 OTP 数据转换为加密格式。
  • 解密。将 OTP 密钥恢复为纯文本格式。
  • 更新证书。管理员可以随时将证书更新为新证书。管理员可以使用该工具输入新证书并使用新证书数据更新所有条目。证书路径必须是绝对路径或相对路径。

重要

  • 必须在 Citrix ADC 设备中启用加密参数才能使用 OTP 加密工具。
  • 对于向 Build 41.20 之前的 Citrix ADC 注册的设备,必须执行以下操作:
    • Upgrade the 13.0 Citrix ADC appliance to 13.0 build 41.20.
    • Enable the encryption parameter on the appliance.
    • Use the OTP Secret migration tool to migrate OTP secret data from plain text format to encrypted format.

纯文本格式的 OTP 密钥数据

示例:

#@devicename=<16 or more bytes>&tag=<64bytes>&,

正如您所看到的,旧格式的起始模式始终为“#@”,结束模式始终为“&”。“devicename=”与结束模式之间的所有数据构成用户 OTP 数据。

加密格式的 OTP 密钥数据

OTP 数据的新加密格式为以下格式:

示例:

    {
         "otpdata”: {
         “devices”: {
                        “device1”: “value1”,
                        “device2”: “value2”, …
                    }
            }
    }
<!--NeedCopy-->

其中,value1 为 kid + IV +cipher data 的 base64 编码值

密码数据的结构如下:

    {
      secret:<16-byte secret>,
      tag : <64-byte tag value>
      alg: <algorithm used> (not mandatory, default is sha1, specify the algorithm only if it is not default)
    }
<!--NeedCopy-->
  • 在“devices”中,您有每个名称的值。该值为 base64encode(kid).base64encode(IV).base64encode(cipherdata)。
  • 在标准 AES 算法中,IV 始终作为前 16 或 32 字节的密码数据发送。您可以遵循同样的模式。
  • 尽管密钥保持不变,但每台设备的 IV 将有所差别。

OTP 加密工具设置

OTP 加密工具位于目录 \var\netscaler\otptool 中。 您必须从 Citrix ADC 源下载代码,然后使用所需的 AD 凭据运行该工具。

  • 使用 OTP 加密工具的必备条件:
    • 在运行此工具的环境中安装 python 3.5 或更高版本。
    • 安装 pip3 或更高版本。
  • 执行以下命令:
    • pip install requirements.txt。自动安装要求
    • python main.py。调用 OTP 加密工具。必须根据迁移 OTP 密钥数据的需要提供所需的参数。
  • 该工具可以位于 shell 提示符中的 \var\netscaler\otptool
  • 使用所需的 AD 凭据运行该工具。

OTP 加密工具界面

下图显示了一个示例 OTP 加密工具界面。该接口包含为加密/解密/证书升级必须定义的所有参数。此外,还记录了每个参数的简要描述。

OPERATION 参数

必须定义 OPERATION 参数才能使用 OTP 加密工具进行加密、解密或证书升级。

下表总结了一些可以使用 OTP 加密工具和相应的 OPERATION 参数值的场景。

场景 OPERATION 参数值和其他参数
在同一属性中将纯文本 OTP 密钥转换为加密格式 输入 OPERATION 参数值 0,并为源属性和目标属性提供相同的值。例如: python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute unixhomedirectory -operation 0 -cert_path aaatm_wild_all.cert
将纯文本 OTP 密钥转换为不同属性中的加密格式 输入 OPERATION 参数值 0,然后为源属性和目标属性提供相应的值。例如: python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 0 -cert_path aaatm_wild_all.cert
将加密的条目转换回纯文本 输入 OPERATION 参数值 1,然后为源属性和目标属性提供相应的值。例如: python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 1 -cert_path aaatm_wild_all.cert
将证书更新为新证书 输入 OPERATION 参数值 2,然后在相应的参数中提供所有先前的证书和新证书的详细信息。例如: python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 2 -cert_path aaatm_wild_all.cert –new_cert_path aaatm_wild_all_new.cert

CERT_PATH 参数

CERT_PATH 参数指定 Citrix ADC 中用于加密数据的证书。用户必须为所有三项操作(即 加密、 **解密和 **更新证书)提供此参数。

关于证书的注意事项

  • 用户必须提供与 Citrix ADC 中全局绑定的相同证书以进行用户数据加密。
  • 证书必须在同一文件中包含 Base64 编码的公共证书及其对应的 RSA 私钥。
  • 证书的格式必须是 PEM 或 CERT。证书必须遵守 X509 格式。
  • 此工具不接受密码保护的证书格式和 .pfx 文件。在向工具提供证书之前,用户必须将 PFX 证书转换为 .cert

SEARCH_FILTER 参数

SEARCH_FILTER 参数用于筛选 AD 域或用户。此搜索筛选器的格式与 Citrix ADC 中 LDAP 操作命令中使用的 LDAP 搜索筛选器格式相同。

在 Citrix ADC 设备中启用加密选项

要加密纯文本格式,必须在 Citrix ADC 设备中启用加密选项。

要使用 CLI 启用 OTP 加密数据,请在命令提示符下键入:

set aaa otpparameter [-encryption ( ON | OFF )]

示例:

set aaa otpparameter -encryption ON

OTP 加密工具用例

OTP 加密工具可用于以下用例。

向 Citrix ADC 设备版本 13.0 Build 41.20 中注册新设备

向 Citrix ADC 设备版本 13.0 Build 41.x 中注册新设备时,如果启用了加密选项,OTP 数据将以加密格式保存。您可以避免手动干预。

如果未启用加密选项,OTP 数据将以纯文本格式存储。

迁移版本 13.0 Build 41.20 之前注册的设备的 OTP 数据

必须执行以下操作来加密向 13.0 Build 41.20 之前的 Citrix ADC 设备中注册的设备的 OTP 密钥数据。

  • 使用转换工具将 OTP 数据从纯文本格式迁移到加密格式。
  • 在 Citrix ADC 设备上启用“Encryption”参数。
    • 要使用 CLI 启用加密选项,请执行以下操作:
      • set aaa otpparameter -encryption ON
    • 要使用 GUI 启用加密选项,请执行以下操作:
      • 导航到 Security(安全)> AAA – Application Traffic(AAA - 应用程序流量),然后单击 Authentication Settings(身份验证设置)部分下的 Change authentication AAA OTP Parameter(更改身份验证 AAA OTP 参数)。
      • Configure AAA OTP Parameter(配置 AAA OTP 参数)页面上,选择 OTP Secret encryption(OTP 密钥加密),然后单击 OK(确定)。
    • 使用有效的 AD 凭据登录。
    • 如果需要,请注册其他设备(可选)。

将加密数据从旧证书迁移到新证书

如果管理员想要将证书更新为新证书,该工具将提供用于更新新证书数据条目的选项。

使用 CLI 将证书更新为新证书

在命令提示符下,键入:

示例:

python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 2 -cert_path aaatm_wild_all.cert –new_cert_path aaatm_wild_all_new.cert

注意

  • 证书必须包含私钥和公钥。
  • 目前,该功能仅针对 OTP 提供。

将设备升级到具有加密功能的 13.0 Build 41.20 后注册的设备,重新加密或迁移到新证书

管理员可以在已使用证书加密的设备上使用该工具,并可以使用新证书更新该证书。

将加密数据转换回纯文本格式

管理员可以解密 OTP 密钥并将其恢复为原始纯文本格式。OTP 加密工具以加密格式扫描所有用户的 OTP 密钥,并将其转换为解密格式。

使用 CLI 将证书更新为新证书

在命令提示符下,键入:

示例:

python3 main.py -Host 192.0.2.1 –Port 636 -username  ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 1
<!--NeedCopy-->

故障排除

该工具将生成以下日志文件。

  • app.log。记录所有主要执行步骤以及有关错误、警告和失败的信息。
  • unmodified_users.txt。包含未从纯文本升级到加密格式的用户 DN 列表。这些日志是因格式错误而生成的,也可能是由于其他原因造成的。