最近在研究代码签名技术, 花了不少时间, 下面记录一下从了解代码签名到获得一个有效的代码签名证书的过程.
首先说一下什么是”代码签名”:
代码签名即软件的所有者使用受全球认可的第三方发放的能证明其真实身份的 “代码签名数字证书” 为其开发的软件添加一个标记, 即所谓的 “签名”, 因而增强了可信度.
耳听为虚, 眼见为实, 有图有真象.
代码签名的作用:
证明软件在发行和传播过程中未经篡改, 增强安全性.
当软件中有涉及到安全方面或底层代码的地方, 如果没有代码签名, 系统会弹出警示框是否要继续安装或执行, 而签名之后的代码便会顺利通过安全检测, 不会弹出警示框.
代码签名的对象:
按照不同的系统和文件类型可以为多种文件进行签名. 比如微软常见的 .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> 标签之前加上
1 |
<meta name="certumid" content="xxxxxxxxxxxxxxxxxxxxxxxxx" /> |
xxxxxx…. 为那个base64文件名, 不带后缀名.
完成后回复邮件通知他们你已安成此步, 再过个把小时他们验证通过就会给你发放证书了.
通过后登录他们的网站, 在 “Certificates’ management” 项中就可以看到申请到的证书内容了, 点击展开此项, 下面有几个按钮.
点击 “Install online” , 此时证书就已安装到您的浏览器中了. 现在打开浏览器选项, 找到证书, 点击导出, 保存证书备份以便使用.
此时需要设定保护证书的密码, 请牢记密码.
确定之后证书便被保存为 .p12 格式了, 这就是我们最终需要用到的代码签名证书.
进行代码签名:
代码签名的格式
1 |
signtool.exe sign /d "已签名内容的说明" /du "为已签名文档的详细说明指定统一资源定位器 (URL)" /f 证书全名 /p 证书密码 /t 时间戳服务器 /ph 要签名的文件全名 |
例如:
1 |
signtool.exe sign /d "ExtLibrary by www.itnmg.net" /du "http://www.itmg.net/extlibrary" /f itnmg.net.pfx /p ****** /t http://timestamp.verisign.com/scripts/timstamp.dll /ph extlibrary.dll |
签名之后 dll 的属性标签中就会多出一项 “数字签名” 选项卡, 查看详细内容就会看到代码签名证书, 如果显示 “此数字签名正常” 就表示我们的证书获得认可, 此程序没有被篡改.
至此, 代码签名就完成了. 最后请注意证书过期后要及时更新.
证书过期前30天会有邮件通知,证书只能重新申请, 一般再次申请不需要提供身份证明文件, 只需重新验证域名即可.
唉,现在到处寻找有没有相关的免费方式。。。
实在不行就不弄了,应该没啥大影响吧。。。
你好,现在不能免费申请了,请问您还有免费获取的网站吗?谢谢
早都不能申请了,目前没有免费的,花钱买吧。
貌似现在真的是不能免费申请了,注册时也没有代码签名的项可选。只能花14欧元购买了。
这个证书是用于网站还是软件
用于代码签名
这个证书和沃通的那种付费证书有什么区别,证书是普遍承认的吗?
xp sp3 以上的系统默认包含这家公司的根证书.
3天了还是等待提交。。发邮箱ccp@certum.pl标题是订单号,内容发什么
要发什么在给你的邮件里都有写. 按他的要求提供就好了.
主页中的try it 没有了,我想问下我填写了表单,但是没有收到确认电子邮件,请问这个网站还能申请到免费证书吗?
看了一下, 页面改版了, 最新的申请地址.
https://en.sklep.unizeto.pl/test_certificates
填好表格后会在3天内收到回复.
请问这个怎么申请啊,,我申请不来,大神做一个视频可以吗?? 我的QQ:1003363023
申请流程没什么变化, 网页加载可能很慢, 要耐心等待.
可是我一直没收到信请问这是怎么回事
请问楼主QQ是多少啊,方便加一下吗??
3375583
现在是不是没有免费的了?这个签名签了 是不是软件就不会报毒啊
一直显示404, 看来是出了什么问题, 过几天再关注一下. 这个签名只是证明程序没有被篡改. 报不报毒要看你的代码是不是恶意的.
打错了是怎么续期
请问怎么续费呀 谷歌翻译的不是很清楚
这类免费的东西应该都是在到期前一段时间会邮件通知的,按邮件提示做就好了。具体是什么样我也不大清楚,我的也还没到期。
看你的图上面的过期时间应该是2014一月17日呀
这断时间太忙,都把这个忘了,过期了… 我试了一下, 重新申请试用就可以. 提供原来的私钥, 然后直接激活证书,不需要再提交资料了.
抱歉, 证书过期之后要重新提交身份证明,通过审核才能再次试用. 我会等年后申请,再记录下完整步骤.