如何使用我的证书链创建PFX?

Ian*_*oyd 9 code-signing code-signing-certificate

我正在将数字签名应用于我的可执行文件.使用signtool在Windows XP或Windows Vista:

>signtool.exe sign /f "avatar.pfx" MyApp.exe
Run Code Online (Sandbox Code Playgroud)

自动将整个认证链包含在数字签名中.

与Windows 7启动整个证书链 没有 列入.您必须手动包含以下证书:

  • 签了你的钥匙
  • 签署了签署密钥的证书
  • ...
  • ......直到没有更多的证书要包括在内

我被告知我必须使用/ac带有该signtool实用程序开关来执行此操作.

MSDN文档signtool:

/ ac FileName
指定包含要添加到签名块的其他证书的文件.

如何获取签署证书的证书的文件名?

这更令人困惑,因为我没有任何这样的文件.我有我的数字签名可执行文件,没有嵌入式认证链:

在此输入图像描述


Stackoverflow用户davidcl 有同样的问题.在这个自我回答的答案中,他说我需要

使用包含根证书,中间证书,开发人员证书和私钥的PFX文件进行签名.
创建适当的PFX文件后 - 这本身就是一个奥德赛......

但他没有说明他是如何创建包含整个认证链的PFX的.


也可以看看

emb*_*oss 7

安装OpenSSL for Windows.完成后,您可以在openssl.exe系统的某个位置安装可执行文件.

现在进行如下操作.

  1. openssl pkcs12 -in avatar.pfx -out avatar.pem -nodes

(您需要在此输入.pfx密码)

  1. openssl pkcs12 -in avatar.pfx -out mycert.pem -nodes -clcerts

(又是PW)

  1. openssl x509 -in mycert.pem -out mycert.cer -outform DER

现在打开您的资源管理器并双击mycert.cer.查看详细信息,并在某处讨论发行人.这是发行密钥库的公司,您的下一个目标是获得他们的中间证书和最终的根证书.如果幸运的话,您的证书中会有一个名为"授权信息访问"的扩展名,它会告诉您何处直接获得颁发证书.如果您不是那么幸运,那么您将在"授权信息访问"中找到OCSP访问的URL,或者在扩展名"CRL分发点"中找到CRL的URL.这些至少应该让你对供应商的"主页"有一个模糊的概念.如有疑问,只需谷歌,或再问我:)

如果您在供应商的页面上,则必须注意"CA证书"或"中间证书".您需要下载名称与您在自己的证书的"颁发者"字段中找到的名称完全相同的名称.

现在有趣的部分:您刚刚找到的证书将再次具有"发行人"字段.幸运的是,如果发行人是同一家公司(通常是大型CA如VeriSign的情况),那么您将在当前所在的同一站点上找到相应的证书.如果没有,请重复之前的步骤.

重复这个繁琐的过程,直到找到证书的"主题"字段与其"发行人"字段完全相同的位置.那你就完成了.这是一个所谓的"自签名根证书".

大多数这些证书会在"DER" /"ASN.1" /"X.509"格式 - 如果你有选择,下载"PEM"的格式,否则你将首先需要将证书转换为"PEM"格式通过

openssl x509 -in cert.der -inform DER -out cert.pem
Run Code Online (Sandbox Code Playgroud)

一旦您拥有PEM格式的所有缺失证书

  1. 在文本编辑器中打开步骤1中创建的初始文件avatar.pem.

  2. 在单独的窗口中打开丢失的证书PEM文件

  3. 复制丢失的证书(整个文件,包括"----- BEGIN CERTIFICATE -----"和"----- END CERTIFICATE -----")并将它们附加到avatar.pem

  4. 保存结果

  5. 问题

openssl pkcs12 -export -in avatar.pem -out newavatar.pfx -name""

您必须输入要与新文件一起使用的新密码.

  • 最后,我有一个更简单的方法来获得签署我的证书的证书的`.cer`文件.我得到了我在Windows Vista上签名的应用程序版本,在那里查看了应用程序的数字签名,并能够查看并导入证书到我的证书库.然后我能够将它导出到`.cer`文件并从商店中删除它.但我认为这个答案有效,因为我无法访问在XP或Vista上签名的应用程序版本. (2认同)