Microsoft Authenticode 代码签名 (EV) + Google Cloud HSM?

Microsoft Authenticode Code Signing ( EV ) + Google Cloud HSM?

我们公司在 eToken usb dongle 上使用 EV 协同签名证书,但我们目前正计划将我们的构建和签名程序移动到云中的虚拟服务器,一切都很好,除了一件事,它是协同签名过程,GlobalSign 允许证书存储在 USB 加密狗或 HSM 上。我认为 HSM 可以胜任这项工作,有人可以建议云 HSM 的最佳实践吗?我发现 google 云提供 Google Cloud HSM 但如何连接 signtool.exe 与此服务?

目前没有办法做到这一点。如果您的 EV 证书位于物理加密狗上,则需要在本地网络上设置物理构建代理来处理构建的签名部分。

这不应该给您的构建带来太多负担,因为生产签名只应在可发布代码上执行。

如果您不介意使用其他签名工具,Jsign 支持 Google Cloud HSM:

jsign --storetype GOOGLECLOUD --storepass <api-access-token> \
      --keystore projects/first-rain-123/locations/global/keyRings/mykeyring \
      --alias test --certfile full-chain.pem application.exe

困难的部分是让 GlobalSign 为存储在 Google Cloud HSM 中的私钥颁发证书(这通常涉及审核过程以证明密钥是由 HSM 正确生成的,或者提供一个attestation certificate).

首先,您需要按照步骤 here 在 Google Cloud KMS 中创建 HSM 支持的密钥:

gcloud kms keys create ${KEY_NAME} \
    --keyring ${KEY_RING} \
    --location ${LOCATION} \
    --purpose "encryption" \
    --protection-level "hsm"

那么你可以使用this PKCS #11 module - recently released by Google - along any tool that supports this API, like osslsigncode:

osslsigncode sign \
    -pkcs11engine /path/to/system/pkcs11.so \
    -pkcs11module google-kms-pkcs11-module.so \
    -cert certificate.crt \
    -key "pkcs11:token=${KEY_NAME};object=key" \
    -n "Your App Name" -in yourapp.exe -out yourapp-signed.exe

尚未测试此命令,但根据我的经验,osslsigncode 与 pkcs11-proxy 配合使用效果很好,pkcs11-proxy 是另一个 PKCS #11 模块,用于使用插入另一台机器上的令牌进行 EV 代码签名网络。

尽管上面的命令是使用“Linux 语法编写的”,但 osslsigncode 和 Google KMS 模块也在 GitHub 上发布了预编译的 windows 二进制文件。