Windows数字签名 数字签名(代码签名)流程[通俗易懂]数字签名(代码签名)流程出处::这里翻译为数字认证代码。codesign:字面的翻译为代码签名,但是一般的我们称为数字签名,以下的文中均称为数字签名。一数字认证码假如你是软件开发人员,你可能
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Windows数字签名 数字签名(代码签名)流程[通俗易懂],希望还能帮助你们进步!!!
数字签名(代码签名)流程
出处:
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文件是不需要的。
六 对软件数字签名
时间戳服务器,你可以选择下述之一,
-
-
-
1)使用signcode.exe,如下:
signcode.exe -t -spc mycert.spc -v mykey.pvk ""进行数字签名的文件可以是.exe, .dll, .ocx 或者是其他的可执行文件。
2)使用signtool.exe,如下:
如果你没有pfx文件,需要使用以下的命令来将pvk和spc文件合并为pfx,如果没有设置密码的话必须使用pvkimprt.exe来合并。pvk2pfx.exe -pvk mykey.pvk -pi
-spc mycert.spc -pfx mycert.pfx -po
pvkimprt.exe -pfx mycert.spc mycert.pvksigntool.exe sign /f mycert.pfx /p
/t /v ""
以下是使用signtool.exe签名的一个实例:
signtool.exe sign /f mycert.pfx /p
/t /v ""
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
参考:
Code-Signing Best Practices :
===============================================================
一、数字签名
㈠、什么是数字签名?
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 包含以下功能,用于确保您的设备驱动程序和系统文件保持其原始状态的数字签名状态:
㈠、设置驱动程序签名验证选项
在控制面板中打开系统。单击“硬件”选项卡上的“驱动程序签名”。在“文件签名验证”下,单击:
注意
㈡、查看未通过数字验证的驱动程序
依次打开“开始”——“菜单”——“程序”——“附件”——“系统工具”——“系统信息”,或者运行“MSInfo32.exe”。然后展开“软件环境”——“签署的驱动程序”,以查看所有驱动程序的签名状态。在控制面板中打开系统,单击“硬件”选项卡上的“设备管理器”,然后右键单击某一类型设备,在“属性”——“驱动程序”——“驱动程序详尽信息”中,按类别检测其签名状态。
四、系统文件检测程序(SFC.exe)
请参考:SFC—系统文件检测程序命令SystemFileChecker()
五、文件签名验证(Sigverif.exe)
㈠、使用文件签名验证
在计算机上安装新软件时,系统文件和设备驱动程序文件有时会被未经过签名的或不兼容的版本覆盖,导致系统不稳定。随 WindowsXP一起提供的系统文件和设备驱动程序文件都有 Microsoft 数字签名,这表明这种文件都是原始的未修改过的系统文件,或者它们已被 Microsoft 同意可以用于 Windows。使用“文件签名验证”可标示计算机上的未签名验证并查看有关它们的下述信息:
㈡、验证系统文件是否具有数字签名
打开文件签名验证。单击“开始”。
“文件签名验证”检查什么系统文件和设备驱动程序文件已进行数字签名,并显示其查找结果。如果已启用日志记录,则搜索结果还将写入日志文件。
㈢、检查系统文件或非系统文件的数字签名
打开文件签名验证。单击“高级”。在“搜索”选项卡上,单击下述选项之一:单击“确定”,然后单击“开始”。
㈣、文件签名验证程序的使用
单击“开始”、“运行”,键入sigverif,然后单击“确定”。
如果要立刻开始检测所有系统文件的签名验证,单击“开始”。
如果要自定义验证选项,单击“高级”。
1,默认。
勾选“如果有未经过签名的系统文件,请通知我”,则检测所有系统文件。文件类型为.sys、.dll、.ocx、.ttf、.fon和.exe文件。
2,筛选。
勾选“查找其他未经过数字签名的文件”,则可以指定要检测的文件类型,所在位置及是否包含子文件夹。文件类型为.sys、.dll、.ocx、.ttf、.fon和.exe文件。
3,日志。
可以依照自己的情况进行设置。
打开文件签名验证。单击“高级”。在“正在记录”选项卡上,选中“将文件签名验证结果保存到一个日志文件”复选框。单击以下选项之一:在“日志文件名”中,键入日志文件的名称。
使用“文件签名验证”验证系统文件经过数字签名时,搜索结果将被写入该文件。
单击“确定”,然后单击“开始”。
注意