用Signtool为程序进行数字签名

2015年9月8日 | 分类: 开发, 软件 | 标签: , , ,

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

程序有了数字签名可以防止在运行程序时被阻止或警告,如果是要发布的软件需要用公网证书签名才能避免此问题,公网证书一般都价格不菲,这里介绍使用自己制作颁发的证书为程序进行签名,至少让程序属性中出现“数字签名”的选项卡,当买了公网证书时,按同样方法进行签名即可。

本文介绍使用微软的签名工具SignTool进行签名,SignTool使用方法可见地址: http://msdn.microsoft.com/zh-cn/library/8s9b9yaz(v=vs.110).aspx

如果安装过Visual Studio 如2010及以上版本,可以在如下位置找到该工具命令提示符:

开始->Microsoft Visual Studio 2010->Visual Studio Tools-> Visual Studio 命令提示(2010)

也可以自行下载安装该工具包:

Microsoft Windows SDK for Windows 7 and .NET Framework 4 http://www.microsoft.com/en-us/download/details.aspx?id=8279

一、制作根证书,即程序证书的颁发者:

1. 使用makecert命令制作证书,可通过makecert -?或makecert -!命令查看makecert各参数的含义。

makecert -sv root-nile.pvk -ss ADBulkAdmin -n “CN=UsefulShare NileJiang” -r root-nile.cer

说明:-sv私钥文件名,-ss主题的证书存储名称,-n证书颁发对象(这里的“CN=”一定要加上,不然会出现CryptCertStrToNameW的错误),-r证书存储位置。

2. 回车后弹出“创建私钥密码”窗体,设置密码(这个密码在后面还要使用,需要记住)。

2015-9-8 15-00-35

 

3. 点击“确定”后,弹出“输入私钥密码”窗体,输入上一步设置的密码。

2015-9-8 15-01-264. 点击“确定”后,根证书就制作成功了,在SignTool目录下可以找到root-nile.pvk和root-nile.cer文件。

二、制作子证书,即颁发给。

1. 这里仍然使用命令makecert制作证书。

makecert -sv ADBulkAdmin.pvk -iv root-nile.pvk -n CN=ADBulkAdmin -$ commercial -ic root-nile.cer ADBulkAdmin.cer

说明:-sv私钥文件名,-iv根证书的私钥文件,-n证书颁发对象,-$授权范围(用于代码签名),-ic颁发者的证书存储位置。

2. 回车后弹出“创建私钥密码”窗体,设置密码(这个密码在后面还要使用,需要记住)。

2015-9-8 15-15-21

 

3. 点击“确定”后,弹出“输入私钥密码”窗体,输入上一步设置的密码。

2015-9-8 15-16-08

 

4. 点击“确定”后,再次弹出“输入私钥密码”窗体,输入根证书的私钥密码。

2015-9-8 15-16-50

 

5. 点击“确定”后,子证书就制作成功了,在SignTool目录下可以找到ADBulkAdmin.cer和ADBulkAdmin.pvk文件。

三、使用cert2spc生成spc发行者证书,用于生成pfx,然后用signtool签名。

1. 输入命令cert2spc ADBulkAdmin.cer ADBulkAdmin.spc,回车后可在SignTool目录下找到ADBulkAdmin.spc文件。

2015-9-8 15-23-29

 

2. 将pvk和spc文件合并为pfx:

pvk2pfx -pvk ADBulkAdmin.pvk -pi xxxxxx -spc ADBulkAdmin.spc -pfx ADBulkAdmin.pfx -po xxxxxx

3. 以下是可用的时间戳服务器:

http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode

用SignTool进行签名并得到成功的结果:

signtool sign /f ADBulkAdmin.pfx /p xxxxxx /t http://timestamp.globalsign.com/scripts/timstamp.dll /v ADBulkAdmin.exe

2015-9-8 15-35-33

 

4. 进行签名后在程序的属性中可以看到“数字签名”的标签,点击可查看签名和证书的相关信息:

2015-9-8 15-36-11

 

2015-9-8 15-38-14

 

2015-9-8 15-39-00

 

2015-9-8 15-40-41

 

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。

目前还没有任何评论.
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。