代码签名证书是对开发的代码软件进行的数字签名认证服务。拥有代码签名的软件程序可以减少下载时弹出的安全警告,避免被系统拦截,并且保证代码完整性,使开发厂商信息对下载用户公开可见,从而建立良好的软件品牌信誉度。
代码签名证书为软件开发商提供了一个理想的解决方案,使得软件开发商能对其软件代码进行数字签名。通过对代码的数字签名来标识软件来源以及软件开发者的真实身份,保证代码在签名之后不被恶意篡改。使用户在下载已经签名的代码时,能够有效的验证该代码的可信度。
要想实现代码签名必须首先获得数字证书才能使用这些功能。并且代码签名证书针对不同的平台,其代码证书品种也不尽相同,因此使用者最好事先咨询正规的代码签名证书的颁发机构,可以针对不同平台的代码签名应用,提供不同的代码签名证书产品及应用解决方案。
从用户角度,可以通过代码签名服务鉴别软件的发布者及软件在传输过程中是否被篡改。如果某软件在用户计算机上执行后造成恶性后果,由于代码签名服务的可审计性,用户可依法向软件发布者索取赔偿,将很好的制止软件开发者发布攻击性代码的行为。
从软件开发者和 Web 管理者的角度,利用代码签名的抗伪造性,可为其商标和产品建立一定信誉。利用可信代码服务,一方面开发者可借助代码签名获取更高级别权限的 API,设计各种功能强大的控件和桌面应用程序来创建出丰富多彩的页面,另一方面用户也可以理性地选择所需下载的软件包。并且利用代码签名技术,还可以大大减少客户端防护软件误报病毒或恶意程序的可能性,使用户在多次成功下载并运行具有代码签名的软件后,和开发者间的信任关系得到巩固。
从客户端安全防护的角度,经过代码签名认证过的程序能够获得更高的系统 API 授权。一些硬件驱动文件或 64 位操作系统内核驱动文件也要求必须首先经过代码签名才能够在客户端上正确的加载执行。
防护白名单
代码签名证书的安全防护软件白名单
相信很多软件开发者都会面临一些困扰,那就是刚开发好的程序或为程序升级新版本后,发布到网上提供用户下载的时候却被第三方安全防护软件误报拦截了。对于第三方安全防护软件的误报拦截问题,代码签名证书也可以起到一定作用,避免误报情况的产生。
各大安全防护软件厂商也会基于证书颁发机构的认证结果,为已经添加有效数字签名的代码提升运行等级。代码签名证书用户在获取到签名证书后,还可以与安全防护软件厂商协商,依据其代码签名证书获取安全防护软件厂商的白名单免查杀特权。但安全防护软件的白名单并不是万能的。如果一旦发现并核实白名单中的数字证书被用于签名恶意代码,数字证书即会被列入到黑名单当中。使用该证书签名的所有程序都不再受第三方安全防护软件信任。同时,安全防护软件厂商可以配合公安机关进行举证,由证书颁发机构提供颁发证书时获取的第三方认证的证书持有人信息,追查到代码签名证书的真实持有者,使得通过法律途径追究恶意软件发布者的刑事责任成为可能。
功能实现原理
代码签名的基础是 PKI 安全体系。代码签名证书由签名证书私钥和公钥证书两部分组成。私钥用于代码的签名,公钥用于私钥签名的验证和证书持有者的身份识别。
申请数字证书
1. 发布者从 CA 机构申请数字证书;
发布者开发出代码
2. 发布者开发出代码;借助代码签名工具,发布者将使用 MD5 或 SHA 算法产生代码的哈希值,然后用代码签名证书私钥对该哈希值签名,从而产生一个包含代码签名和软件发布者的签名证书的软件包;
运行环境访问到该软件包
3. 用户的运行环境访问到该软件包,并检验软件发布者的代码签名数字证书的有效性。操作系统或浏览器通过可信根证书列表验证代码签名证书的有效性,确认发布者身份可信,软件未被篡改。
使用代码签名
4. 用户的运行环境使用代码签名数字证书中含有的公钥解密被签名的哈希值;
新产生一个原代码的哈希值
5. 用户的运行环境使用同样的算法新产生一个原代码的哈希值;
用户的运行环境比较两个哈希值
6. 用户的运行环境比较两个哈希值。如果相同,将发出通知声明代码已验证通过。所以用户可以相信该代码确实由证书拥有者发布,并且未经篡改。
整个过程对用户完全透明,用户将可以看到软件发布者提示信息,并可以选择是否信任该软件发布者。在选择信任软件发布者之后,运行所有该软件发布者签名的程序时将可以不再收到任何提示信息。