【问题标题】:Signing exe with certificate用证书签署 exe
【发布时间】:2016-03-30 18:14:46
【问题描述】:

我从我们公司的 Windows PKI 服务器(基础设施)获得了 .cer 扩展名证书。

现在我想用这个证书手动签署一个 exe 文件。但是我猜微软的signtool只允许pfx文件对exe文件进行签名。

所以,我想使用 openssl 工具将 .cer 文件转换为 .pfx 文件,我发出的命令是

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile more.crt

但我的问题是如何获取 privateKey.key 文件或如何生成它?

我签署 exe 文件的程序是否正确?

更新

对整个 Windows 服务器 PKI 基础设施和 CertTool 进行了一些阅读。 我有带有私钥的 .cer 文件。 但无法以某种方式找到它。

但能够使用 DigiCertUtil.exe 使用此证书签署我的 exe

干杯,

苏拉夫

【问题讨论】:

  • 在 Windows 上,私钥应该在证书存储中。运行mmc.exe,添加证书管理单元,找到证书,然后导出私钥。
  • 但是如何导出 .cer 文件的密钥?

标签: ssl openssl pki


【解决方案1】:

signtool 可以使用来自 Windows 证书“存储”(显示为带有私钥的证书的条目)或 PFX/P12 文件(包含私钥和证书)的私钥和证书进行签名)。共同的主题是您使用私钥以及证书来签名或解密;仅证书仅包含公钥,是不够的。公钥密码学的全部意义在于,只有私钥“所有者”或获得副本的人才能签名或解密;公钥可以公开分发并用于验证或加密,但没有其他人可以使用公钥来获取私钥,因此私钥仍然是私有的。如果您可以从证书中“生成”私钥,那么攻击者也可以,并且它不会提供任何安全性。

如果您收到证书新生成(由公司 PKI)响应您的请求,您必须已经拥有私钥,因为您发送的请求(称为证书签名请求或 CSR)本身是使用私钥签名的。您需要指定用于生成请求的方法,这将确定您的私钥在哪里以及如何使用它。

如果您收到了应其他人的请求生成的证书,或由 CA 自行发起的证书,他们拥有私钥,您需要从他们那里获取。

请注意,要使 .exe 上的签名具有任何值,您的证书必须明确标记为代码签名证书,并由受信任的 CA 颁发(在您的客户端计算机上)以颁发此类证书.确保您或某人提交的请求指定了这一点。

【讨论】:

  • 感谢 dave 的输入...我自己提出了 PkCS10 类型的请求...我如何获取我的私钥?...我的证书被标记为代码签名证书
  • 正如我所说,这取决于您如何生成请求(和密钥)。 如果您使用 Windows certmgr(或其他 Windows-CNG 应用程序,如 IIS 或 Outlook,但这些应用程序不会进行代码签名),您应该使用 MMC/Certificates 导入新证书(或只是certmgr.msc)在“证书注册请求”下;这为您提供了signtool 可以使用的组合“证书与密钥”条目,或者如果您真的愿意,您可以导出到 PFX。对于任何其他来源,例如 openssl 或 java,说明会有所不同。
  • 我使用 CertReq 工具生成 CSR...我可以使用 DigiCertUtility 使用我的 .cer 文件对 exe 进行签名...不知道这样做是否正确
猜你喜欢
  • 2017-02-21
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
相关资源
最近更新 更多