签名工具与数字签名

首先准备好必须的工具如下:

制作工具:iexpress.exe 和makecab.exe,
签名工具:cert2spc.exe,makecert.exe,signcode.exe
步骤:
1. 将ocx文件以及第三方dll文件打包成cab文件:

Internet 软件分发单位是“软件包”,它由包含.INF文件或软件分发.OSD文件(或两者都包括)的.CAB文件所组成。

一个分发单位也可以包含软件组件,如 ActiveX 控件(.OCX)、.DLL文件、.EXE文件、Java类文件或小程序。当Web页上OBJECT元素的CODEBASE特性引用包含.INF文件的.

CAB文件时,Internet Explorer将自动把.CAB文件作为软件分发单位下载并安装,每次访问时还会自动检测版本并进行更新。

INF文件是一个文本文件,指定运行控件所需要下载或者呈交的文件(比如.DLL或者其它.OCX)。一个.INF文件就捆绑了.

CAB压缩文件所有的必须文件。 缺省情况下,与现有硬盘中文件版本号相同的文件不被下载。

先自己写了一个inf文件,其中信息包括将.ocx文件,以及相关的.dll文件打包,并下载到文件夹:\WINDOWS\system32,详细标注如下:

[version]
signature=”$CHICAGO$”
AdvancedINF=2.0

[Add.Code]
pcpos.ocx=pcpos.ocx
Comm.dll=comm.dll

[pcpos.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={719A1D6E-7099-4123-9D63-F0118AFF2D61}
DestDir=11
FileVersion=1,0,0,1

[Comm.dll]

file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,0,0,1

[RegisterFiles]
%11%\pcpos.ocx

注释:
“thiscab” 是一个关键字,意指包含该INF的CAB文件。也可以从网上下载所需要的DLL文件,只要指定一个HTTP 网址即可,如:
file-win32-x86=http://www.mysite.com/mydir/NEEDED.DLL
关键字”file-win32-x86″ 指定平台是 x86。

文件版本号可见属性。

“DestDir”指的是装载目录或者文件的地址: 11 指定为系统目录 WINDOWS/SYSTEM32;
“clsid” 指的是要安装控件的CLSID。

制作cab:

使用\WINDOWS\system32\iexpress.exe。
1)        选择“Create new Self Extraction Directive file”,点击下一步。
2)        选择“Create compressed files only(ActiveX Installs)”,点击下一步。
3)        点击Add,文件添加(pcpos.ocx,pcpos.dll,comm.dll,tcpclnt.dll),点击下一步。
4)        点击Browse,输入.CAB文件的存放地址(包含所取文件名),这里取TestCAB.CAB,并且要选中 “Store files using Long File Name inside Package”。点击下一步。
5)        选择“Don’t save”,一直点击下一步,直到完成。

注意:
如果控件已经在客户机注册,并且不是通过.CAB的方式注册,那么通过.CAB自动注册的时候,该控件将无法被更新。必须先手动删除该文件。

2. 对CAB文件进行数字签名

传说中数字签名之后就可以不出现提示而自动下载,所以也试试:
在\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin 中间有三个小工具,就用他们来实现数字签名。

1.Makecert.exe —证书创建工具
2.Cert2Spc.exe —发行者证书测试工具
3.Signcode.exe —文件签名工具

步骤:
1)        makecert -ss name -n “CN=公司名” -sv d:\pos.pvk -r d:\pos.cer 其中sk-表示主题的密钥容器位置,ss-主题的证书存储名称, n-证书颁发对象,r-证书存储位置,-sv 导出私钥文件(为了签名使用)。

注意:这个时候会让输入三次密码,三次要完全一致。
2)        使用Cert2Spc生成spc发行者证书(可选):cert2spc d:\pos.cer c:\pos.spc
3)        双击signcode,不带参数会启动签名向导。先选择要签名文件,下一步,选择“自定义”,
下一步,选择“从文件选择”,添加刚生成的pos.cer证书,下一步,选择刚生成的私钥pos.pvk,再下一步,可spc证书,再一直下一步。添加时间戳,在时间戳填入
http://timestamp.verisign.com/scripts/timstamp.dll

http://timestamp.verisign.com/scripts/timstamp.dll TestCAB.CAB

我的环境是2003+VS2008,步骤如下:
1) iexpress.exe向导,添加需要的文件生成CAB包;
2) D:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools>makecert
-ss zzy -n “CN=China Source” -sv e:\zzy.pvk -r e:\zzy.cer
Succeeded
3) C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin>signtool.exe signwizard
使用签名向导完成相关签名
再下一步完成。

这样就对CAB文件进行了签名,但是这个时候点击这个文件会发现证书不可用,原因是证书没有安装。

文件属性->数字证书->详细信息-〉查看证书-〉安装证书,进入安装证书向导,存放区域选择“受信任的根证书颁发机构”,点击完成即可。

相关资料:
签名的.cab 文件的步骤
Microsoft Authenticode

 

签名的.cab 文件的步骤

  1. The Microsoft .NET Framework software development kit (SDK) 1.1 includes the Crypto API files that you must have to sign a .cab file. To download the SDK, visit the following Microsoft Web site:http://www.microsoft.com/downloads/details.aspx?FamilyId=9B3A2CA6-3647-4070-9F41-A333C6B9181D&displaylang=en
  2. Use the following steps to sign and validate the .cab file:
    • Type the following at a command prompt to create a private key file, Mycert.pvk.
      1. makecert -sv “mycert.pvk” -n “CN=My Company” mycert.cer
    • The file created in this step, Mycert.cer, is used to create an .spc file. Type the password in the dialog box.

    • Create an .spc file from the certificate file with the correct password. To do so, type the following line at a command prompt:
  1. cert2spc mycert.cer mycert.spc

Note that this step involves creation of a test private key. Alternatively, valid certificates can be created through Microsoft Certificate Server for Intranet use or purchased from external vendors for Internet use.

    • Use the key information to sign the .cab file:
      1. signcode -v mycert.pvk -spc mycert.spc new.cab -t [Timestamp server URL]
    • For more information about signtool, visit the following Microsoft Developer Network (MSDN) Web site:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/signtool.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/signtool.asp)

Note

      Specify the timestamp server URL at this step. The timestamp server URL provides a place to enter or edit the location of a timestamp server. A timestamp server validates the date and time that the cabinet file was signed. Certificate files can expire after a certain period of time. Contact your certificate file provider (certificate authority) for the location of their timestamp server.
      Starting with Platform SDK February 2003, signcode.exe has been replaced with

signtool.exe.

3. Follow this procedure to validate a .cab file:

  1. Type the following at a command prompt to run Setreg.exe on the client system with the TRUE value so that the test certificates are recognized:
    setreg -q 1 TRUE
  2. Run Checktrust.exe to ensure that the CAB file is signing correctly:
    chktrust new.cab

Expected results

mycab.cab: Succeeded

发表评论