自己制作证书,客户端安装证书后就可以识别该控件。安装一遍后以后就不用安装了,所有的 active 控件均可以使用此证书。证书的效果如图:
证书的安装位置:
证书的制作以及控件打包过程,转载如下:
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
[DefaultInstall]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[DestinationDirs]
install.files=11
[SourceDisksNames]
1=%DiskName%,TestCAB.CAB,1
[Add.Code]
pcpos.ocx=pcpos.ocx
Comm.dll=comm.dll
pcpos.dll=pcpos.dll
TCPCLNT.dll=TCPCLNT.dll
[install.files]
pcpos.ocx=pcpos.ocx
Comm.dll=comm.dll
pcpos.dll=pcpos.dll
TCPCLNT.dll=TCPCLNT.dll
[SourceDisksFiles]
pcpos.ocx=1
Comm.dll=1
pcpos.dll=1
TCPCLNT.dll=1
[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
[pcpos.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=1,0,0,1
[TCPCLNT.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 TestCAB.CAB,再下一步完成。
这样就对CAB文件进行了签名,但是这个时候点击这个文件会发现证书不可用,原因是证书没有安转。文件属性->数字证书->详细信息-〉查看证书-〉安装证书,进入安装证书向导,存放区域选择“受信任的根证书颁发机构”,点击完成即可。
在客户端测试:
1)加入证书,浏览器-〉工具-〉Internet选项-〉内容-〉证书-〉受信任的颁发机构-〉导入证书。
2)在有证书的情况下,如果服务器没有加入“可信任网址”,提示下载的时候会显示证书所签内容,没有证书则提示为“未知”。
3)如果服务器已加入“可信任网址”,并且已导入证书,则不提示任何信息,在用户毫无感觉情况下下载。如果没有加入“可信任网址“,控件可以正常下载但仍然不能正常使用,与是否签名无关。
问题:
1.是否可以不添加“可信任网址”。
2.数字签名的作用,授权证书与不授权证书的区别。