最近在研究代码签名技术, 花了不少时间, 下面记录一下从了解代码签名到获得一个有效的代码签名证书的过程.
首先说一下什么是”代码签名”:
代码签名即软件的所有者使用受全球认可的第三方发放的能证明其真实身份的 “代码签名数字证书” 为其开发的软件添加一个标记, 即所谓的 “签名”, 因而增强了可信度.
耳听为虚, 眼见为实, 有图有真象.
代码签名的作用:
证明软件在发行和传播过程中未经篡改, 增强安全性.
当软件中有涉及到安全方面或底层代码的地方, 如果没有代码签名, 系统会弹出警示框是否要继续安装或执行, 而签名之后的代码便会顺利通过安全检测, 不会弹出警示框.
代码签名的对象:
按照不同的系统和文件类型可以为多种文件进行签名. 比如微软常见的 .exe, .dll, .cab, .msi, .ocx, .sys, .cat, .vbs 等文件类型. Android 系统中的 .apk 文件. Java 中的 .jar 文件等.
代码签名需要的工具:
代码签名证书: 通过 sn.exe 自制证书或申请免费证书, 稍后重点介绍申请免费证书.
签名工具: .net 中为 SignTool.exe, 已随 Visual Studio 或 Windows SDK 安装.
时间戳服务器: 网络上有很多提供免费时间戳服务的机构, 最著名的有 Symantec 的时间戳服务, 下面列举一些常用的.
http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
http://www.startssl.com/timestamp
http://timestamp.wosign.com/timestamp
http://timestamp.globalsign.com/scripts/timstamp.dll
http://www.trustcenter.de/codesigning/timestamp
申请代码签名证书:
Certum 是一家来自波兰的证书颁发机构, 他们提供免费的开源代码签名证书, 有效期为一年, 到期后可以续延. 使用此证书必须遵守开源协议. 申请地址为 : http://www.certum.eu/certum/cert,offer_en_open_source_cs.xml
如图
点击 “Try it” , 添好申请表单, 其中 “Choose a product *” 项选 “Open Source Code Signing”, 提交后会收到一封确认邮件.
点击邮件中的确认链接确认, 这一步将产生一个私钥证书安装到浏览器中, 此时要注意记住你所使用的浏览器, 推荐 firefox 或 ie, 最后一步安装数字证书时仍要使用这一步产生的私钥, 所以要用同一款浏览器.
确认之后会收到另一封邮件, 要求提供可以证明真实身份的证件拷贝, 我这里使用身份证扫描件, 发送到其指定的邮箱, 以提交表单后产生的订单号为标题.
很快就能得到他们的回复, 通过后, 要求在你填写表单时所添的网站中添加一个以一长串base64字符为名字的html文件, 同时在主页 </head> 标签之前加上
xxxxxx…. 为那个base64文件名, 不带后缀名.
完成后回复邮件通知他们你已安成此步, 再过个把小时他们验证通过就会给你发放证书了.
通过后登录他们的网站, 在 “Certificates’ management” 项中就可以看到申请到的证书内容了, 点击展开此项, 下面有几个按钮.
点击 “Install online” , 此时证书就已安装到您的浏览器中了. 现在打开浏览器选项, 找到证书, 点击导出, 保存证书备份以便使用.
此时需要设定保护证书的密码, 请牢记密码.
确定之后证书便被保存为 .p12 格式了, 这就是我们最终需要用到的代码签名证书.
进行代码签名:
代码签名的格式
例如:
签名之后 dll 的属性标签中就会多出一项 “数字签名” 选项卡, 查看详细内容就会看到代码签名证书, 如果显示 “此数字签名正常” 就表示我们的证书获得认可, 此程序没有被篡改.
至此, 代码签名就完成了. 最后请注意证书过期后要及时更新.
证书过期前30天会有邮件通知,证书只能重新申请, 一般再次申请不需要提供身份证明文件, 只需重新验证域名即可.