如何在 shell 脚本中将 yubikey pin 传递给 openssl 命令

Nid*_*rma 4 shell openssl certificate

我正在尝试使用 opensssl 命令签署 CSR。证书和信任根转到 yubikey,yubikey 充当 HSM 授权机构。每次我执行命令时,它都会要求输入 Yubikey Pin。我怎样才能在命令行中传递PIN,这样我就不必手动输入它并且可以将其完全剔除。

openssl x509 -engine pkcs11 -req -days 30 -CAform PEM -CA "$subCert" -CAkeyform 引擎 -CAkey "pkcs11:pin-value=$pin" -sha256 -CAcreateserial -in "$csr_file" -outform DER -out " $crt_文件”

此命令不应要求输入 PIN,而应从“pkcs11:pin-value=$pin”获取 pin

Rya*_*yan 6

一些背景:各种评论中提出不同的 pin 方法可以解决此问题,传递 pin 的选项有:

  • 按照此处-passin pass:123456的 yubikey 文档指定。
  • 添加PIN=123456到您的 openssl 配置文件中[pkcs11_section]
  • 使用 PKCS#11 URI(通过 openssl 传递到 pkcs11 库),如下所示:-CAKey 'pkcs11:id=%02;type=private;pin-value=$PIN'

然而,所有这些似乎只影响令牌 pin,而不影响密钥 pin(这两者通常都是请求的)。我不清楚这是一个错误还是一个功能

Opensc 有一些讨论建议您pin_cache_ignore_user_consent = true;framework pkcs15opensc 配置部分进行设置,但是,当我测试它时,这并没有改变行为。

那里(也不清楚这是否是同一问题)似乎是使用插槽 9c(索引 02)的 yubikeys 的问题,其中 openssl 始终断言CKA_ALWAYS_AUTHENTICATE,因此需要密钥的 pin 输入。可以通过使用此处建议的插槽 9a(索引 01slot0-id1或)来避免这种情况。pkcs11:id=%01;

您也许还可以使用OpenSC 的 pkcs11-tool来实现某些功能,该工具似乎没有相同的问题

祝你好运!