我想尝试对软件可执行文件进行签名。我担心有些事情我搞不清楚。
我将会从 CA 获取证书,但在此之前我想知道我在做什么,所以我做了一个测试:
我创建了一个自签名证书:
makecert -r -ss myPrivateCert -sk c:\test -n "CN=My Company Inc." testCert.cer
然后签署一个可执行文件:
signtool sign /v /s myPrivateCert /n "My Company Inc." /t http://timestamp.verisign.com/scripts/timstamp.dll c:\folder\my_installer.exe
对于这两个命令,我都成功了。
步骤3:“安装测试证书”:http://msdn.microsoft.com/en-us/library/bb756995
成功。
(注意:在文件夹中c:\test
,我放置了从 Microsoft 建议的交叉证书列表中下载的证书,就像VeriSign Class 3 Public Primary Certification Authority - G5.cer
- 我只是猜测我应该这样做。)
我跑certmgr c:\folder\my_installer.exe
我得到了我添加的 3 个证书的列表,其中包括主题、颁发者、序列号......(来自 My Company Inc. 和 Verisign),所以显然一切都很好。
即使在此之后,如果我双击安装程序(或可执行文件),我还是会收到有关未知发布者的 UAC 消息...
那么我还需要做什么才能让该框消失或为制作人显示“我的公司”?而且这仅适用于本地机器,所有操作均手动完成...
为了进行实际测试,我假设我的客户端是 VirtualBox 环境... 那么?下一步:将安装程序移到 VirtualBox 中并运行它?
但是我该如何告诉客户端有关密钥或证书或其他信息?我是否要将 cer 文件与 exe 文件一起复制?我是否必须将其放在特殊位置?我是否要复制任何其他文件?我是否必须再次运行 mmc?用户是否必须执行类似操作?因为从用户的角度来看,这似乎非常复杂……这非常令人困惑……
我假设,如果我从 Verisign 购买真正的证书,它将通过网络进行验证,我不需要做任何其他事情(除了上面的两个命令,减去 -r)?
我在网上找到了很多关于此问题的说明,但每一个都让我像刚开始时一样困惑 - 也许他们每个人都对一些先前的知识有所假设......
答案1
它不“通过网络进行身份验证”(除了可能检查证书吊销列表 (CRL))——根 CA 硬连线到操作系统中,并通过 Windows 更新或操作系统安装盘安装。换句话说,它们是硬盘上的一组静态数据,不能(轻易)修改。
让烦人的方框消失的方法是:
- 相信你的骗子签名 CA(通常是个坏主意,但它会起作用);或者
- 让公众信任的官方根 CA 或其中间机构之一对其进行签名。
您提到了 Verisign。很好。他们是为您提供代码签名证书的几家可能提供商之一。该框仍然出现,因为据我所知,Windows 被编程为自动弹出所有自签名证书的警告。如果您尝试根据自己创建的根 CA 生成 CSR,您可以通过信任您的根 CA 让该框消失,这样就可以了。但随后您必须让您的客户信任您的根 CA,这在大多数情况下会违背目的。因此,公共信任网络是最简单的途径。供应商通常甚至会向您提供有关如何使用他们的服务以及如何签署代码的明确说明。