数字签名(代码签名)流程

出处:

http://www.cnblogs.com/itech/archive/2011/07/21/2110924.html

Authenticode : 这里翻译为数字认证代码。 
code sign : 字面的翻译为代码签名,但是通常的我们称为数字签名,以下的文中均称为数字签名。

一 数字认证码
如果你是软件开发人员,你可能已经知道windows系统和一些浏览器(例如IE,Firefox)使用一种称为数字认证代码的技术来标识软件的发行商,来检查软件没有被病毒影响。如果你的软件没有用数字认证代码签名,用户将会收到一个警告“此软件发行商不能被成功的验证,你是否要继续运行此软件“,很多的用户为了安全起见将放弃对此软件的使用。

如果你的软件是提供给专业的人员使用,结果肯能会更糟。许多公司的IT安全策略禁止没有用数字认证码签名的软件的运行。

同时微软Windows也使用数字签名证书来判断潜在的恶意软件。如果你的setup.exe没有进行数字认证证书的签名,你的软件的名誉将遭受损害。

在Vista系统增加UAC之后,情况变的更糟,如果你的软件没有使用数字认证证书签名,且在运行时需要管理员的权限,则会出现警告对话框”不可识别的程序想访问你的计算机“,这个时候很多的用户可能认为是病毒,会禁止使用你的软件。

二 数字认证码的原理

数字签名代码是一种技术,它使用数字证书来识别软件的发布商和使用hash算法来确保软件的完整性。数字签名使用公共密匙签名书法被创建,它使用两种不同的密匙:公共密匙和私有密匙,我们称其为密匙对。私有密匙一般为拥有者所有,公有密匙对所有的人都可见。

数字签名的过程本质上为:

签名软件对要签名的软件创建hash;

使用发布者的私有密匙来加密软件的hash;

被加密的hash和发布者的数字证书被插入到要签名的软件;

数字签名的验证过程本质上为:

用户对要验证的软件创建hash;

使用发布者的公共密匙来解密被加密的hash;

比较解密的hash和新获得的hash,如果匹配说明签名是正确的,软件没有被修改过;

三 数字签名
数字签名是对软件进行标识的一个流程,它通过对软件增加了发布商的信息来检查软件在发布后是否被修改或受病毒影响。在软件出售前进行签名已经成为了行业范围的专业实践。随着用户的安全意识的提高,现在越来越多的用户限制下载未签名的软件,因此作为专业的软件公司,在软件出售前进行签名已经成为必不可少的一步。

要进行数字签名,需要以下准备:
1)数字证书和密码;
2)数字签名工具;
3)时间戳服务器的URL地址;

四 数字签名工具
数字签名工具, 微软提供了两套数字签名工具,

1)signcode.exe, 从1998年开始使用,随.NET Framework SDK发布。

signcode.exe 数字签名工具

makecert.exe 创建数字证书

cert2spc.exe 将数字证书转化为软件发布者证书格式

2)signtool.exe,随visualstudio 2005及其以后的版本发布。

signtool.exe 数字签名工具

makecert.exe 创建数字证书

cert2spc.exe 将数字证书转化为软件发布者证书格式

pvk2pfx.exe(pvkimprt.exe) 将私有的密匙和软件发布者证书合并为pfx文件,此文件将被signtool.exe使用

上面2中工具的不同是signcode.exe需要输入私有密匙和软件发布者证书(pvk和spc文件),signtool.exe只需要输入由pvk和spc合并产生的一个个人信息交互文件(pfx)。

五 获得数字证书

数字证书,你可以创建自己的数字证书来测试数字签名的流程,但是正式的软件发布,你需要向可信赖的证书颁发机构购买数字证书和密码,例如你可以向以下的证书机构购买Comodo, Globalsign, Thawte and Verisign。

创建自己的数字证书(用来测试)

使用如下命令来创建自己的数字证书:
makecert.exe -sv mykey.pvk -n "CN=Acme Software Inc." mycert.cer你可以将Acme Software Inc.替换为你自己公司的名字。如果mykey.pvk不存在的话,你会要求输入私有密匙的密码,密码可以为空。安全起见最好设置密码,否则别人拿到你的私有密匙后就可以签名了。在上面的命令后,产生了2个文件mykey.pvk和mycert.cer。接下来需要将数字证书(cer)转化为软件发布商证书(spc),命令如下:cert2spc.exe mycert.cer mycert.spc此过程中需要输入私有密匙的密码,创建完成后应该会生成mycert.spc文件,当数字签名时mycert.cer文件是不需要的。

六 对软件数字签名 
时间戳服务器,你可以选择下列之一,
- http://timestamp.verisign.com/scripts/timstamp.dll
- http://timestamp.globalsign.com/scripts/timstamp.dll
- http://timestamp.comodoca.com/authenticode

1)使用signcode.exe,如下:
signcode.exe -t <timestamp URL> -spc mycert.spc -v mykey.pvk "<file to be signed>"进行数字签名的文件可以是.exe, .dll, .ocx 或者是其他的可执行文件。

2)使用signtool.exe,如下:

如果你没有pfx文件,需要使用以下的命令来将pvk和spc文件合并为pfx,如果没有设置密码的话必须使用pvkimprt.exe来合并。pvk2pfx.exe -pvk mykey.pvk -pi <password> -spc mycert.spc -pfx mycert.pfx -po <password>pvkimprt.exe -pfx mycert.spc mycert.pvksigntool.exe sign /f mycert.pfx /p <password> /t <timestamp URL> /v "<file to be signed>" 
以下是使用signtool.exe签名的一个实例:
signtool.exe sign /f mycert.pfx /p <password> /t <timestamp URL> /v "<file to be signed>"

Here is the Sample Output:
The following certificate was selected:
Issued to: SID Software Inc.
Issued by: Thawte Code Signing CA
Expires: 10/16/2011 2:17:15 AM
SHA1 hash: 4374SD894388B9H456E206124G06D9AV1535G12E

Done Adding Additional Store

Attempting to sign: jservice.exe
Successfully signed and timestamped: jservice.exe

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

参考:
http://www.tech-pro.net/code-signing-for-developers.html
http://siddesh-bg.blogspot.com/2008/12/code-signing-process.html

Code-Signing Best Practices :

http://msdn.microsoft.com/en-us/windows/hardware/gg487309.aspx

===============================================================

一、数字签名

㈠、什么是数字签名?

1,数字签名

用于消息、文件或其他数字编码信息创建者的方法,以便将它们的标识绑定到信息中。数字签名信息的过程需要将信息(以及发件人持有的一些秘密信息)传送到称为签名的标记中。数字签名在公钥环境中使用,并且它们能提供认可和完整性服务。

2,特点:

允许您验证文件的发行商。 确认文件自数字签名以来没被更改过。

3,数字签名标准 (DSS):

将“数字签名算法”(DSA) 用作其签名算法并将 SHA-1 用作其消息散列算法的标准。DSA 是只用于生成数字签名而不能用于数据加密的公钥密码。

㈡、如果文件没有有效的数字签名该怎么办?

如果该文件没有有效的数字签名,则无法确保该文件确实来自它所声明的来源,或者无法确保它在发行之后未被篡改过(可能由病毒篡改)。较为安全的做法是,除非您确定该文件的创建者而且知道其内容才可以安全地打开,否则不要打开该文件。有关处理各种文件类型的信息,请查看相关主题。

㈢、有效的数字签名意味着文件是安全的吗?

有效的数字签名并不保证文件的内容就一定无害。您必须自己确定是否应当信任该文件的内容。有关确定是否应当打开已下载的文件的信息,请查看相关主题。

㈣、相关信息

时间戳
由受信任的第三方指定的在特定的时间和日期存在特定消息的证书。在数字环境中,受信任的第三方通过使时间戳服务将时间值附加到消息,然后对结果进行数字签名来为给定的消息生成受信任的时间戳。

安全散列算法 (SHA-1)
生成 160 位散列值的消息摘要散列算法。SHA-1 与在“数字签名标准”(DSS) 中的“数字签名算法”(DSA) 一起用于其他位置中。

散列算法
用来产生一些数据片段(例如消息或会话项)的散列值的算法。好的散列算法具有在输入数据中的更改可以更改结果散列值中每个比特的特性;因此,散列对于检测在诸如消息等大型信息对象中的任何变化很有用。此外,好的散列算法使得构造两个独立的有相同散列的输入不能通过计算方法实现。典型的散列算法包括 MD2、MD4、MD5 和 SHA-1。散列算法也被称为散列函数。

散列
通过将单向数学函数(有时称为散列算法)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则散列也会发生变化。散列可被用于许多操作,包括身份验证和数字签名。散列也称为消息摘要。

基于散列的消息验证模式 (HMAC)
使用加密的散列函数进行消息身份验证的机制。HMAC 可以与所有迭代的加密散列函数一起使用,例如,MS5.SHA-1 与秘密的共享密钥合并。HMAC 的加密强度取决于在其下面的散列函数的属性。

二、Windows 文件保护

  在 Windows 2000 以前的 Windows 版本中,安装除了操作系统之外的软件可能会覆盖一些共享系统文件,诸如动态链接库(.dll 文件)和可执行文件(.exe 文件)。覆盖系统文件后,系统性能会变得无法预测,程序运行不稳定,操作系统也会出现故障。

  在 Windows 2000 和 Windows XP 中,Windows 文件保护可以防止替换受到保护的系统文件,例如 .sys、.dll、.ocx、.ttf、.fon 和 .exe 文件。Windows 文件保护在后台运行,可保护 Windows 安装程序安装的所有文件。

  Windows 文件保护能检测到其他程序要替换或移动受保护的系统文件的企图。Windows 文件保护能检测文件的数字签名,以确定新文件的版本是否为正确的 Microsoft 版本。如果文件版本不正确,Windows 文件保护会用 Dllcache 文件夹或 Windows 中存储的备份文件替换该文件。如果 Windows 文件保护无法定位相应的文件,它会提示您输入该位置。Windows 文件保护还会将事件写入事件日志,注明曾有过文件替换企图。

  默认情况下,Windows 文件保护一直处于启用状态,同时允许 Windows 数字签名文件替换现有文件。目前,签名文件通过以下各项进行分发:

Windows Service Pack
修补程序分发
操作系统升级
Windows Update
Windows 设备管理器/类别安装程序

三、Winows 的驱动程序签名

  为确保质量,Microsoft 已经对 Windows 设备驱动程序和操作系统文件进行了数字签名。Microsoft 的数字签名向您保证某个特定文件已经满足了某个测试级别,并且没有被另一个程序的安装进程修改或覆盖。

  根据管理员对计算机所进行的配置,Windows 可能忽略没有经过数字签名的设备驱动程序,并在它检测到没有数字签名的设备驱动程序时发出警告消息(默认行为),也可能会阻止您安装没有数字签名的设备驱动程序。

  Windows 包含以下功能,用于确保您的设备驱动程序和系统文件保持其原始状态的数字签名状态:

  • Windows 文件保护
  • 系统文件检查程序
  • 文件签名验证

㈠、设置驱动程序签名验证选项

  1. 在控制面板中打开系统。
  2. 单击“硬件”选项卡上的“驱动程序签名”。
  3. 在“文件签名验证”下,单击:
    • “忽略”,允许该计算机上安装所有设备驱动程序,无论其是否具有数字签名。
    • “警告”,当安装程序试图安装没有数字签名的设备驱动程序时将显示警告消息。这是 Windows 的默认行为。
    • “阻止”,阻止安装程序安装没有数字签名的设备驱动程序。

注意

  • 要打开“系统”,请依次单击“开始”、“控制面板”,然后双击“系统”。
  • 如果以管理员或 Administrators 组成员的身份登录,则单击“系统管理员选项”下的“将设置作为系统默认值应用”可将所选设置作为默认设置用于登录该计算机的所有用户。

㈡、查看未通过数字验证的驱动程序

  1. 依次打开“开始”——“菜单”——“程序”——“附件”——“系统工具”——“系统信息”,或者运行“MSInfo32.exe”。然后展开“软件环境”——“签署的驱动程序”,以查看所有驱动程序的签名状态。
  2. 在控制面板中打开系统,单击“硬件”选项卡上的“设备管理器”,然后右键单击某一类型设备,在“属性”——“驱动程序”——“驱动程序详细信息”中,按类别检查其签名状态。

四、系统文件检查程序(SFC.exe)

  请参考:SFC—系统文件检查程序命令 System File Checker(http://blog.sina.com.cn/s/blog_51a4af870100agd3.html)

五、文件签名验证(Sigverif.exe)

㈠、使用文件签名验证

  在计算机上安装新软件时,系统文件和设备驱动程序文件有时会被未经过签名的或不兼容的版本覆盖,导致系统不稳定。随 Windows XP 一起提供的系统文件和设备驱动程序文件都有 Microsoft 数字签名,这表明这些文件都是原始的未更改过的系统文件,或者它们已被 Microsoft 同意可以用于 Windows。使用“文件签名验证”可标识计算机上的未签名验证并查看有关它们的下列信息:

  • 文件明
  • 文件位置
  • 文件的修改日期
  • 文件类型
  • 文件的版本号

㈡、验证系统文件是否具有数字签名

  1. 打开文件签名验证。
  2. 单击“开始”。

    “文件签名验证”检查哪些系统文件和设备驱动程序文件已进行数字签名,并显示其查找结果。如果已启用日志记录,则搜索结果还将写入日志文件。

㈢、检查系统文件或非系统文件的数字签名

  1. 打开文件签名验证。
  2. 单击“高级”。
  3. 在“搜索”选项卡上,单击下列选项之一:
    • 如果有未经过签名的系统文件,请通知我

      只检查 Windows 系统文件和所有设备驱动程序文件,看它们是否有数字签名。

    • 查找其他未经过数字签名的文件

      使您能够指定要检查数字签名的非系统文件的文件类型及所在位置。

  4. 单击“确定”,然后单击“开始”。

㈣、文件签名验证程序的使用

  单击“开始”、“运行”,键入 sigverif,然后单击“确定”。

  如果要立即开始检查所有系统文件的签名验证,单击“开始”。

  如果要自定义验证选项,单击“高级”。

1,默认。

  勾选“如果有未经过签名的系统文件,请通知我”,则检查所有系统文件。文件类型为 .sys.dll.ocx.ttf.fon 和 .exe 文件。

2,筛选。

  勾选“查找其他未经过数字签名的文件”,则可以指定要检查的文件类型,所在位置及是否包含子文件夹。文件类型为.sys.dll.ocx.ttf.fon 和 .exe 文件。

3,日志。

  可以根据自己的情况进行设置。

  1. 打开文件签名验证。
  2. 单击“高级”。
  3. 在“正在记录”选项卡上,选中“将文件签名验证结果保存到一个日志文件”复选框。
  4. 单击以下选项之一:
    • 附加到现有日志文件:将新的搜索结果添加到现有日志文件的末尾。
    • 改写现有日志文件:使用新的日志文件替换现有的日志文件。
  5. 在“日志文件名”中,键入日志文件的名称。

    使用“文件签名验证”验证系统文件经过数字签名时,搜索结果将被写入该文件。

  6. 单击“确定”,然后单击“开始”。

注意

  • 要启动“文件签名验证”,请依次单击“开始”、“运行”,键入 sigverif,然后单击“确定”。
  • 如果只想覆盖日志文件,请依次单击“开始”、“运行”,键入 sigverif /defscan,然后单击“确定”。

Windows数字签名 数字签名(代码签名)流程相关推荐

  1. 数字签名(代码签名)流程和数字签名的验证

    数字签名(代码签名)流程 数字签名(代码签名)流程 Authenticode : 这里翻译为数字认证代码.  code sign : 字面的翻译为代码签名,但是通常的我们称为数字签名,以下的文中均称为 ...

  2. iOS应用签名原理--数字签名?代码签名?双层代码签名?

    数字签名 数字签名(又称公钥数字签名.电子签章等)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法.一套数字签名通常定义两种互补的运算,一个用于签名,另一个 ...

  3. 如何在Windows上为代码签名创建自签名证书

    出自http://www.imooc.com/wenda/detail/577483 由于这篇文章搜索实在费劲,机缘巧合中才找到,为了后面课程学习方便查找,斗胆转载,侵删 慕森王 更新的答案 如果您使 ...

  4. 对 Excel 工作簿中的数字签名和代码签名的说明

    http://support.microsoft.com/kb/820738/zh-cn 转载于:https://www.cnblogs.com/ddlzq/archive/2009/10/22/15 ...

  5. OV代码签名和EV代码签名证书区别

    原文来自:OV代码签名和EV代码签名证书区别_代码签名证书_Gworg 如果代码分发在网络上,则可能会受到侵害.代码可能会在到达用户前被黑客攻击.被其他开发人员盗用,或者因为"身份不明的发布 ...

  6. 内核模式代码签名走查(一)

     17年新年之后,就一直忙着手中的工作,这次的工作是给windows驱动程序编写预安装程序,修改好了INF文件之后,就一直尝试着给驱动进行预安装.结果是折腾了几天,也没有将驱动预安装上,那时候还不 ...

  7. 为什么开发人员需要代码签名证书来保护源代码?

    作为一个应用程序开发人员,在投入如此多时间和精力后,你永远都不会再想为你的最终产品的完整性而担心.为了确保应用程序或内容在没有安全漏洞或经过任何修改的情况下安全抵达终端用户,代码签名证书已经吸引了大量 ...

  8. windows驱动数字签名之WHQL完整流程 | WHQL认证环境部署以及HLK测试

    文章目录 第一部分:windows驱动数字签名之WHQL完整流程 一.驱动数字签名背景 二.驱动程序数字签名解决方案-WHQL认证 1. 对开发者的影响 2. WHQL认证主要作用 三.申请WHQL认 ...

  9. Windows 10驱动签名_win 10驱动数字签名_驱动签名注意事项

    目前对于驱动开发者而言往往面对着一个问题--windows 10驱动数字签名问题,根据Symantec VeriSign代码签名中国区代理商 深圳易维信的客服所介绍,目前颁发的Symantec Cod ...

  10. java安全——数字签名+代码签名

    [0]README 1)本文文字描述转自 core java volume 2, 旨在学习 java安全--数字签名 的基础知识: 2)本文实践内容以及截图笔记均为原创: 3)如果要给予applet更 ...

最新文章

  1. vbs复制自己到tmp目录
  2. html js css倒计时,js+css3倒计时动画特效
  3. 37.cgi网页交互
  4. Rxjs debounce 操作符在 SAP Spartacus 函数节流中的一个实际使用例子
  5. tomcat的wget链接_Linux(jdk安装tomcat安装nginx安装gcc/wget)
  6. EasyUi – 5.修改$.messager.show() 弹出窗口在浏览器顶部中间出现
  7. 9. 工作区和暂存区
  8. oracle递归树查询
  9. python如何导入类里_Python中如何导入类示例详解
  10. SQL Server无法连接客户端的问题
  11. vscode 格式化某一段代码_vscode代码格式化
  12. Php图片验证码显示不出来的解决过程
  13. ALTER TABLE 语句
  14. 网络基础之网络协议篇(转自林海峰老师)
  15. 无需软件,使用copy命令合并FLV文件
  16. Android朋友圈怎么换行,2020年发朋友圈打字怎么换行
  17. Win10系统还原文件默认打开方式
  18. 石家庄阿福卡4G问题
  19. Jenkins部署Git项目
  20. mc是电子计算机的什么键,计算机上的mc是什么键

热门文章

  1. error Target dll has been cancelled debugger aborted
  2. 零中频接收机频率转换图_德国Ramp;S罗德与施瓦茨EMI测试接收机ESR系列
  3. 如何学好游戏编程 二
  4. Spring Boot使用RabbitMQ出现诡异异常:Failed to send reply with payload 'OK',Cannot determine ReplyTo message
  5. 【TcaplusDB知识库】快速上手TDR表的增删查改操作
  6. python PyEnchant(拼写检查)
  7. Java推箱子游戏,文档+源码
  8. sqli-labs(46-49)
  9. uva10066-双塔
  10. 中国省,市,区 json数据