OTP 加密工具

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

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

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

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

OTP 加密工具的使用

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

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

重要

  • 必须在 Citrix ADC 设备中启用加密参数才能使用 OTP 加密工具。
  • 对于在构建 41.20 之前注册到 Citrix ADC 的设备,必须执行以下操作:
    • 将 13.0 Citrix ADC 设备 升级到 13.0 版本 41.20 版本。
    • 启用设备上的加密参数。
    • 使用 OTP 秘密迁移工具将 OTP 秘密数据从纯文本格式迁移到加密格式。

纯文本格式的 OTP 秘密数据

示例:

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

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

加密格式的 OTP 秘密数据

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

示例:

    {
         "otpdata”: {
         “devices”: {
                        “device1”: “value1”,
                        “device2”: “value2”, …
                    }
            }
    }

其中,值 1 是孩子 + IV + 密码数据的 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)
    }
  • 在“设备”中,您对每个名称都有值。该值是基数 64 编码(孩子)。基数 64 编码(IV)。基数 64 编码(密码)。
  • 在标准 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 加密工具界面示例。该接口包含必须为加密/解密/证书升级定义的所有参数。此外,还会捕获每个参数的简要描述。

操作参数

您必须定义 OTP 加密工具进行加密、解密或证书升级的 OTP 参数。

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

情景 操作参数值和其他参数
将纯文本 OTP 密钥转换为同一属性中的加密格式 输入操作参数值为 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
将纯文本 OTP 秘密转换为不同属性的加密格式 输入操作参数值为 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
将加密条目转换回明文 输入操作参数值为 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
将加密条目从 KBA 属性转换为明文 输入操作参数值为 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
将证书更新为新证书 输入操作参数值为 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

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

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

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

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

示例:

set aaa otpparameter -encryption ON

OTP 加密工具用例

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

使用 Citrix ADC 设备版本 13.0 版本 41.20 注册新设备

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

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

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

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

  • 使用转换工具将 OTP 数据从纯文本格式迁移到加密格式。
  • 启用 Citrix ADC 设备上的“加密”参数。
    • 要使用 CLI 启用加密选项,请执行以下操作:
      • set aaa otpparameter -encryption ON
    • 要使用 GUI 启用加密选项,请执行以下操作:
      • 导航到安全 > AAA - 应用程序流量,然后单击身份验证设置部分下的更改身份验证 AAA OTP 参数
      • 配置 AAA OTP 参数页上,选择 OTP 秘密加密,然后单击确定
    • 使用有效的 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 版本 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

故障排除

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

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