代码签名证书,即 Codesigning,是软件开发者/发行者对所要发布的软件进行数字签名的一种数字证书。它支持对 .exe、.cab、.dll、.ocx、.msi、.xpi 和 .xap 等文件进行数字签名。
第一个问题:为何要用代码签名对软件进行数字签名?
我们先看几张可能您也多次遇到过的界面的截图:

或者是这种:

事实上,没有数字签名的软件,不仅仅是在安装的时候有警告,就算是在下载的时候,也会遇到微软 SmartScreen 的抵御,如下截图:

由此可见,如果一个软件在没有数字签名的情况下就公开发布投入市场,那么它是需要多么意志坚定、不畏风险的用户才能坚持从下载、安装、运行等一路不顾电脑的各种风险警告来使用这款软件。很明显,这种没有数字签名的软件从下载开始,就已经在“掉粉”。

那么,为什么微软 Windows 会对这种没有数字签名的软件如此“赶尽杀绝”呢?

  1. 没有数字签名,用户就不知道这个软件的发行者是谁。而软件的安装和运行通常会对电脑系统进行修改,试想一下,面对一个完全陌生的软件,来路未明,不知道它是否是假冒软件,也不知道它将要对您电脑做什么修改、是否带有恶意代码或者病毒,现在就要直接安装在您的电脑中,其实细思极恐。
  2. 没有数字签名,就不知道软件自发布之后是否遭到过恶意修改。数字签名这个时候就相当于一张“封条”,一旦本身具有数字签名的软件代码遭到修改后没有再次进行数字签名,那么该软件的数字签名就会失效,相当于“封条”已经被毁坏,证明这已经不是原本的软件了。
    所以数字签名之于软件发布的重要性不言而喻。

第二个问题:代码签名有哪些类型?

代码签名分为普通的OV代码签名证书和扩展验证的EV代码签名证书。
这两种代码签名证书都可以对软件进行数字签名,不一样的,普通的OV代码签名证书仅仅能够对软件进行数字签名实现基本的发布者身份验证和代码防篡改。
如下,有普通的OV数字签名的软件运行时,跟没有数字签名一样,Windows 会对软件进行拦截,但用户点击了第一个界面中的“更多信息”之后进入到的第二个界面,会看到发行者的单位名称以及“仍要运行”的按钮。

可以让用户在一种比较忐忑的心情中实现软件的安装,但这比完全没有数字签名的软件已经有进步了。而且,当只具有普通OV代码签名证书签署的数字签名的软件的下载量达到一定程度,就可避免这种“Windows 已保护你的电脑”的拦截,即所谓的通过累积下载来获取 Windows 的信誉。但这种通过累计下载获得即时信誉的方式不可控因素太多。

而如果这个被发布的软件是具有EV代码签名证书签署的数字签名,则无论是下载,还是安装,Windows 皆对这个软件进行无条件放行,没有风险警告,没有安装拦截,也没有“发行者未知”的不友好提示,您看到的将直接是用户账户控制界面:

为何 EV 代码签名证书签署的数字签名让 Windows 对软件具有这种“VIP通道”的作用呢?我们不妨从下面几个方面看待这个问题:

  1. EV 代码签名证书执行的是更加严格的审核标准,它对于证书的申请者进行了严格的身份确认,确保证书的使用者身份真实可信;

  2. EV 代码签名证书通常使用更加严格的证书载体来存贮证书,即软件发布者在使用 EV 代码签名证书对软件进行数字签名的时候,需要拿到对应的 eToken 插入到电脑中,输入密码方可进行数字签名,这种方式减少了证书被恶意复制后滥用的风险。

EV 代码签名证书从性质上就已经被微软 Windows 认为值得信赖。所以微软的 SmartScreen 直接对 EV 代码签名证书的数字签名进行立即信任放行。

此外,EV 代码签名证书还支持驱动开发者在申请微软数字签名时创建 WHQL 账号,如下是微软官方发布的 WHQL 认证过程中要求开发者具有 EV 代码签名证书:

所以,如果您是软件发行商,那么环度网信强烈建议您申请 EV代码签名证书来为您的用户提供更好的软件下载、安装、运行体验。