大家好,又见面了,我是你们的朋友全栈君。
这段时间做了一个B/S下套打的控件(过几天整理一下放到博客上来),控件测试完成,但是因为没有数字证书,IE如果不设置信任区域和等级的话,会直接被阻止下载安装(我不期望客户能熟练地改IE设置),但是数字证书价格昂贵,暂不考虑,看到cnblogs上一篇文章后深受启发,照着搞了一个测试用的数字签名,但是这篇文章上的OS貌似是win 2000,IE5,我有必要在win7下给大家做个演示:
首先,下载工具包:signtool.rar ,解压(最好是根目录,方便后边敲路径),我的路径是E:delphisigntool
然后在cmd下或者“运行”中输入:
E:delphiSignToolmakecert -sv printocx.pvk -r -n "CN=KeHong Company" printocx.cer
这里的printocx.pvk是我新创建的私人密钥;CN=KeHong Company是持有人或者颁发者,你可以CN=XX公司;最后的printocx.cer则是新建的证书。
根据提示在弹出的窗口输入私钥密码(因为做这个证书的目的并不是为了安全,所以密码建议设成123456之类好记的):
执行结束后,在目录下会生成两个文件:printocx.pvk、printocx.cer。
证书的制作就是这么简单,下面我们来对自己做的ocx控件签名(我的控件是print.cab),双击目录里的signcode.exe文件,出现了数字签名向导:
选择你做的控件:
下一步,签名选项选“自定义”,下一步,选择证书,点击“从文件选择”,这里要把默认类型换成X.509证书:
下一步,选择私钥,即刚才生成的printocx.pvk文件:
会提示输入密码,即上面你设置的密码,比如之前我建议你设的123456,下一步,算法选择sha1即可:
下一步,默认不用管:
下一步,数据描述,这里要认真写一下了,最后客户的IE浏览器提示的文件描述就是这里所填的:
下一步,时间戳也不用理会,直接下一步完成,最后会再次提示输入私钥,输入你设置的密码123456,确定,即提示“数字签名向导已完成”。
是不是全部搞定了呢?先别激动,看下你的ocx页面:
提示,右键选择安装,(win7或vista的系统还会提示一下是否允许更改,确定就是了),然后就会弹出这样的提示框:
可见,仍然被直接阻止,而且之前设置的颁布者、提示信息都没有显示,很显然,我们的工作还没有完成。接下来,我们需要把数字证书(cer文件)安装到根系统存储区,“运行”执行如下命令:
E:delphiSignToolcertmgr -add -c printocx.cer -s root
会有这样的一个提示,确定即可:
我们再来看看,打开页面后,提示已经可以显示出颁布者和软件内容说明了:
右键选择“为此计算机上所有用户安装此加载项”后,就出弹出这样的一个提示框,询问是否运行更改计算机,而且很清楚地显示了颁布者和软件名称,点击查看证书,证书状态也正常,这里直接点击“是”安装即可,IE不再阻止(最后的提示是遮罩层提示,没法截图,用手机拍的)。
就此,OCX控件数字签名讲解完毕,当然还有一些需要考虑的:总不至于让用户执行安装证书的指令吧?!
这个问题也只能这样解决:做一个批处理,把certmgr -add -c printocx.cer -s root写到批处理中,把certmgr.exe和cer证书放到同目录,让用户在使用你的B/S系统之前执行这个批处理即可。我们前面所说的所有内容,都是基于买不起付费数字证书的基础上,如果你们公司愿意买数字证书的话,那是最好不过的,否则只能用这样的笨办法给用户最简单的体验。当然,你能说动让用户修改IE设置和安全级别的话,我也无话可说,此文仅供参考学习。
花絮:忘记说一件事,还有一种免费而且不用安装证书的妙招呢,如果你有不用的支付宝电子证书,用这个方法做成签名证书,用户访问页面的时候,直接就提示信息以及询问是否安装,而不直接阻止!当然,你的支付宝账户最好是没用的,以免你的密码被别有用心的人通过签名证书激活成功教程,造成经济损失。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158456.html原文链接:https://javaforall.cn