将 Sectigo/Comodo 的代码签名证书转换为实际可用的 .pfx 文件

glo*_*bia 8 openssl code-signing code-signing-certificate codesignkey

当我尝试使用 Firefox 从 Sectigo/Comodo 下载代码签名证书时,我最终下载了一个名为 的文件CollectCCC,没有文件扩展名。我不清楚如何使用它来签署二进制文件。当我尝试使用它来签署二进制文件(/debug打开)时,我得到以下信息:

> .\installation\signtool.exe sign /debug /f 'C:\Users\username\Downloads\CollectCCC' .\DraughtHub_Link.exe

The following certificates were considered:
    Issued to: GoDragons
    Issued by: Sectigo RSA Code Signing CA
    Expires:   Fri Oct 22 00:59:59 2021
    SHA1 hash: <hash>

    Issued to: Sectigo RSA Code Signing CA
    Issued by: USERTrust RSA Certification Authority
    Expires:   Wed Jan 01 00:59:59 2031
    SHA1 hash: <hash>

    Issued to: USERTrust RSA Certification Authority
    Issued by: AAA Certificate Services
    Expires:   Mon Jan 01 00:59:59 2029
    SHA1 hash: <hash>

    Issued to: AAA Certificate Services
    Issued by: AAA Certificate Services
    Expires:   Mon Jan 01 00:59:59 2029
    SHA1 hash: <hash>

After EKU filter, 4 certs were left.
After expiry filter, 4 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.
Run Code Online (Sandbox Code Playgroud)

部分问题是我无法使用 IE 下载他们的证书(他们推荐的方式,叹气),因为我没有使用 IE 创建代码签名证书请求。我使用openssl.

这是我从 IE 收到的错误消息: IE错误信息

我也尝试将其导入CollectCCC到 IE 中,但失败了。

免责声明:我不建议将 Sectigo 和/或 Comodo 用于代码签名证书!我和他们的经历太糟糕了!值得花更多的钱来获得更好的服务。

glo*_*bia 17

经过大量的谷歌搜索,我最终确定该CollectCCC文件的类型为.p7s.

您可以使用以下命令(这是一个两步过程)将.p7s文件转换为.pfx文件(需要对二进制文件进行签名openssl):

openssl pkcs7 -inform der -in CollectCCC -print_certs -out CollectCCC.pem
openssl pkcs12 -export -out certificate.pfx -inkey ~/.csr/www.draughthub.com.key -in CollectCCC.pem
Run Code Online (Sandbox Code Playgroud)

~/.csr/www.draughthub.com.key用您创建的私钥的位置替换以发出代码签名证书请求的位置。第二步将提示您输入密码。这是您用于创建请求的密码(和相应的私钥)。


Ale*_*icu 6

我最近经历了这个过程,并且在这个过程中我也遇到了麻烦。从 Sectigo 购买代码签名证书后,我必须:

步骤 1.创建证书请求文件 (.csr) 和证书密钥文件 (.key)。此后,您将拥有 2 个文件,一个扩展名为.key,另一个扩展名为.csr

openssl.exe req -nodes -newkey rsa:3072 -nodes -keyout DESIREDNAME.key -out DESRIREDNAME.csr -subj "/C=COUNTRY_CODE/ST=STATE_NAME/L=CITY_NAME/O=ORGANIZATION_NAME /CN=YOUR_DOMAIN_NAME.com"

步骤 2.使用Sectigo 网站上的.csr文件生成证书。

步骤 3.从 Sectigo 收到的电子邮件中下载您的证书。完成此步骤后,您应该有一个扩展名为.crt的新文件,在我的例子中是user.crt

步骤 4.将.key.crt文件转换为.pfx文件以进行代码签名。

openssl.exe pkcs12 -inkey DESIREDNAME.key -in user.crt -export -out mycertificate.pfx

在此过程中,系统会要求您为.pfx文件设置密码。

步骤 5.使用 SHA1 和 SHA256 对文件进行双重签名。

Signtool.exe 签名 /tr http://timestamp.digicert.com /td sha1 /fd sha1 /f mycertificate.pfx /p MY_CERT_PASSWORD myapp.exe

Signtool.exe 签名 /tr http://timestamp.digicert.com /as /td sha256 /fd sha256 /f mycertificate.pfx /p MY_CERT_PASSWORD myapp.exe

请注意,第二个调用包含/as参数来附加签名。请记住,始终首先使用 SHA1 签名,然后附加 SHA256。

步骤 6.右键单击​​您的文件并选择属性。检查数字签名选项卡。您的文件现在应该已经过数字签名。恭喜!

一些旁注:

第 1 步中,我使用了在C:\Program Files\Git\usr\bin\openssl.exe中找到的openssl.exe,但该程序在第 4 步中失败,出现“找不到证书”错误。我必须从https://slproweb.com/products/Win32OpenSSL.html安装Win64 OpenSSL Light,然后步骤 4按预期工作,最终生成了我的.pfx文件。

我的计算机上没有可用的signtool.exe ,因此从Visual Studio Installer中我选择修改安装,并添加了来自individual Components 的Windows 10 SDK项目之一。然后我在C:\Program Files (x86)\Windows Kits\10\bin\10xxxx\x64\signtool.exe中提供了此文件。

既然我的应用程序已进行数字签名,我就迫不及待地想看到这些 AV 误报消失了:)