使用 Yubico Yubikey 自动进行扩展验证 (EV) 代码签名

问题描述 投票:0回答:1

我想使用 Yubico Yubikey 5 上的私钥使用

signtool.exe
进行 EV 代码签名,但是每次我签署文件时,它都会提示输入密码。我希望该密钥的输入能够作为在安全计算机上触发的构建管道的一部分自动进行。

我之前使用过 Safenet 令牌,并且能够使用以下解决方案来做到这一点 这个问题,但是我的理解是这个功能是

eToken Cryptographic Security Provider
使用的
Safenet
的特定实现。

我已经从 Yubikey 导出了公共证书,并使用

certutil
转储有关密钥容器的信息(类似于
GUID
0bababab-0000-aaaa-baba-cdcdcdcdcdcd
)和
CSP
Microsoft Smart Card Key Storage Provider
,但是当我使用此信息时我遇到以下问题:

signtool sign /f <cert file>.crt /csp "Microsoft Smart Card Key Storage Provider" /v /kc <container_id>
Error information: "CryptExportPublicKeyInfoEx failed" (-2146893819/0x80090005)
SignTool Error: An unexpected internal error has occurred.
code-signing signtool yubikey
1个回答
0
投票

除了

Microsoft Smart Card
支持之外,Yubikey还支持
PKCS11
signtool.exe
本身不支持此接口,但它受到
osslsigncode
等第三方工具的支持,它允许通过 CLI 提供密钥密码

这是我如何让它工作的:

  1. 下载并安装
    OpenSSL
    ,即从此处 重要提示:确保将其安装到
    C:\OpenSSL-Win64
    而不是默认的
    C\Program Files\OpenSSL-Win64
  2. 这里
    下载并安装yubico-piv-tool,并记下文件
    libykcs11.dll
    的位置,应位于
    C:\Program Files\Yubico\Yubico PIV Tool\bin
  3. 克隆或下载
    libp11
  4. 的源代码
  5. 使用
    libp11
    编译
    nmake
    ,更详细的说明这里注意: 当前版本的 make 文件对
    OpenSSL
    安装到步骤 1 中的目录
  6. 敏感
  7. 注意从
    第4步
    生成的pkcs11.dll的位置,这将是我们的
    pkcs11engine
    osslsigncode
  8. 下载
    osslsigncode
    ,即从这里并将其位置添加到您的
    PATH
    变量
  9. 使用 Yubikey Manager 将公共证书导出到
    .crt
    文件并记下其位置
  10. 最后你可以使用以下命令:
    osslsigncode sign -pkcs11module <location_of_libykcb11.dll> -pkcs11engine <location_of_pkcs11.dll> -pass <yubikey_passcode> -ts <timestamp_server_url> -key "pkcs11:id=%01" -certs <path_to_public_cert.crt> -in "input_file.exe" -out "output_file.exe"

其他资源:

© www.soinside.com 2019 - 2024. All rights reserved.