将代码签名证书从 Sectigo/Comodo 转换为实际可用的 .pfx 文件
Convert a code signing certificate from Sectigo/Comodo into a .pfx file that is actually usable
当我尝试使用 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 收到的错误消息:
我也尝试将 CollectCCC
导入 IE,但失败了。
免责声明:我不推荐使用 Sectigo and/or Comodo 作为代码签名证书!我和他们的经历太糟糕了!为获得更好的服务而付出更多是值得的。
经过大量谷歌搜索,我最终确定 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
替换为您创建的用于发出代码签名证书请求的私钥的位置。第二步将提示您输入密码。这是您用于创建请求的密码(和相应的私钥)。
我最近经历了这个过程,我也遇到了这个过程的麻烦。从 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 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 步。 右键单击您的文件和 select 属性。检查数字签名选项卡。您的文件现在应该进行了数字签名。恭喜!
一些旁注:
在第 1 步 我使用了 openssl.exe 在 C:\Program Files\Git\usr\bin\openssl.exe 但是这个在 第 4 步 失败并出现“找不到证书”错误。我必须从 https://slproweb.com/products/Win32OpenSSL.html 安装 Win64 OpenSSL Light 然后 Step 4 按预期工作并且我的 .pfx文件终于生成了。
我的机器上没有 signtool.exe,所以从 Visual Studio 安装程序 我 selected 修改安装,我从 Individual Components 添加了 Windows 10 SDK 项目之一。然后我在 C:\Program Files (x86)\Windows Kits\binxxxx\x64\signtool.exe.
中找到了这个文件
迫不及待地想看到那些 AV 误报消失了,因为我的应用程序已经过数字签名:)
当我尝试使用 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 收到的错误消息:
我也尝试将 CollectCCC
导入 IE,但失败了。
免责声明:我不推荐使用 Sectigo and/or Comodo 作为代码签名证书!我和他们的经历太糟糕了!为获得更好的服务而付出更多是值得的。
经过大量谷歌搜索,我最终确定 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
替换为您创建的用于发出代码签名证书请求的私钥的位置。第二步将提示您输入密码。这是您用于创建请求的密码(和相应的私钥)。
我最近经历了这个过程,我也遇到了这个过程的麻烦。从 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 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 步。 右键单击您的文件和 select 属性。检查数字签名选项卡。您的文件现在应该进行了数字签名。恭喜!
一些旁注:
在第 1 步 我使用了 openssl.exe 在 C:\Program Files\Git\usr\bin\openssl.exe 但是这个在 第 4 步 失败并出现“找不到证书”错误。我必须从 https://slproweb.com/products/Win32OpenSSL.html 安装 Win64 OpenSSL Light 然后 Step 4 按预期工作并且我的 .pfx文件终于生成了。
我的机器上没有 signtool.exe,所以从 Visual Studio 安装程序 我 selected 修改安装,我从 Individual Components 添加了 Windows 10 SDK 项目之一。然后我在 C:\Program Files (x86)\Windows Kits\binxxxx\x64\signtool.exe.
中找到了这个文件迫不及待地想看到那些 AV 误报消失了,因为我的应用程序已经过数字签名:)