给ActiveX控件做数字签名

这一阵子自己的一套系统遇到了在高版本IE下无法访问的问题,后来发现是其中嵌入的一个控件没有数字签名导致的。在高版本IE中对于此类控件已经做了严格的限制,无法通过参数的设置来打开这个缺口。为此在网上寻觅了一下如何申请、制作数字签名,如何打包cab,如何给控件、cab添加数字签名的方法,如下:

 

在IE7下无法执行的问题,签名后出现该对话框,控件包无法安装

因为IE7默认是禁止没有使用国际认证的代码签名证书进行签名的ActiveX,看IE7的安全设置就知道了。
让用户改设置是不可能的,测试用的数字签名又无效,所以只好用经过认证的数字证书,但是~~ 基本上都是要钱的
花了点时间查找和试验,相比之下中国数字认证网(
http://www.ca365.com/)提供的一年免费的证书是最好用的


用表格申请证书,在下面的界面中按图示设置对应项目



提交后出现的界面选择“在线安装”,然后你的机器中就会安装好这个“个人”免费证书

后面的对控件签名时直接用signcode.exe就可以了,不用自己再makecert了
选择证书时,从存储区中选择这个“个人”



后面的下一步中出现的界面最好都添上,给用户更多的信息
时间戳服务器可以使用:http://timestamp.verisign.com/scripts/timstamp.dll

然后再浏览之前的页面,就可以了:)


要注意:
1:注意使用的是代码签名证书
2:免费数字证书有一年的有效期
3:要更改数字证书的名称和附带信息等,需购买其他收费版本
4:国内CA站点
中国数字认证网(http://www.ca365.com)
广东省电子商务认证中心(http://www.cnca.net/)
博大证书(http://ca.foxmail.com.cn/)
天威诚信(http://www.itrus.com.cn)

其他参考资料:

IE7 大大增强了安全性能
http://hi.baidu.com/itrus/blog/item/6518bf13c4e533806538dbc2.html

ActiveX控件数字签名的实现
http://hi.baidu.com/duyaofei/blog/item/6433ab01f71de1061d9583a5.html

数字证书应用全攻略——如何获取数字证书
http://www.qqread.com/net-saft/u539114081.html

 

==============

 

创建CAB

 

过高压缩技术(比ZIP压缩度还高3成)——打包成Cab压缩文件。当用户第一次浏览你控件所在的网页时,它会自动提示控件下载,下载后会根据cab文件中的*.inf文本文件的来寻找你电脑的上相应的DLL(控件依赖库及控件本身,ocx本就是一种特殊的DLL)是否注册过,如果没有,会自动帮你注册,然后控件既可以正常使用。

(注:关于cab压缩技术,请参考MSDN或是网上相关搜索)

创建cab文件:

1.  创建 INF 文件。

INF 文件是一个文本文件,用以指定为控件的运行而需要显示或下载的文件(如 DLL 文件或其他 OCX 文件)。INF 文件使您得以将所有所需的文件捆绑在一个压缩的 CAB 文件中。默认情况下,版本号同用户硬盘上的现有文件相同的文件不下载。有关 INF 文件及其选项的更多信息,包括如何创建与平台无关的 INF 文件,请参见 Platform SDK 文档中的关于 INF 文件和使用 INF 文件(在 MSDN Library/Setup 和 System Administration/Setup/Setup API/Overview/Setup Applications 目录下)。

举例来说,下面的 INF 文件用于为AxYourControl控件创建 CAB 文件。AxYourControl是由某一库支持开发的(MFC,ATL或其他),假设他所支持库的主要由 Need1.dll,Need2.dll,Need3.dll三个DLL库(具体有哪些库文件根据情况查阅MSDN相关内容)。

; Sample INF file for AxYourControl.OCX

[version] 

signature="$CHINA$"

AdvancedINF=2.0  

 

[Add.Code]

AxYourControl.ocx= AxYourControl.ocx

Need1.dll= Need1.dll

Need2.dll= Need2.dll

Need3.dll= Need3.dll

 

; needed DLL

[Need1.dll]

file-win32-x86=thiscab

FileVersion=2,00,0,7024

DestDir=11

RegisterServer=yes 

 

; needed DLL

[Need2.dll]

file-win32-x86=thiscab

FileVersion=2,00,0,7024

DestDir=11

RegisterServer=yes 

 

; needed DLL

[Need3.dll]

file-win32-x86=thiscab

FileVersion=2,00,0,7024

DestDir=11

RegisterServer=yes 

 

[AxYourControl.ocx]

file-win32-x86=thiscab

clsid={4CBBC676-507F-11D0-B98B-000000000000} 

FileVersion=1,0,0,1 

RegisterServer=yes  

; end of INF file

此 INF 文件指定需要在系统上安装给定版本的 Need1.DLL, Need2.DLL和Need3.DLL。如果这些DLL尚未存在于系统中,它将从用此 INF 创建的 CAB 文件中下载。“thiscab”是一个关键字,表示 CAB 包含此 INF。也可通过指定一条绝对或相对路径,从一个 HTTP 位置下载所需的 DLL,例如:

    file-win32-x86=http://example.microsoft.com/mydir/NEEDED.DLL 
关键字“file-win32-x86”将平台标识为 x86 特定的。

可通过在 Windows 资源管理器中的文件上单击鼠标右键来获取文件的版本号。从显示的列表中选择“属性”,然后在显示的对话框中选择“版本”选项卡。有时需要在文件版本中额外插入一个 0。例如,在对话框中 ATL.DLL 的版本号显示为 2.00.7024。而在 INF 文件中,这变为 2, 00, 0, 7024。

“DestDir”是将要加载文件的目录所在的位置:11 指定系统目录为 WINDOWS/SYSTEM 或 WINNT/SYSTEM32;10 指定 Windows 目录、WINDOWS 或 WINNT。如果未指定任何 DestDir(典型情况),则代码安装在固定的 OCCACHE 目录中。

“clsid”是将要安装的控件的 CLSID。

2.  运行 CABARC 实用工具。

Cabarc.exe 是微软的一个cab文件制作工具。你可以到微软的官方网站下载CABIN SDK 工具包。下载后解压安装,在其目录下有一个Bin目录下可以找到。

      应在包含源文件的目录下运行 CABARC。在命令行上,按源文件出现在 INF 中的顺序排列它们,并将 INF 文件放在最后。例如,若要从上面的 INF 文件生成 AxYourControl控件的 CAB 文件,请使用下面的命令:

…/BIN/CABARC -s 6144 n AxYourControl.CAB Need1.DLL Need2.DLL Need3.DLL AxYourControl.OCX AxYourControl.INF

-s 选项在压缩文件中保留用于代码签名的空间。n 命令指定希望创建 CAB 文件。有关 CABARC 命令和选项的列表,请在命令行上仅键入 CABARC:

…/BIN/CABARC

其他的一些补充:

1.  需要MFC控件中包含的DLL文件有MSVCRT.DLL、MFC42.DLL 和OLEPRO32.DLL,其中MFC42.DLL视你开发环境的MFC版本所定,例如本人是在vc7环境下开发控件的,所以,应该为MFC71.DLL。

2.  为ActiveX空间创建cab文件还有一个重要的话题就是将其打包为签名压缩 (CAB) 文件。签名文件使用户可以放心地下载代码安全的控件。关于这个话题,需要申请发行证书,详细情况可参见MSDN:

ms-help://MS.MSDNQTR.2003FEB.2052/vccore/html/Creating_Signed_CAB_Files_for_MFC_and_ATL_Controls.htm

3.  关于在创建INF时DLL的版本,你可以鼠标右击点出他的属性对话框,在版本一栏就可以看到了,注意,填写时,版本号之间的“.”号变换为“,”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值