精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-10
[背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必须进行本地的注册,也就是说用户得首先要把该ActiveX控件(test.ocx)放在本机的%system%/system32下,然后运行DOS工具里面运行regsvr32 test.ocx命令进行注册。但如果真是这么去做的话,那么代表着你处于危险之中了,因为您是通过让用户自己去部署设置环境来达到你的目的,这就失去软件项目本身所存在的价值。那么面对这种情况,我们应该如何解决呢?聪明的你一定会很快就想到,我们可以使用户在客户端自动下载安装该ActiveX控件,这样一来即可以实现我们所想要的功能,又不需要用户自己去部署设置环境,这岂不是一举两得。
[必备条件] 一、用于将ActiveX控件进行打包并加数据鉴名的工具集: makecert.exe 制作cer格式的证书,即X.509证书,同时可以创建私钥和公钥。 cert2spc.exe 将cer格式证书转换成spc格式证书,即PKCS #7证书。 cabarc.exe 将ocx打包成cab。 signcode.exe 将证书签署到ocx上去。 chktrust.exe 检查签署证书后的ocx是否正确。 certmgr.exe 是管理证书用的。 <o:p> </o:p> 二、用于进行打包用的ocx控件evS1300.ocx。 三、用于查看ocx控件的工具ActvxDoc。
[制作过程] 一、环境设置 1、下载makeCAB包,解压到本地目录(如E盘根目录),如查看到如图1所示的工具集,则表示已下载成功: <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype> (图1:makeCAB包的工具集) 2、设置系统环境变量,右键单击“我的电脑”à选择“属性”à选择“高级”选项卡,打开如图2所示的系统属性面版块:
(图2:系统属性版块) 3、在系统属性版块里单击“环境变量(N)”按钮,打开图3:
(图3:系统变量) 4、选择“系统变量(S)”里的“新建(W)”按钮,打开“编辑系统变量”对话框,如图4所示,然后在“变量值(V)”里加入“;E\makeCAB”:
(图4:编辑系统变量) <o:p></o:p> <o:p> </o:p> 二、将用于打包的OCX控件放在E盘根目录下(本文档使用名为evS1300.ocx的控件来进行介绍),如图5所示,其中evS1300.ocx是本文档进行操作的控件对象,而mfc71.dll、msvcp71.dll、msvcr71.dll这三个文件通常是进行打包时一并打包的文件,但不是必须(推荐一起打包),其可在系统中的system32目录下找到,请自行准备。
(图5;用于操作的OCX控件路径) <o:p> </o:p> 三、ActiveX发布步骤 1、单击“开始”à“动行(R)”à输入“cmd”à回车à进入到操作的控件所在的目录,如图6所示:
(图6:进入E:\evS1300目录)
2、创建PVK文件(私人密匙文件),在命令行中输入“makecert -sk evS1300 evS1300.pvk -n CN=XXXXXXX公司”,然后回车,如图7所示: (图7:创建PVK文件) 3、创建CER文件(公司证书),在命令行中输入“makecert -sk evS1300.pvk evS1300.cer”,然后回车,如图8所示,若出现“Successed”提示,则会在E:\evS1300目录下生成evS1300.cer文件,如图9所示: <v:shape id="_x0000_i1037" style="WIDTH: 414.75pt; HEIGHT: 271.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\03\clip_image015.png"></v:imagedata></v:shape> (图8:创建CER文件) <o:p> </o:p> <v:shape id="_x0000_i1038" style="WIDTH: 415.5pt; HEIGHT: 279pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\03\clip_image017.png"></v:imagedata></v:shape> (图9:生成evS1300.cer) <o:p></o:p> 4、创建SPC测试软件出版商证明书,在命令行中输入“cert2spc evS1300.cer evS1300.spc”,然后回车,如图10所示:
(图10:创建SPC测试软件出版商证明书) <o:p></o:p> 5、创建INF文件,用记录本编辑以下信息
如图11所示,并保存为E:\evS1300\evS1300.inf,如图12所示
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 415.5pt; HEIGHT: 328.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape> (图11:evS1300.inf) <o:p> </o:p>
(图12:保存evS1300.inf) 在evS1300.inf的内容里,[version]和[Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。[msvcr71.dll]、[mfc71.dll]、[msvcp71.dll]就是上面我所说不是必须的项,只要你想把msvcr71.dll、mfc71.dll、msvcp71.dll包括在发布包里,那这么三项就必须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[evS1300.ocx]项,其中有clsid和FileVersion就是evS1300.ocx的classId和version,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如何才能知道evS1300.ocx里面的classId和version呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用它,我们双击这个文件运行它,此时可以看到图13所示的界面:<o:p></o:p>
(图13:ActiveX Documenter) 在图13的界面里,点击“File”à“Open…”,打开您所要查看的OCX控件,如图14所示:
(图14:打开控件) 打开了控件之后,我们在界面的右边部位“Class”的下拉框里选择“<all interfaces=""></all>”就可以看到我们想要查找的FileVersion和classId,如图15所示:
(图15:控件属性) 6、创建CAB文件,在命令行中输入“cabarc -s 6144 n evS1300.cab msvcr71.dll mfc71.dll msvcp71.dll evS1300.ocx evS1300.inf”,然后回车,如图16所示: <o:p> </o:p> <o:p> </o:p>
(图16:创建CAB文件) 7、使用Code Signing Wizard签署一个CAB文件,首先双击运行工具集里面的signcode.exe(或在命令行里直接输入“signcode”后回车),系统会弹出如图17所示的数字签名向导:
(图17:数字签名向导)
8、单击“下一步(N)”按钮,来到图18所示,选择要进行数字签名的且已做成CAB包的文件evS1300.cab文件。 <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1027" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape> (图18:选择CAB包) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-08-17
9、选择好CAB包后单击“下一步(N)”按钮,在选择想要的签名类型里选择“自定议(C)”并单击“下一步(N)”按钮,如图19所示:
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1027" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape> (图19:选择签名类型) 10、接下来单击“从文件选择(F)”按钮,选择刚刚制作的evS1300.cer,如图20所示: <o:p> </o:p> <v:shape id="_x0000_i1028" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image003.png"></v:imagedata></v:shape> (图20:选择CER证书) 11、在图20中单击“下一步(N)”按钮来到图21,然后在图21里选择“CSP中的私钥(K)”。 <v:shape id="_x0000_i1029" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"></v:shape> (图21:选择私钥的位置) 12、在图21中单击“下一步(N)”按钮,然后在图22中的散列算法中选择“shal”,并单击“下一步(N)”按钮。 <v:shape id="_x0000_i1030" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image007.png"></v:imagedata></v:shape> (图22:选择散列算法) 13、在“证书路径中的证书”中选择“证书路径中的所有证书,包括根证书(C)”,在“其它证书(可选)”中选择“包括在以下PKCS #7 证书(.p7b)文件中的证书(P):”,并单击“浏览(R)…”按钮选择evS1300.spc文件,选择完后单击“下一步(N)”按钮,如图23所示: <v:shape id="_x0000_i1031" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image009.png"></v:imagedata></v:shape> (图23:选择其它证书) 14、接下来在弹出的“数据描述”窗口中输入公司的名称和网址并单击“下一步(N)”按钮,如图24所示: <v:shape id="_x0000_i1032" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image011.png"></v:imagedata></v:shape> (图24:输入数据描述) 15、现大部份工作都已完成,在接下来的一步当中是可选的操作,其作用只是为CAB加入时间戳,此步骤完全可以不做,如图25所示: (这里我提拱三个免费的代码签名时间戳地址) VeriSign: http://timestamp.verisign.com/scripts/timstamp.dll Comodo: http://timestamp.comodoca.com/authenticode GeoTrust/TrustCenter: http://www.trustcenter.de/codesigning/timestamp <o:p> </o:p> <v:shape id="_x0000_i1033" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image013.png"></v:imagedata></v:shape> (图25:给数据盖时间戳) 16、完成,在图25中单击“下一步(N)”按钮便可来到数字签名向导的最后一步,即操作总览,如图26所示,单击“完成”按钮便可大功告成,如图27所示: <v:shape id="_x0000_i1025" style="WIDTH: 377.25pt; HEIGHT: 290.25pt" type="#_x0000_t75"></v:shape> (图26,完成操作总览) <o:p> </o:p> <v:shape id="_x0000_i1026" style="WIDTH: 164.25pt; HEIGHT: 90.75pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HUANGZ~1\LOCALS~1\Temp\msohtml1\01\clip_image017.png"></v:imagedata></v:shape> (图27:签名成功提示) |
|
返回顶楼 | |
发表时间:2007-08-21
这与Seam都不相关,帖在这什么用的?而且还要自己回复了一模一样的,至少把那条重复的评论删除吧
|
|
返回顶楼 | |
发表时间:2007-09-22
基本错误。pkcs #7的私钥密码呢,没有CA如何认证
|
|
返回顶楼 | |
发表时间:2007-11-09
|
|
返回顶楼 | |
发表时间:2008-01-04
. 好. 谢谢LZ
|
|
返回顶楼 | |
发表时间:2008-04-16
这个是好东西,谢谢楼主.
|
|
返回顶楼 | |
浏览 86608 次