1.Introduction
Internet 软件分发单位是“软件包”,它由包含.INF文件或软件分发.OSD文件(或两者都包括)的.CAB文件所组成。一个分发单位也可以包含软件组件,如 ActiveX 控件(.OCX)、.DLL文件、.EXE文件、Java类文件或小程序。当Web页上OBJECT元素的CODEBASE特性引用包含.INF文件的. CAB文件时,Internet Explorer将自动把.CAB文件作为软件分发单位下载并安装,每次访问时还会自动检测版本并进行更新。INF文件是一个文本文件,指定运行控件所需要下载或者呈交的文件(比如.DLL或者其它.OCX)。一个.INF文件就捆绑了.
2.Download Tools
Cabinet SDK:Official Website
makecab.exe
iexpress.exe
Signature Tools:
cert2spc.exe 将cer格式证书转换成spc格式证书,即PKCS #7证书。
makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥和公钥
SignTool.exe 将证书签署到ocx上去
3.Make CAB
Step1:Make INF File
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。
Step2:Create CAB File
1.生成inf文件,放在和要打包的文件同一目录下。
2. 制作cab:
使用\WINDOWS\system32\iexpress.exe,也可以在命令行中输入iexpress进行调用。
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文件的存放地址(包含所取文件名,需要符合8.3规则,也就是文件名不能超过8个字符,扩展名不能超过3个字符),这里取TestCAB.CAB,并且要选中 “Store files using Long File Name inside Package”。点击下一步。
5) 选择“Don’t save”,一直点击下一步,直到完成。
注意:
如果控件已经在客户机注册,并且不是通过.CAB的方式注册,那么通过.CAB自动注册的时候,该控件将无法被更新。必须先手动删除该文件
Step3:Signature the CAB File
How to Digitally Sign Microsoft Files
在\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin 中间有三个小工具,就用他们来实现数字签名。
1.Makecert.exe ---证书创建工具
2.Cert2Spc.exe ---发行者证书测试工具
3.Signcode.exe ---文件签名工具
申请证书
要使用到makecert工具,在VS2005目录下搜索可以搜索到。
在命令提示行中执行
- makecert -sk myNewKey -r -n "CN=发证机关的名字,OU=Certification,O=公司名字,E=name@email.com" -ss my myNew.cer
- cert2spc myNew.cer myNew.spc
其中sk-表示主题的密钥容器位置,ss-主题的证书存储名称, n-证书颁发对象,r-证书存储位置,-sv 导出私钥文件(为了签名使用)。
注意:这个时候会让输入三次密码,三次要完全一致。
使用Cert2Spc生成spc发行者证书(可选)
makecert具体使用帮助可参考创建证书的工具(makecert.exe)
签名
要使用到signtool工具,也可以在VS2005目录下找到。
signtool工具有多种使用模式,下面使用的是带UI的向导模式。
在命令提示行中执行
- signtool signwizard
之后进入signcodewizard:
- step1.选择要签名的cab文件
- step2.自定义
- step3.从文件中选择 myNew.spc
- step4.csp中的私钥/密钥容器:myNewKey
- step5.sha1
- step6.next
- step7.描述:插件名称/web:www.yourcompany.com
- step8.http://timestamp.verisign.com/scripts/timstamp.dll
4.Verify Signature
使用SignTool工具的verify命令验证。
这样就对CAB文件进行了签名,但是这个时候点击这个文件会发现证书不可用,原因是证书没有安转。
文件属性->数字证书->详细信息-〉查看证书-〉安装证书,进入安装证书向导,存放区域选择“受信任的根证书颁发机构”,点击完成即可。
How to package MFC controls in a Web page
3.在html文件中加入以下的代码用户就可以从通过ie下载控件了
<OBJECT ID="Test" WIDTH=100 HEIGHT=51 CLASSID="CLSID:BBAB42FD-CC06-4BFD-9459-2BAE42346365" CODEBASE="T.CAB">
4.web下载注册
注意:如果控件已经在客户机注册,并且不是通过.CAB的方式注册,那么通过.CAB自动注册的时候,该控件将无法被更新。必须先手动删除该文件。