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

19
当我试图使用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.

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

这是我从IE获得的错误消息: IE error message

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

声明:我不建议使用Sectigo和/或Comodo进行代码签名证书! 我与他们的经历很糟糕! 付出更多的代价以获得更好的服务是值得的。

3个回答

49
在大量搜索后,我最终弄清楚了CollectCCC文件是.p7s类型的。 你可以使用以下命令(这是一个两步骤过程)使用openssl.p7s文件转换为.pfx文件(用于签署二进制文件)。
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

在第二步中,系统会提示您输入密码。这是您用来创建证书请求(及相应私钥)时使用的密码。请将~/.csr/www.draughthub.com.key替换为您创建的私钥的位置。


1
谢天谢地,我终于找到了它。我真的尝试了所有可能的openssl命令组合。 - Paolo Brandoli
1
Sectigo/Comodo是我使用过的最糟糕的垃圾服务。感谢他们甚至不告诉我们该死的文件格式,就提供了这个服务。 - NateS
1
感谢您的帖子!我同意@NateS的观点,Sectigo/Comodo真的很糟糕。在所有关于验证我的公司(这花了3个月)的麻烦之后,他们给了我一个没有说明、没有扩展名、没有关于其格式的信息的随机二进制文件。真是个笑话。不幸的是,大多数人(像我一样)直到他们最终登上像这样的StackOverflow页面才会知道这一点。祝其他不幸成为他们客户的人好运。 - Jimmie Tyrrell
1
谢谢!这表明Sertigo没有对他们的电子邮件证书业务进行适当的投资肯定有原因。对于一个相对不知名的企业来说,这可能是容易赚钱的方式。然而,就安全性而言,不选择第一个廉价选项无论如何都是一件好事。如果在获取这样的证书时他们使用这种经验,他们的内部安全政策/实践会是什么样的呢? - Rutger

6

最近我也经历了这个过程,并且在此过程中遇到了一些问题。 在从Sectigo购买代码签名证书后,我需要执行以下步骤:

第1步。 创建一个证书请求文件(.csr)和证书密钥文件(.key)。 这样做后,您将有两个文件,一个带有.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 sign /tr http://timestamp.digicert.com /td sha1 /fd sha1 /f mycertificate.pfx /p MY_CERT_PASSWORD myapp.exe

signtool.exe sign /tr http://timestamp.digicert.com /as /td sha256 /fd sha256 /f mycertificate.pfx /p MY_CERT_PASSWORD myapp.exe

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

第6步。 右键单击您的文件并选择“属性”。 检查数字签名选项卡。 现在,您的文件应已经得到数字签名。 祝贺你!

一些注:

第一步中,我使用了一个在C:\Program Files\Git\usr\bin\openssl.exe中找到的openssl.exe,但是在第四步时出现了“找不到证书”的错误。我不得不从https://slproweb.com/products/Win32OpenSSL.html下载并安装了Win64 OpenSSL Light,然后第4步正常工作,并且我的.pfx文件最终生成。

我在计算机上没有signtool.exe,所以我从Visual Studio Installer中选择修改安装,并添加了一个Windows 10 SDK项目从Individual Components中。然后,在C:\Program Files (x86)\Windows Kits\10\bin\10xxxx\x64\signtool.exe中就可以找到这个文件了。

迫不及待地想看到那些虚假阳性消失了,因为我的应用程序现在已经数字签名了 :)


好吧,这并不容易,因为我买不起 EV 代码签名证书 :( 但是比没有签名要好得多。 - Alexandru Dicu

1
我曾经遇到过这个问题... 我不得不更新一个“代码证书”,在每一步中,我都遇到了Sectigo的困难...(真的很烦人...)最后,在“最后”一步,我按照他们的指示“下载”证书,结果发现自己有了一个“CollectCCC”文件,但没有更多的解释(这些Sectigo家伙真是冠军!)。我再次联系技术支持,他们要求我联系我购买证书的中间公司以完成操作。我和技术人员交谈,他给了我一个提示,就是要做与他们在电子邮件中说的完全相反的事情(他们要求使用Internet Explorer(忘了它)或Firefox来下载文件... 但如果你实际上使用Chrome,你下载的文件不是“CollectCCC”而是一个有效的.crt文件!!!我已经通过我的供应商的技术支持进行了测试,如果你做与他们所说的相反的事情(使用Chrome),它确实可以工作!!!哇!

目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
谢谢,这正是我的问题... - Nick B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接