我的目标是使用证书在Windows上签署未签名的可执行文件。根据我的一般知识,我知道我需要一个公钥和私钥对来进行数字签名。我还安装了Windows SDK,它提供signtool.exe
和makecert.exe
。
我已经在线获得了证书,包括CER,PEM和CRT文件。
我现在的问题是如何使用这些工具和证书文件来签署可执行文件。根据{{3}},CRT文件是私钥。根据我到目前为止所学到的,CER和PEM文件基本相同,但编码不同。他们有什么用?他们是公钥吗?我如何签署我的可执行文件?
编辑:我已尝试将CRT文件安装到证书存储区,然后使用该证书进行签名:
"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /debug /fd SHA256 /a /n "<Issued_To>" /t http://timestamp.comodoca.com/authenticode <Filename>
此处<Issued_To>
已替换为证书中的数据,<Filename>
是我要签名的文件的名称。我从signtool获得的输出如下:
The following certificates were considered:
...
Issued to: ...
Issued by: Certum Code Signing CA SHA2
Expires: Thu Oct 12 14:37:04 2017
SHA1 hash: BA081A67D3F2DDDC9268121DCBA04F43D6CD37FB
...
After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Subject Name filter, 1 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.
答案 0 :(得分:2)
这解决了我的问题:http://www.anse.de/programming/code-signing-for-open-source-executable
我使用Firefox将证书导出为PK2文件。然后我将此证书安装在&#34; Personal&#34; Windows上的证书存储区。之后我可以使用上述命令签署我的可执行文件:
signtool sign /fd SHA256 /a /n "<Issued_To>" /t http://timestamp.comodoca.com/authenticode <Filename>
此处<Issued_To>
与证书中的值匹配,<Filename>
是要签名的文件的名称。之后,可执行文件已签名。
答案 1 :(得分:0)
对于它的价值,我购买了Certum Cloud Signing用于开源项目,这就是我如何使其工作的方法。 (这花了我5个工作日的邮件时间,尝试和错误以及使用Google翻译波兰文档,所以也许我可以节省一些时间给某人)
您首先需要提供个人信息,收到激活令牌后,您只有24小时的时间来激活它。 (即使未指定此信息,也不要像我一样让时间过去),所以:
在如下所示的链接中使用“秘密重新获得对SimplySign服务的访问”:https://cloudsign.webnotarius.pl/arc/app/resetseed?token= ...
在那里,您将获得一个应该在SimplySign移动应用程序上使用的新代码(我相信,重置按钮)。
我无法在Google Play上找到SimplySign移动应用。因此,我使用桌面浏览器找到了该应用程序(显示“此应用程序与您的设备不兼容”和/或国家/地区...),然后使用Chrome扩展程序下载了APK,然后手动将其安装在手机上。>
设置好移动应用后,它应每分钟左右生成6位数的令牌。
现在在Windows上安装SimplySign Desktop。使用您的电子邮件和手机上的6位数令牌登录。当它说“状态:已连接”时,它已经安装了虚拟智能卡和您的证书。 SimplySign必须保持连接状态,才能使用证书。
signtool.exe sign /n "Open Source Developer, Your Name" /fd SHA256 YourApp.exe
如果您不使用/fd SHA256
,则会得到:
SignTool Error: SignedCode::Sign returned error: 0x80090027
The parameter is incorrect.
SignTool Error: An error occurred while attempting to sign: YourApp.exe
如果您未登录SimplySign,则会得到:
After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Subject Name filter, 1 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.
注意:无需安装proCertum SmartSign
应用。