互联网与ActiveX

本文探讨了Internet的安全问题,将其比喻为“现代野蛮西部”,指出由于缺乏标准和安全措施,导致银行等谨慎行业对开展在线业务犹豫不决。文章强调了ActiveX等技术在提升Internet安全性方面的作用,并讨论了商业角度对Internet安全的需求,特别是数据保护的重要性。同时,文章还介绍了确保下载代码安全的方法,包括Windows Verify Trust API和Windows Software Publishing TrustProvider,以及ActiveX控件签名的流程,以增强Internet下载代码的安全性。
摘要由CSDN通过智能技术生成

作者:未知
摘自:网络

一些人把Internet看作是计算机的现代野蛮西部,因为在Internet上实施的标准实在太少,几乎没有什么安全手段。虽然在Internet

上出售商品的人正以指数方式增长,但不幸的是,蛮荒不化的Internet环境使许多慎重的行业,如银行和大型零售商场都不敢问津。

 

一、 概论

  一些人把Internet看作是计算机的现代野蛮西部,因为在Internet上实施的标准实在太少,几乎没有什么安全手段。虽然在

Internet上出售商品的人正以指数方式增长,但不幸的是,蛮荒不化的Internet环境使许多慎重的行业,如银行和大型零售商场都不

敢问津。造成这种情况的原因很简单:它们不愿意承受可能出现安全漏洞的风险。所以,就在许多新兴的公司,如CD-Now正高兴地迎

接Internet的同时,另一些需要Internet的老牌公司却对它持观望的态度。
  虽然Internet技术在不断成长革新,但它还是招致了"现代野蛮西部"的"雅称"。Internet是内部技术、新技术和老技术的结合体

,然而,这正是威胁Internet的最大原因。例如,当前版本的IP协议(互联网协议)不支持任何方式的加密数据(至少在协议级没有

支持),问题是,如果人们想通过加密的形式在Internet上传送数据,将没有工具来确认其安全性是完全可靠的。新版本的IP将解决

这个问题,但现在还尚未出台,随着时代的发展,Internet必定会在这方面取得成功。现在虽然有那么多这样或那样的升级承诺,但

是很少有实现的。对于某些人来说,在Internet上"冲浪"是非常有趣的,因为它是那么自由自在、无拘无束。
  通过浏览http://www.genome.wi.mit.edu/www/faqs/www-security-faq.html,你可以看到在运行Web服务器时所要担负的一些安

全风险。它包括了使用某种浏览器或服务器时所冒的风险,其中包含了当前的Windows NT、Unix和Macintosh服务器,最后它倾向于

使用Unix服务器。该站点也给出了许多通用问题的答案,比如,如何在你的严格监视和保护用户的隐私之间找到一个平衡,它甚至还

告诉你,文档文件是如何随着Internet的发展而变化的。
  就像野蛮的美国西部最终发展成了现代文明国度一样,Internet也将最终走向辉煌。类似ActiveX控件这样的技术将使 Internet

最终变成一个安全的商务场所,这些技术也将把Internet变得更加友好;就像汽车和高速公路把美国西部变得更加容易旅行一样,这

些技术也将加快人们从一个地方到另一个地方的交流速度。
  我们必须要解决的一个难题就是安全问题。只有在一个安全的环境内,人们才能够安心高效地工作,否则,人们将在与敌人的死

死纠缠中花费太多的时间和精力。本文将讨论隐藏在Internet安全问题背后的相关课题。


二、 从商业角度看Internet

  就像前面提到的,许多人为毫无限制的Internet感到不安,你确实可以在Internet上看到几乎任何东西,因为没人对它进行规划

(美国政府最近对Internet在线服务的规定并没有奏效) 。如果你是一个编程人员,Internet这个无拘无束的环境也许还有某种魅

力,但你不是在为自己编程,你必须考虑到商业人员的需求,商业人员当然不希望花了钱却买回了不安,四面漏风的工作环境对他们

来说就像是一场噩梦,他们希望每件事都井然有序,有条不紊,最重要的是要安全可靠。
  急速膨胀的Internet并没有对商业用户注入多少信心。在一些商业用户的眼里,新的和未经考验的技术只会在茫茫的等待中发生

。考虑一下ActiveX控件的潜在得失,它确实加快了商业用户的办事速度,但还是有一些安全因素值得担忧,因为任何一个具有少量

编程经验的人就可以创建一个潜伏破坏性的控件,并把公司的一切搞得一团糟。
  最近的商业调查报告显示,大公司在Internet上变得审慎了,他们采用审慎方案的一个最大原因是缺乏安全感,这些公司希望能

证实技术的可靠性,并保证它们的数据在任何通信中都很安全,建立这种值得信赖的Internet的一种方法是在内部编写优良的应用程

序,也就是说,创建ActiveX控件。
  商业用户需要处理的主题很多,它们一般与编程人员无关,例如,是否允许职员访问Internet以及允许进行什么层次的访问?这

些当然是个热门的话题,但我们在这里不做全部的描述,我们只是讲述一些与编程人员相关的主题。
  那么你该如何处理这些安全问题呢?你可以与公司的主管交谈,如果你发现了他们最担心的只是你编写的应用程序,那么你应该

说服他们,作为应用的一部分,安全也是非常重要的。例如,我们可以使用一些方法来访问Windows NT服务器内部提供的安全性,这

种方法的缺点是访问安全特性将需要许多附加的代码,使得应用程序的运行变慢,并使用户也更辛苦,你也应该在程序的设计阶段告

诉主管对其所进行的权衡(应用程序最终将在Web站点上应用)


三、 定义要保护的对象:数据

  那么,我们需要保护的到底是什么东西呢?你也许会得到许多答案,但它们实质上都是指向一个东西,所有说的和做的都是为了

保护数据的安全。数据所牵连的影响甚至超过了硬件和软件,硬盘丢失了,你还可以替换它;软件配置破坏了,你还可以重新安装它

,可是公司的财经周报丢了,你就得重新处理它了。数据是计算机环境中最精确的部分,因为它一旦丢失,便很难再修复。
  保护数据的安全是所有人在使用中最应该关心的事。很多网络管理员在照顾安全事务上花费的时间最多,在大多数情况下,安全

性关系到了谁做了访问、访问了什么数据以及访问的原因等。随便翻翻任何一家商业出版物,你都能看到一篇又一篇的文章讲述数据

的安全性。我们每时每刻都在用计算机处理数据,这些数据对你公司的重要性是毋庸置疑的,当你创建一个Active控件,并连接到

HTML页面上,此时你最大的安全顾虑就是你将要提供的数据。
数据安全涉及到了访问的问题,不管是访问本地机器还是访问网络,有一个目标是相同的,那就是防止非授权的访问。在本地机器建

立一个安全的环境是相当容易的,除了有各种软件技术外,许多计算机还允许BIOS层次的口令保护,如果这还不够,你还能依靠物理

的安全保护来保证别人访问不了你的系统。然而,要在网络上实施这些安全性就比较困难了,但你还是不用花太多的努力就可以做到

,流行的网络操作系统产品如Novell的NetWare和微软的Windows NT,都提供了各种安全手段来保护本地数据(除非有人在网络的物

理电缆上安装上了网络监听器)。在广域网上(WAN)实施安全性简直就是做恶梦,尤其是当你还有许多拨号上网的机器,不管连接

的距离如何,由于它们使得软件和硬件的项目变得更丰富了,所以某些人便更容易偷偷闯进你的网络。有些人甚至断言,在Internet

上实施安全性是不可能的事。不只是广域网带来了这个重大的问题,Internet自身提供的公共访问也带来了一些问题。任何人,只要

看过最近的商业杂志便知道那些软件公司是如何倾尽全力地来修补他们的产品中的安全漏洞的。


四、 建立某些形式的保护

  即便你现在尽量忽视Internet方面的安全问题,数据保护还是有许多其它方面的主题。例如,你将提供什么类型的数据保护?让

我们暂时从非Internet的角度来探讨一下,在这里,你能够从硬件或软件的角度来看待安全保护。一些公司为了保护那些需要特殊照

顾的数据,他们把工作站从其它项目中分离出来,与网络的物理分离意味着,任何人如果想要访问机器内部的数据,必须实际地使用

这个工作站,必要的话,你还可以通过使用加锁来防止别人访问它。有的公司还通过使用数据加密或执行安全审计来解决这个问题,

这些都是用软件实现的安全策略。
  不幸的是,在Internet上,你不可能把自己的机器锁在房间内来达到保护数据的目的,这意味着,随着Internet的发展,过去使

用硬件方式保护数据的方法将会被淘汰。硬件级保护的失去增加了编程人员的负担。作为一个编程人员,你必须负责在应用软件中增

加一些安全手段(包括一些产品如ActiveX控件,ISAPI filters/extensions)。幸运的是,你能够参考许多新的安全方法,例如,

文件加密已经是一个实用的保护技术。无论在广域网上还是Internet站点上,加密文档的安全特性都一样,只是允许访问的人数不一

样。
  我们已经讲述了工作站的一些安全问题,让我们再来关注一下服务器。从Internet的角度来看,有些公司把自己的站点和网络从

物理上完全脱离开来,(这限制了你将这个站点用于公司内部需求的方法)。使用一个分离的Web服务器是保护你网络安全性的一种

物理方法,没有人能够通过这个Web服务器来窥探你网络内部的数据。防火墙是一种软件的保护方式,这种方式的登录过程,实质上

在局域网上已使用过多年了。
  你当前使用的或以后将要实施的计划都有一些实际的极限,其中,你最应该考虑的是Internet访问的发展将越来越灵活。当然,

你可以关闭你的站点来防止任何人来访问它,但你此时又能做什么呢?采取顽固和粗糙的策略来实施你的安全性可能不会有太大的效

果。为了让人在Web站点上学习加强安全性的新方法,而不分配给他们访问的级别,将是你面临的一个挑战,从编程者的角度来看,

这意味着你应该学习安装在网络上的硬件和软件的应用能力,已避免陷入Internet的安全顾虑中。
实施方案
  要创建一个安全网络环境是一个庞大的项目,即便是系统地陈述一个基本的安全方案,你也要花费许多时间和精力,而要具体实

施它则需要更长的时间,尤其是为了减少对工作环境的冲击,而使用阶段性的实施方案时,时间就更长了。即便你制定了一个非常安

全的计划并尽己所能地考虑到了所有的意外,你也不能完全确信已经面面俱到了。当最后有人闯进了你的安全系统并破坏了一些数据

时,你便只能打道回府了。
  一旦考虑到所有这些潜在的问题时,你不难得出为什么网络管理员要经常地对用户的权限进行分配,哪怕他是在做一件无关痛痒

的事。例如,一些网络管理员强烈地反对公司进行任何形式的Internet访问;而另外一些网络管理员则一旦证实有Internet访问,便

要像"老大哥"一样监视用户的活动情况。
  不管建设什么形式的Web站点,你面临的将不止是网络管理和数据保护的问题,考虑用户的提问也很重要。如果有人告诉你连接

是安全的,而你发现它并非如此,你又怎会喜欢它呢?许多信用卡用户真不愿意这样冒险,从计算机到Web站点的一个不安全的连接

可能意味着信用卡内数千元的损失。
  在实施一个安全方案之前,你应该已经完成了这些工作:确认你创建的应用程序能够长时间保证客户和服务器间数据交换的安全

;如果你想把你的Web站点作成防弹(bulletproof)形式,你应该考虑到所有使用Internet人的需求,以及可能产生的冲突。当一些

没有考虑到的事情发生、并且确实有人闯进了你的网络时,你便能够立即制定一个安全计划来修补这些网络安全漏洞。


五、 确保Internet下载代码的安全

  许多公司正承诺把它们的应用软件当作一系列ActiveX控件上载到Internet上,例如,Lotus计划将一系列Notes_specific 阅读

器以ActiveX控件方式迁移至Internet上,Quarterdeck公司也计划把它们的整个应用系统程序转换成ActiveX控件形式并上载到

Internet上。你很快就能够直接通过浏览器查看各种类型的数据,在某些情况下,你还可以直接对它进行编辑。(要得到它们成熟的

产品,我们也许还得等待一段时间)。
  如果商家没有计划对下载的代码进行检验、用户在不能确认代码是否受到过病毒的侵害时,就盲目将其保存,将会带来很大的危

害。Windows Verify Trust API(用于连接Windows Trust Provider Service)的一些技术,在以下的描述中我们将关注这些API,

你将对这些技术的运作方式有一个总体的了解。
  我们也将关注一下Windows Software Publishing TrustProvider,它实际上是Windows Verify Trust API的一个附加系统,它

用来检验下载的软件部件是否值得信赖,其检验的方法有多种,其中包括检验本地的规则(如在浏览器上与安全相关的检查框)和检

验文件自身的加密信息(如数字签名)。
  最后,我们将关注对ActiveX控件签名的过程。将签名过的控件放置到Web服务器上,将使用户在下载它时,不会再提示"not

trusted"(不能信赖)的信息。这部分也将让你学会如何为测试而清理自己的机器,你将学会如何卸载一个ActiveX控件,这样,你

不必在每次测试控件的签名以及在你的Web站点下载其它特性时,都得重新清理机器。
六、 使用Windows Verify Trust API

  这个特殊的API在某些方面现在已经相当稳定,微软已经在IE3.x/4.x以及Windows自身中部分地实施了它。你阅读到的其它部分

正处于不断的改变中,因为很多软件公司正在各自地研究检验下载软件的最好方法。
  那么,Windows Verify Trust API的精确定义是什么?它是决定你是否能信任任何Windows 对象的一种通用方法,这些对象可以

是客户请求的服务、服务器请求的信息、下载的文档文件或甚至是ActiveX控件。这个API的最终形式是允许你检测任何对象的可信度


  就像Windows支持的大多数API一样,Windows Verify Trust API也是可以扩展的,你可以增加新的特性来允许它执行一些扩展的

检测。其中的一个扩展是IE 3.x/4.x带来的Windows Software Publishing Trust Provider,我们将在下一节进行阐述。现在,你所

要知道的一点是,Windows Verify Trust API只是个通用的API,随着更多人对它的使用,它可能需要更多的扩展。
  Windows Verify Trust API使用多种方法来检测文件的可信度。其中的一些方法尚存在争议,但有两种方法最为通用,即检测系

统规则和校对伴随于对象的证书或数字签名。你将发现Windows Verify Trust API也依赖于外部的证书,例如,当前许多流行的

Internet加密标准正使用公共密钥和私有密钥方式,公共密钥驻留在文件头上,私有密钥存在于用户的机器内。要破解一个加密文件

,你必须要既有公共密钥又有私有密钥,因为只有用户拥有这个密钥,所以其他人将不能阅读这个文件。显然,还有一些比两把密钥

更复杂的方法,有些简单的方案还增加了随机密钥,他与公共密钥相结合,使得黑客几乎没有可能破解它。
  系统规则存在于许多地方,例如,浏览器的"信任"信息存储在配置文件或注册表中。系统管理员也可设置一些策略,这些设置可

以在一个单独的用户注册文件中或在所有用户都可使用的通用注册文件中。策略所在的精确位置依赖于你使用的Windows 版本,和是

否打开了多用户配置(在Windows 95/98中),以及系统管理员实施的策略类型(系统的或单独的)。你也可以使用委托供应商(CPS

)规则(准确的名称叫做"trust provider",因为其中的规则来源可以是任何委托代理,而不止是CPS),例如,你可以告诉浏览器

,任何经过某个委托供应商认证的人都是可信的。作为受托检验规则,委托供应商提供了指定的拥有者的列表,并定义了指定对象的

类型和委托供应商的级别。用户的操作也能够影响Windows Trust Verification API的使用规则,例如,如果用户告诉系统,某个供

应商是可信的,则这个信息便存储于注册表中,而Windows 的受托检验服务每次在证书中看到这个商家的名字时,便不再对这个对象

作深入的检测。
  现在,你已经对这个API的功能做了一个概要的了解,让我们再关注一下这个API的自身。你将会对下面这个函数感兴趣:
  WinVerifyTrust(HWND hwnd,DWORD dwTrustProvider,DWORD dwActionID,LPVOIDActionData);
  正如你所看到的,这个函数需要四个参数,大部分人应该牢记第一个参数,它是当前窗体的句柄,这个参数的目的是让

WinVerifyTrust()函数知道当前正有用户在做决定,例如,函数可能想询问你是否下载一个没有签名的文件。如果想要在不干扰用户

的情况下检验一个对象的可信度,你可以简单使用INVALID_HANDLE_VALUE来代替窗体的句柄;如果你想要用户的桌面代替当前的应用

程序,对任何交互作用都做出反映,你也可以将参数值设为0。第二个参数定义了对谁来询问与信任相关的事情,Windows认识两个默

认值(尽管商家也能定义任何指定的值用来明确真正的委托供应商):WIN_TRUST_PROVIDER_UNKNOWN(基于你想要执行的操作,找到

一个代理商)或        WIN_TRUST_SOFTWARE_PUBLISHER(一个实际的软件发布者)。如果你选择WIN_TRUST_PROVIDER选项

,Windows 将尽量找到一个包含你要执行操作的注册项。如果不能发现这样一个注册项,WinVerifyTrust()函数将返回一个

TRUST_E_PROVIDER_UNKNOWN的值。第三个参数指定了一个操作,它告诉代理供应商,你想要做的操作,因为每个代理供应商都不同,

所以你将必须检查代理商提供的文档,最后一个参数的准确内容也依赖于你使用的代理商。在大多数情况下,你将至少需要告诉代理

商你想要检验的数据,有些代理商也可能要求有关信任级别的信息或者信任裁决的内容。
  WinVerifyTrust()函数在调用执行后,一般返回代理商的特定值;在某些情况下,它也返回四个标准值中的一个,你将注意到这

四个标准值全是错误信息(Windows Verify Trust API没有定义任何默认的成功信息),下面就是这四个值的解释。 
  TRUST_E_SUBJECT_NOT_TRUSTED 通常,代理商会提供给你更多的错误信息,这个返回值简单地提示:检验的对象没有通过你指定

的检验操作,它不代表这个对象从根本上不值得信任,而只是不能被当前指定的操作信任。除非代理商支持某些类型的通用操作,或

者你只需要对这个对象执行单一的操作,否则你将需要为每个操作分别调用WinVerifyTrust()函数。
  TRUST_E_PROVIDER_UNKNOWN 就像前面提示的,Windows基于当前的定义操作,不能找到指定的代理商时,便返回这个错误信息。
  TRUST_E_ACTION_UNKNOWN 如果你要求的操作不被指定的代理商支持时,函数将返回这个错误值。       

WinVerifyTrust使用注册项来检验有效操作,而不是真正与代理商进行交流,这意味着,即便代理商支持指定的操作,你也可能会因

为注册被损坏而不能执行某个操作。
  TRUST_E_SUBJECT_FORM_UNKNOWN 产生这个错误信息的原因是多方面的,多数情况下是因为参数不正确或参数中包含了不完整的

信息。如果代理商不能找到你想要检验的对象,也将返回这个信息,幸运的话,代理商将提供与数据相关的更详细的信息,但如果代

理商不能判断问题的来源时,你或许也只能得到这个值。


七、 理解Windows软件发布信任供应商

  Windows软件发布信任供应商(Windows Software Publishing TrustProvider)附加于Windows Trust Verification API(我们

在前一节中已进行了阐述)之上,这个附加系统的主要目的是允许应用程序检验软件部件中是否包含数字签名或证书,其中的每个项

目都将检验用户本地系统中的文档,并判断它们是否是由委托的供应商作为权威的软件发行的。对于Windows TrustVerification

API,这个API使用丰富的技术和信息资源来判断指定的文档是否值得信赖。
  你将发现Windows 软件发布信任供应商也使用WinVerifyTrust()函数,在前一节中我们讨论过这个函数,但这里的使用略有一些

不同,首先,你总应使用WIN_TRUST_SOFTWARE_PUBLISHER委托供应商,除非委托供应商支持别的值,如果使用

WIN_TRUST_PROVIDER_UNKNOWN委托供应商,Windows将简单选择默认的委托供应商,Windows 也定义了两种操作(你可以提供其它可

供选择的委托供应商):WIN_SPUB_ACTION_TRUSTED_PUBLISHER(检验文档的供应商是否在信任列表中)以及

WIN_SPUB_ACTION_PUBLISHED_SOFTWARE(检验文档自身是否有正确的鉴定证书)。当前版本的Windows软件发布信任供应商还不支持

WIN_SPUB_ACTION_ TRUSTED_PUBLISHER操作,如果选择WIN_SPUB_ACTION _PUBLISHED_SOFTWARE操作,WinVerifyTrust()也将期待

WIN_TRUST_ACTDATA_ SUBJECT_ONLY数据结构,该结构如下所示:
typedef LPVOID WIN_TRUST_SUBJECT
typedef struct WIN_TRUST_ACTDATA_SUBJECT_ONLY
{
DWORD dwSubjectType;
WIN_TRUST_SUBJECT Subject;
}WIN_TRUST_ACTDATA_SUBJECT_ONLY,
*LPWIN_TRUST_ACTDATA_SUBJECT_ONLY
请注意,这个结构包含了两个变量,dwSubjectType定义了你将要检验的对象类型,你可以为大部分数据文件选择

WIN_TRUST_SUBJTYPE_RAW_FILE,或为可执行文件选择WIN_TRUST_SUBJTYPE_IMAGE(其中包括DLL和OCXs),Subject结构指向你要检

验的对象,其格式为:
typedef struct _WIN_TRUST_SUBJECT_FILE
{
HANDLE hFile;
LPSTR lpPath;
}WIN_TRUST_SUBJECT_FILE,
*LPWIN_TRUST_SUBJECT_FILE; 
  正如你所看到的,这个结构中的两个变量分别指向文件和文件的路径。在大多数情况下,你将在浏览器或其它应用程序的缓冲文

件夹内找到这个文件,例如,Internet Explorer 3.0将它的缓冲内容保存在Internet临时文件中(数据文件)或OCCACHE(可执行文

件)文件夹中,它们位于Windows的主目录下,而Netscape Navigator的大部分ActiveX控件将临时数据保存在ActiveX控件缓冲文件

夹(也在Windows的主目录下)。
  那么Windows到底是如何检验文件呢?WinVerifyTrust()在执行中,首先寻找PKCS#7标志的数据结构,它是在为控件签名过程中

创建的(我们在下一节中将要讲述);然后再寻找一系列X.509证书,在当前实施的Windows软件发布信任供应商中,你必须伴随着软

件发布的公开密钥,再提供一个私有密钥(我们将在下一节中讲到)。在未来,Windows软件发布信任供应商也将寻找X509.3扩展定

义的密钥使用限制和其它属性,如果检验到PKCS#7数据结构和X.509证书都是正确的,WinVerifyTrust将给你的应用程序返回一个成

功的信息。


八、 Internet 部件下载机制

  你也可以把本节命名为"对代码进行签名",这个过程实际上包括四步,你可能要多次重复这些步骤才能得到正确的结果。第一步

是创建一个在本地Web服务器上使用ActiveX控件的文档,你把这个服务器当作一个Internet站点来访问,它的详细过程在很多书中都

有讨论,这里就不再介绍了;第二步是删除控件的注册信息,许多编程语言为你创建的控件自动注册,即便不能自动注册,你也要作

为测试的一部分来注册它,去掉控件注册后,所有的注册项被删除,这些项是WinVerifyTrust()用来寻找控件的一个本地拷贝时使用

的,当它找不到注册项时,你所看到的屏幕将与用户看到的一样;第三步是对你的ActiveX控件进行签名;第四步也是最后一步,就

是访问用来测试的Web站点并查看Web页,它将下载这个控件并允许你测试签名的过程,你可能需要对后三步进行多次测试才能最终确

认签名过程的正确性。

去掉控件的注册信息
在SYSTEM(或SYSTEM32)目录下,有一个叫RegSvr32的小程序,它用来负责增加ActiveX控件在注册表中的登记项,使用命令行开关

-U,它也可以取消控件相应的注册项,如果你想要取消第10章中创建的基本控件的注册项,那么你可以在命令行输入REGSVR32

OCXEXMPL.OCX -U。成功删除注册项时,你会看到如下图所示的对话框。
 

签名你的控件
  对你的控件进行签名也分为四个步骤,第一步是创建一个X.509证书(我们在前一节中从安全的角度讲述了这个证书),你将使

用MAKECERT应用软件来创建一个基本的证书。这个应用软件的文档在SIGNCODE.TXT文件中,你可以在ActiveX SDK的安装软件的BIN目

录下找到这个文件。
  Visual C++5.0提供了MAKECERT这个应用软件,你将需要它来签名你的控件,然而,在安装中并不加载这个应用软件,在Visual

C++安装光盘的Cab&Sign目录下,你将找到它的所有文件,确认你已经把这些文件拷贝到了硬盘中(它不能在光盘中运行)。以下处

理过程假设你使用ActiveX SDK获得了最新的工具,但这里使用的是VisualC++5.0提供的工具。
  MAKECERT -U:AKey-K:AKey.PVK -n:CN=MyCompany -d:A-Company TESTCERT.CER
  这个命令行是用来创建一个随机的公开/私有的密钥对,并将这个密钥对和便于识别的名字联系起来。我们也创建了一个私有密

钥文件(PVK),它保存私有密钥的备份,你创建好一个证书后,必须将它和一个基础X.509证书结合起来,这个证书来自诸如

VeriSign的CSP。由于现在还没有任何CSP来处理这类证书,微软提供了一个测试证书,你可以通过调用ROOT.CER来使用它,它和其它

文件都在BIN目录下。
  我们将使用CERT2SPC(certificate to Software Publishing Certificate)应用程序来将两个证书加入到PKCS#7签名块中,这

个对象实质上充当包括在签名对象中的证书的句柄,一般只有两种证书,以下我们使用其中的
CERT2SPC。CERT2SPC ROOT.CER TESTCERT.CER TESTCERT.SPC
  在这个例子中的三个参数分别是微软提供的基础证书、我们在第一步中创建的证书以及用来存储PKCS#7签名块对象的新文件名。

现在你已经有了一个完整的证书,在第三步中,你将把它加入到Active控件中,即使用以下命令行。
  SIGNCODE -prog OCXEXMPL.OCX -spc TESTCERT.SPC -pvk MYKEY.PVK
  这个命令行实际完成了很多任务,它做的第一件事是创建一个加密摘要的映像文件(在此例中是OCXEXMPL.OCX),然后用私有的

密钥标志它,这个加密的摘要允许客户对映像文件的当前状态和它接收到的文件状态进行比较,客户将使用这个比较结果来检测文件

是否有任何形式的损害;下一件事,SIGNCODE删除从SPC文件中发现的所有X.509证书,并使用X.509证书的序列号和已标志的加密摘

要创建一个新的PKCS#7数字签名对象;最后,它将这个新的PKCS#7数字签名对象随同X.509证书一同嵌入到映像文件中。
  考虑到SIGNCODE程序所做的大量工作,你将需要检验它的结果,这就是第四步要处理的工作。首先要检验数字签名是否正确地嵌

入了文件,你可以使用PESIGMGR应用程序来处理,你所要提供的只是被检验文件的名字,如果获得一个成功的信息,便可使用

CHKTRUST程序来检验可执行代码是否已用数字签名正确地表达了,这个程序与用户浏览器所做的工作相似,它首先检验数字签名对象

,然后是X.509证书,如果两者都检查完毕,CHKTRUST也将检验映像文件的代码,确认是否与数字加密摘要相一致。CHKTRUST最后所

做的处理是浏览器一般不做的,那就是检验多种证书之间的连接关系并确认独立的链最后终结在基础证书位置。

完成实际测试
  检验已签名控件所要做的最后一步是实际使用该控件。你必须通过Internet连接来进行测试。简单地将控件移入你的Internet服

务器中,确认它不再在你的本机上有注册,然后尽量使用浏览器来查看测试页。如果一切工作正常,当你下载这个控件时,你应该看

到一个显示出来的证书,而不是一般的警告信息。
  即便控件被正确地签名了,也还有一些东西会导致你的测试失败。可能发生的第一个错误是没有正确格式化<OBJECT>标志。请确

认你的CODEBASE属性指向了控件所在的位置,另外,在你的机器上使用URL来代替目录位置,例如,如果控件位于Web服务器的

CONTROLS子目录下,则CODEBASE属性使用如下的URL:http://www.mycompany.com/CONTROLS/OCXEXMPL.OCX
  在本机做好签名后,你可能想双重检验你的控件。虽然控件在签名过程中受到损害的情况很少,但还是存在这种可能性的,如果

你第一次在远程位置测试时,控件工作不正常,那么请确认控件在你的本地测试页上工作是否正常。

【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值