支持智能卡、证书和 FIDO 密钥的 Windows 安全shell客户端

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/NoMoreFood/putty-cac

PuTTY CAC

PuTTY CAC 是 PuTTY 的一个分支版本,是一款广受欢迎的安全外壳(SSH)终端。PuTTY CAC 增加了使用 Windows 证书 API(CAPI)、公钥密码学标准(PKCS)库或 Fast Identity Online(FIDO)密钥的功能,使用与硬件令牌上存储的证书关联的私钥执行 SSH 公钥身份验证。

PuTTY CAC 可以与许多类型的加密令牌一起使用,例如 Yubikeys 和流行的智能卡型号。"PuTTY CAC" 中的 "CAC" 指的是 Common Access Card,是一种用于美国政府设施的智能卡令牌,是开发 PuTTY CAC 的最初驱动力之一。

PuTTY CAC 由开源社区独立维护,与美国政府无关。

您可以在此处下载 PuTTY CAC 的最新版本:https://github.com/NoMoreFood/putty-cac/releases

PuTTY CAC 的源代码和二进制文件可以免费用于任何目的。许可证可以在此处找到:https://github.com/NoMoreFood/putty-cac/blob/master/code/LICENCE

前提条件

  • Microsoft Windows 10 或更高版本
  • 对于 CAPI 支持,必须安装适当的 Windows 智能卡迷你驱动程序。这通常由智能卡制造商提供,尽管许多常见的硬件令牌由 OpenSC 支持。
  • 对于 PKCS 支持,需要一个 PKCS #11 库(通常是 DLL 文件)来与硬件令牌进行交互。这通常由智能卡制造商提供,尽管许多常见的硬件令牌由 OpenSC 支持。
  • 对于 FIDO 支持,需要一个受 Windows 10 支持的 FIDO 密钥。

用法

您可以在 United States Government 的 ID Management 网站上的 "SSH Using PuTTY-CAC" 部分中找到有关使用 PuTTY-CAC 的基本说明:https://playbooks.idmanagement.gov/piv/engineer/ssh/

命令行用法

PuTTY CAC 支持与 PuTTY 相同的命令行选项,并提供一些专门针对 PuTTY CAC 的附加选项。

对于任何 PuTTY 实用程序的 PuTTY 密钥文件路径,您可以指定证书的指纹或应用程序标识符。例如:

  • 使用位于用户证书存储中、指纹为 '716B8B58D8F2C3A7F98F3F645161B1BF9818B689' 的证书连接到 user@host: putty.exe user@host -i CAPI:716B8B58D8F2C3A7F98F3F645161B1BF9818B689

  • 使用位于 PKCS 库 'PKCS.dll' 中、指纹为 'B8B58D8F2C3A7F98F3F645161B1BF9818B689716' 的证书连接到 user@host: putty.exe user@host -i PKCS:B8B58D8F2C3A7F98F3F645161B1BF9818B689716=C:\PKCS.dll

  • 使用来自 PuTTY CAC FIDO 密钥缓存的标识为 'ssh:MyFidoKey' 的 FIDO 密钥连接到 user@host: putty.exe user@host -i FIDO:ssh:MyFidoKey

PuTTY 可执行文件(putty.exe、pageant.exe、psftp.exe)支持以下附加命令行选项。其中大多数选项集中在 Pageant 的操作上,并且还可以从其用户界面进行设置。一旦设置,这些选项将自动适用于后续的执行,除非明确取消设置。过滤 Pageant 证书选择对话框的设置也将影响标准 PuTTY 应用程序中的过滤证书选择对话框:

  • 在启动时自动加载任何兼容的 CAPI 证书:-autoload-autoloadoff

  • 在 PuTTY 执行之间保存密钥列表:-savecertlist-savecertlistoff

  • 在 Pageant 中启用补充 PIN 缓存:-forcepincache-forcepincacheoff

  • 在请求证书签名操作时提示:-certauthprompting-certauthpromptingoff

  • 仅在证书选择对话框中显示受信任的证书:-trustedcertsonly-trustedcertsonlyoff

  • 不在证书选择对话框中显示过期的证书:-ignoreexpiredcerts-ignoreexpiredcertsoff

  • 在证书选择对话框中禁用所有过滤:-allowanycert-allowanycertoff

 

特别注意事项

证书

对于 PuTTY CAC,证书只是引用私钥/公钥对的方便方式。如果您想使用 PuTTY CAC 安全登录系统,但无法访问证书颁发机构(CA),则可以使用自签名证书。相反,可以将 PuTTY CAC 与托管的 SSH 服务器结合使用以强制执行多因素身份验证。这可以通过确保 OpenSSH 的 authorized_keys 文件仅包含与硬件令牌相关联的公钥来完成,可以通过程序方式或通过创建所有已发行证书的索引并通过 OpenSSH 指令(如 AuthorizedKeysCommand)查找它们来完成。

联邦信息处理标准(FIPS)合规性

用于与硬件令牌进行交互的特定代码利用 Microsoft 的加密库,这些加密库受系统级 FIPS 设置的管理(请参见 Microsoft 的网站)。类似地,用于签名认证挑战的硬件令牌如果是 FIPS 认证的,则保证使用符合 FIPS 标准的算法;有关更多信息,请参阅硬件令牌制造商的网站。一旦 SSH 会话建立,PuTTY 本身利用专有的加密和哈希,但未经过 FIPS 合规性或认证的评估。

构建 PuTTY CAC 的注意事项

  • 前提条件
  • Visual Studio 2022 以及 C++ 桌面应用程序开发

  • WiX 工具集(用于构建 MSI 文件)

  • Windows PowerShell(用于构建 MSI/ZIP/Hash 文件)

构建

  • 执行 'packager\build.cmd' 以创建构建文件

  • Visual Studio 解决方案文件将生成在 'build' 目录下

依赖项

  • PuTTYImp 用于导入现有的 FIDO resident 密钥。这将静态链接 libfido2;libfido2 及其二进制依赖项包含在此存储库中。所有其他 PuTTY 可执行文件除了包含在 Windows 操作系统及其相关 SDK 中的依赖项外,没有其他依赖项。

 

标签:工具分享