惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

博客园 - 寒星

2010年度总结 Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案 企业IT部门的职责和定位(转摘) 09年度总结 重读《软件架构师职业导读》有感 向给我留言的朋友道歉 兑现承诺,给出我出的面试题。 年后第一天上班 提前给大家拜个早年。 闻听家乡出现流脑病例,祝福ing... 走近COM Interop--编程以实现COM-->Assembly 年终了,准备换换环境。 开心ing,终于买到回家的车票了。 老婆的第一次产前检查 Small Tip One: 根据指定的IIS虚拟路径获取相应的物理路径 《十种不宜追随的老板》一文读后感 十种不宜追随的老板[转] 回顾 2004 凑热闹,Share自己写的另一个小工具--代码统计器。
B/S应用中的ActiveX数字签名相关问题杂谈
寒星 · 2009-03-04 · via 博客园 - 寒星

       我们在开发B/S项目时,往往会面临需要封装一些逻辑在客户端运行或者是需要提取一些客户端环境信息等方面的情况,基于微软技术我们一般会选择使用AcitveX技术,通过javascript调用ActiveX提供的对象来满足业务上的需求。不过,随着Windows XP SP2的到来,让问题变得更加复杂且难以处理。

       首先,IE 7 默认是阻止非法签名的ActiveX控件安装。虽然可以通过降低IE安全级别来克服这一问题,但我们无法要求让所有的客户端都通过此方法来解决这一问题,特别是Internet用户。降低安全级别安装后的结果如下图:

image

       其次,ActiveX控件的分发形式。常用的是CAB和独立安装包(EXE)。CAB文件包含.INF文件或软件分发.OSD文件,也可以包含其他软件组件,如 ActiveX 控件(.OCX)、.DLL文件、.EXE文件、Java类文件或小程序。当Web页上OBJECT元素的CODEBASE特性引用包含.INF文件的.CAB文件时,Internet Explorer将自动把.CAB文件作为软件分发单位下载并安装,每次访问时还会自动检测版本并进行更新。而INF文件则是一个文本文件,指定运行控件所需要下载或者呈交的文件(比如.DLL或者其它.OCX);EXE文件这儿就不多介绍了。值得我们注意的是,当我们开发的ActiveX控件无法正常在客户机安装时,前者带的问题会更大一些。例如,我们发布了一个基于Internet的B/S系统,用户通过IE访问系统时需要下载安装一个Active控件包(.CAB),当此控件包因为安全原因无法安装时,会带来网络流量问题。因为用户每次访问页面都需要下载这个包,当这个包比较大的时候,这个问题就更为突出。而EXE包只需要下载并安装一次。当然,这个是因为IE了非法签名ActiveX控件安装引起的,那么下面我们就谈谈如何让ActiveX控件在客户机中顺利安装。

       要让ActiveX控件在客户机中顺利安装,需要对我们的CAB进行数字签名,这方面就不多说了,网上有很多这方面的资料,为了让用户可以信任我们的CAB包,我们需要经过授权的证书,在具体的项目中,我们选用了VeriSign Class3(相关信息)。当我们对CAB包签名之后发现客户端安装仍然有问题,虽然可以识别到我们的CAB包是有效的签名,但仍然提示是未经验证的,很多Windows XP SP2环境中仍然无法安装。究其原因,是因为我们的ActiveX控件没有实现ISafeObject接口,所以Windows XP SP2对我们的控件提出了警告。接下来的工作就比较简单了,加上对ISafeObject接口的实现就好了,然后对生成好的CAB包再进行签名。

       以VB开发的ActiveX为例,实现ISafeObject接口的范例程序如下:

Code

        这时客户机上IE已经可以正常安装我们的CAB包了。结果如下图:

image 

       总结下来,Windows XP SP2对ActiveX的限制变得更加严格,对基于微软技术的B/S开发造成了相当大的困难,期待有更好的解决方案出现。

注:如果是VB开发的ActiveX,要实现ISafeObject接口需要使用objsafe.tlb,找了很久,附上这个类型库