[转] Delphi 发布ActiveX控件 数字签名


======================================================
注:本文源代码点此下载
======================================================

原作者:光明兄弟

最近我正在研究activex技术。我使用delphi 7创建了一个具有activeform的activex控件应用程序。这个控件产生一个.ocx文件。现在,我需要把这个控件部署在服务器端,在用户浏览网页并选择安装这个控件的时候,用户的ie才会下载、安装并显示这个控件。

但是我的控件必须作数字签名以后,ie才会下载安装。问题是如何给activex控件作数字签名呢?现将具体步骤与大家分享。

首先我需要一套做数字签名的工具。如果你没有,可以到以下地址下载:

http://files.cnblogs.com/babyt/signtool.rar

控件的名字是custform.ocx。首先,我们需要创建一个.cab文件用来把所有需要发布的文件压缩在一起。我们需要一起发布的文件是custform.lic文件。它是delphi在我们创建控件工程的时候为我们生成的。如果不发布这个文件,你的控件即使下载安装成功,ie也无法显示它。为了在一个.cab文件中发布多个文件,我们必须先创建一个.inf文件。一个.inf文件可以告诉ie,它需要下载的文件和在哪里可以得到这些文件。

1. 创建.inf文件

创建一个.inf文件很简单,用记事本程序编写就可以了。我们把我们的.inf文件取名为gmtestx.inf。因为我们要在.cab文件中放入gmtest.ocx和gmtest.lic这两个文件,所以我们的.inf文件的内容如下:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[version]

signature="$chicago$"

advancedinf=2.0

[add.code]

custform.ocx=custform.ocx

custform.lic=custform.lic//如果创建active form时没有选择make conctrol lincensed 则不会产生.lic文件,那么创建.inf文件时可去掉此行

[custform.ocx]

file-win32-x86=thiscab

clsid={c504df79-c5ec-4314-ac3e-1f770db81a01}

fileversion=1,0,0,0

registerserver=yes

[custform.lic]//如果创建active form时没有选择make conctrol lincensed 则不会产生.lic文件,那么创建.inf文件时可去掉此行

file-win32-x86=thiscab//如果创建active form时没有选择make conctrol lincensed 则不会产生.lic文件,那么创建.inf文件时可去掉此行

fileversion=1,0,0,0//如果创建active form时没有选择make conctrol lincensed 则不会产生.lic文件,那么创建.inf文件时可去掉此行

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在这个.inf文件的[version]部分有两句代码。signature="$chicago$"表示这个.inf文件和windows95或其后版本和windows nt 4.0或其后的版本兼容。advancedinf=2.0表示advpack.dll的版本,ie 4.0或其后版本必须导入这个文件去解析这个.inf文件。在这里要求的版本是2.0。

至于[add.code]部分,其中列出了在一个.cab文件中需要下载的文件,并把这些文件的详细信息映射到其后对应的各个部分。比如[custform.ocx]部分中的信息就是下载custform.ocx这个文件的相关信息。

在[custform.ocx]部分的第一句代码告诉ie,custform.ocx文件就包含在这个.cab文件中。第二行注明了这个控件的clsid号。第三行是控件的版本号。第四行告诉ie需要使用前面的clsid号来注册这个控件。[custform.lic]部分就不多讲了。

2. 创建.cab文件

在命令行中输入以下代码把custform.ocx、custform.inf和custform.lic这三个文件添加到一个.cab文件中,这个文件取名为custform.cab:

cabarc.exe -s 6144 n custform.cabcustform.ocxcustform.infcustform.lic

3. 创建证书文件

在命令行输入以下命令:

makecert -sv custform.pvk -r -n "cn=sunstar" custform.cer

4. 转换证书:

cert2spc custform.cercustform.spc

5. 创建另外一个自签名证书,叫test.cer

在命令行中依次输入以下两条命令:

makecert -sv test.pvk -r -n "cn=sunstar" test.cer

cert2spc test.cer test.spc

6. 从test.cer创建test.ctl文件

makectl test.cer test.ctl

7. 用custform.pvk和custform.spc这两个文件给test.ctl作数字签名

signcode -v custform.pvk -spc custform.spc test.ctl

8. 把test.ctl移动到受信系统存储区

certmgr -add -ctl test.ctl -s trust

9. 把custform.cer移动到根系统存储区

certmgr -add -c gmtestx.cer -s root

10. 用test.pvk和test.spc给custform.cab作数字签名

singcode -v test.pvk -spc test.spccustform.cab

11. 检查文件是否通过验证

chktrust custform.cab

如果文件通过了数字签名检测,系统会询问是否安装这个文件,这时候一定要选择安装,整个签名过程才能完成。

执行以上步骤的过程中,有时候需要用户输入密码。用户可以任意选择一个密码,比如12345。

接下来,我们把一个调用delphi的web deploy命令产生的文件custform.htm复制到c:\inetpub\wwwroot\ourhtml文件夹中,并修改其内容如下:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

群组配置

>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

再将签名的custform.cab文件移动到c:\inetpub\wwwroot\ourcab文件夹中。

好了,现在打开ie,在地址栏中输入:http://localhost/ourhtml/custform.htm后,ie询问是否下载这个控件,我们选择是,就可以看到我们的activex控件的窗体了。大功告成!

总算完成了。步骤挺繁琐,但是好像必须这么做。我们对这个过程中涉及的相关技术并不十分了解。察看msdn文档可以找到很多资料,想全部搞清楚得费点劲。不管怎样,用这些步骤就可以达到目的。如果你发现有什么错误,或者有什么疑问,欢迎留言。如果这篇文章对你有所帮助,目的就达到了。谢谢。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值