⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 204.htm

📁 探索Windows 2000发展策略以及中介层技术设计的基本概念
💻 HTM
📖 第 1 页 / 共 5 页
字号:
有些延伸的属性是标准的,有些则可能由专属厂商定义的。Windows 2000中这些最重要的栏位将会在稍後描述。</span><span  id=Layer83></li><br></font></ul></font><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个凭证包含principal的名称,公开金钥等等</span><span  id=Layer84></font></p><hr><br><center><a target=_new href=imagesh/4-5.gif><img border=0 src='imagesl/4-5.gif'></a></center></span><span  id=Layer85><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-5</span><span  id=Layer86>&nbsp;</b></font>一个凭证包含主题名称、公开金钥与其它资讯,全部被发行者进行数位签名。</span><span  id=Layer87></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>每个凭证都以发行者的数位签章做为结尾。就像所有的数位签章一样,一个凭证的签章是使用发行者(通常是某些公司)的私密金钥产生的,同时它可以使用发行者的公开金钥验证。凭证是没有加密的,在其中的东西没有可称得上秘密的。不过因为它包含了发行者的数位签章,任何人得到这个凭证都可以验证它是否真的由签章者建立的。</span><span  id=Layer88></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>每个凭证都是由它的发行者经数位签章过的</span><span  id=Layer89></font></p><hr><p><font size=2 color=#3c3c3c face=arial>若要知道凭证是如何解决这个问题:可靠地学习某个人的公开金钥,那就得看看它们是如何建立的。凭证的发行者通常称做凭证授权单位(certification authority,CA),若我希望取得自己的凭证,首先必须找到一个适当的CA给我一个凭证(成为「适当CA」的要素稍後将简短描述。)一旦选择一个CA後,便可以使用我的名称以及公开金钥来展示凭证了。有时我必须向CA证明我是谁,以及我真正的公开金钥。该怎麽做则依赖於CA。若这个CA是一个我工作所在的公司,我可能需要证明我是这家公司的员工。若CA是一个外部的组织,它可能需要我的驾照或护照或其它能证明我身份的东西,或者是验证我的信用卡以证明我的存在。重点是我得向CA证明我的识别码与我的公开金钥。然後CA会发行一个验证包含这两样东西,再加上上述的其它资讯。对凭证签章後,CA便相信我的身份以及确信这把公开金钥是属於我。</span><span  id=Layer90></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>凭证是由凭证机构(CA)发行的</span><span  id=Layer91></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>上述都是在假设没有骇客得到CA的私密金钥条件下成立的。事实上,若要让整个公开金钥技术正常地运作,每个principal必须将他们的私密金钥放在绝对安全的地方  只有他们才知道。若有任何人知道我的私密金钥或你的,或更糟的知道CA的,问题就会发生了。</span><span  id=Layer92></font></p><hr><p><font size=2 color=#3c3c3c face=arial>现在,当我传送给你一份已签章过的讯息时,我不仅仅可以随讯息传送我的公开金钥,还可以将公开金钥包装在一个凭证中。然後你便可以使用发行凭证给我的CA之公开金钥来验证凭证上的数位签章。若这个数位签章是有效的,你便可以从凭证中萃取出我的名字与公开金钥,并得知这真的是我的公开金钥。现在你便可以安全地使用我的公开金钥来验证我讯息上的数位签章,因此证明我就是讯息的传送者。这个过程如图4-6所示。</span><span  id=Layer93></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个凭证可以和签章过的讯息一起传送</span><span  id=Layer94></font></p><hr><br><center><a target=_new href=imagesh/4-6.gif><img border=0 src='imagesl/4-6.gif'></a></center></span><span  id=Layer95><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-6</span><span  id=Layer96>&nbsp;</b></font>签章过的讯息之接收者以及凭证可以验证凭证的签章,从凭证中萃取传送者的公开金钥,然後使用它来验证讯息的数位签章。</span><span  id=Layer97></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>若要成为CA需要拥有一些软体或硬体以便能够产生凭证。为了要执行这个功能,Windows 2000中包含了Microsoft Certificate Services。本章将会详细地描述Certification services,不过现在要知道的是	Windows 2000确实提供一个方法以便产生、管理凭证。</span><span  id=Layer98></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Windows  2000包含可产生并管理凭证的软体</span><span  id=Layer99></font></p><hr><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;凭证阶层</span><span  id=Layer100>&nbsp;</b></font>(</span><span  id=Layer101><font size=2 face=arial color=#3e80d7><b>&nbsp;Certification Hierarchies</span><span  id=Layer102>&nbsp;</b></font>) 如果你还在阅读,你可能已经注意到一些潜在的问题。因为验证一个凭证的数位签章需要得知发行这个凭证的CA之公开金钥,要如何才能够可靠地获得这个公开金钥呢?最常见的解决方案便是使用取得其它公开金钥一样的方式来取得:从一个凭证中。CA自己也有凭证,因此便可以从它自己的凭证萃取出CA的公开金钥。但是谁发行了CA的凭证呢?凭证拥有的是谁的数位签章呢?</span><span  id=Layer103></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个CA的公开金钥可从凭证中粹取出来</span><span  id=Layer104></font></p><hr><p><font size=2 color=#3c3c3c face=arial>在此有许多可能的答案。若这个CA是所谓的根CA(root CA),它的凭证是自己签署的。也就是说,CA在它的凭证上使用自己的私密金钥签章。验证自行签署的凭证之签章需要安全地获得CA的公开金钥,或许是从CA的网站上下载,或以其它可靠的方式完成,然後使用公开金钥来验证凭证上的数位签章。决定信任的CA,然後签署他们的凭证(哪一个CA是你愿意接受成为根CA)是一个很严肃的问题,而Windows 2000如何进行控制将於本章描述。</span><span  id=Layer105></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>根CA拥有自己签署的凭证</span><span  id=Layer106></font></p><hr><p><font size=2 color=#3c3c3c face=arial>另一个选择是CA的凭证是由另一个CA发行的。在这个情况下,检查CA凭证上的数位签章需要得知发行此凭证的CA之公开金钥。将CA组成阶层是很平常的,最上层是根CA,它拥有自己签署的凭证,然後还有一些中间阶层的CA(也称为次级CA)。这些CA则由阶层中上层的CA进行签署。看起来如图4-7所示。</span><span  id=Layer107></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>中间层的CA的凭证是由上层的CA签署的</span><span  id=Layer108></font></p><hr><a name="4-7"></span><span  id=Layer109><br><center><a target=_new href=imagesh/4-7.gif><img border=0 src='imagesl/4-7.gif'></a></center></span><span  id=Layer110><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-7</span><span  id=Layer111>&nbsp;</b></font>建立CA组织阶层,在根CA下有一或多个等级的中间阶层CA。</span><span  id=Layer112></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>就图4-7的联想,一个常见的惯例是让根CA只发行阶层中位於它下层的CA凭证,然後对於下层的CA再发行凭证给它次一层的CA,依此类推。CA阶层中有多少等级是多变的。一个简单的结构中可能只有一个单一的CA直接发行凭证给principal,而较为复杂的结构可能牵涉到许多等级。举例来说,一家大公司可能不是从一家CA中取得凭证,将所有取得凭证的要求转送到一台伺服器可能不切实际,因此某些类型的分散式凭证阶层就有必要了。同样地,可因不同的目的来发行不同的凭证,传送安全性的电子邮件、稽核一个网域等等。因此不同的CA可以用来建立不同类型的凭证。</span><span  id=Layer113></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>较高等级的CA通常只发行凭证给其它CA</span><span  id=Layer114></font></p><hr><p><font size=2 color=#3c3c3c face=arial>思考一会儿,在这个情况下,关於验证一个principal的数位签章必要的东西是什麽。在一个阶层式的CA中,不仅仅只有principal的凭证需要验证,阶层中所有principal之上每个CA的凭证都需要验证。为了要能让你验证我的数位签章,我可能不仅需要提供给你我的凭证,也要提供整系列的凭证。这一群凭证通常称做为一个凭证链(certification chain,或有时称为凭证路径,certification path)。这个凭证链中包含凭证的清单,除最後一个凭证之外,所有的凭证都包含CA阶层中次级CA的公开金钥。只有最後的凭证,通常称之为末端实体(end-entity)凭证,真正包含了principal的公开金钥。这个概念是来自於每个凭证签署者之公开金钥可以事先从凭证链中的凭证萃取出来,然後用来验证凭证的签章。</span><span  id=Layer115></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>验证一个数位签章可能要一个凭证链(certification chain)</span><span  id=Layer116></font></p><hr><p><font size=2 color=#3c3c3c face=arial>图4-8展示一个由图4-7的CA阶层所产生的凭证链。凭证链中最下层的凭证是用来验证principal的数位签章的。这也就是说,它是将要被验证的principal的末端实体(end-entity)凭证。在它和根凭证之间有两个中间凭证,这两个都是由阶层中适当的中间CA发行的。最上面则是自行签署的根凭证,当验证凭证链的动作开始执行时,便从根萃取出最高阶层的公开金钥。</span><span  id=Layer117></font></p><a name="4-8"></span><span  id=Layer118><br><center><a target=_new href=imagesh/4-8.gif><img border=0 src='imagesl/4-8.gif'></a></center></span><span  id=Layer119><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-8</span><span  id=Layer120>&nbsp;</b></font>在凭证链,每个CA的公开金钥是由阶层中上层的CA所发行的凭证萃取出来的。根CA拥有自行签署的凭证。</span><span  id=Layer121></td></table></font></center><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;控制欲信任的CA</span><span  id=Layer122>&nbsp;</b></font>公开金钥加密的概念是很简单很美妙的,不过就表面上看来,要套用它还需要一些工作。我们现在仍有一些概念要讨论。</span><span  id=Layer123></font></p><p><font size=2 color=#3c3c3c face=arial>假设我传送给你一个签章过的讯息,以及某个CA发出的凭证。若你使用CA的公开金钥来验证凭证上的数位签章,然後从凭证中萃取出我的名字与公开金钥,你可以确定的是CA确认那是我的公开金钥。一个你不信任的CA(譬如说你主要竞争者开的CA)可能会发出假的凭证。若你不信任发行凭证的CA,便无法信任包含在凭证中的公开金钥是真正属於凭证上面的名字指的那个principal。换句话说,若我传送给你一份已签章过的讯息以及一个凭证,只有在你信任发行凭证的CA时才能用来验证我。</span><span  id=Layer124></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>信任一个凭证需要信任发行凭证的CA</span><span  id=Layer125></font></p><hr><p><font size=2 color=#3c3c3c face=arial>CA阶层让事情变得更为有趣了。在一个阶层中,信任根CA代表的含意是你相信他并没有发行不可靠的凭证给它下层的CA。若你相信一个特定的根CA可能发行一个凭证给下层的CA,而下层的CA可能会发行假造的凭证,你就不应该信任这个根CA。</span><span  id=Layer126></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>选择信任哪一个CA是个重要的决定</span><span  id=Layer127></font></p><hr><p><font size=2 color=#3c3c3c face=arial>该信任哪一个CA呢?一般来说,许多公司会自动地希望信任他们自己的CA。举例来说,若你工作的公司已建立自己内部的凭证阶层,你可能愿意信任这些CA不会发行假造的凭证。不过如果你要使用数位签章来验证与其它公司交换的资讯时该如何呢?为了这个问题的诉求,今日已有许多商业公司扮演着受信任的CA(trusted CA)的角色。较着名的有VeriSign、Thawte,以及Belsign,还有很多。依赖於所要求的凭证真正的类型,这些公司伤很多脑筋来验证一个principal是否真的就是他宣称的那一个人。</span><span  id=Layer128></font></p><p><font size=2 color=#3c3c3c face=arial>不过在一个特殊的Windows 2000网域中,谁该决定该信任哪一个CA?需要每个使用者来做决定是个差劲的主意。较好的方案是允许系统管理者指定信任此网域中的CA,然後使用某些方法来实施这个选择。</span><span  id=Layer129></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Windows   2000允许集中控制该信任哪一个CA</span><span  id=Layer130></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>说得更清楚一些,该信任特定网域中哪一个CA的概念是与</span><span  id=Layer131>&nbsp;<a href=203.htm# target=_new>第叁章</span><span  id=Layer132></a>&nbsp;描述的跨网域信任独立的。在Windows 2000网域中的信任是基於Kerberos,一个以秘密金钥为基础的技术。CA信任只在使用以公开金钥为基础的技术才有关。)这也就是Windows 2000采取的方案,如何完成这个动作的方法将於下描述。</span><span  id=Layer133></font></p><hr><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;凭证废止清单</span><span  id=Layer134>&nbsp;</b></font>(</span><span  id=Layer135><font size=2 face=arial color=#3e80d7><b>&nbsp;Certificate Revocation Lists</span><span  id=Layer136>&nbsp;</b></font>)  假设我加入一家公司,而此公司的CA发行给我一个凭证。然後我便可以使用这个凭证,和我的公开金钥,来向每个信任我公司的CA不会发行假冒凭证的人证明我的身份。不过假设我离职了,或更糟糕的,因为做错事而被炒鱿鱼了。现在我前任的雇主不再愿意担保我的身份,不过我还是拥有他们给我组成凭证的这些位元组。或者假设有人偷窃了我的私密金钥,因此我不再是唯一能产生证明我身份之数位签章的人。我的凭证已不再能用来证明我。在上述两种情况下,底层的问题都是一样的:一旦凭证发行後,如何废止呢?</span><span  id=Layer137></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>有时凭证得废止</span><span  id=Layer138></font></p><hr><p><font size=2 color=#3c3c3c face=arial>其中一个答案是等待。每一个凭证都有有效期限,一旦过期,凭证就不再有用了。凭证的生命周期通常都是以年为单位计算,因此较折衷的解决方案(不愿等待太久的方法)还是必要的。凭证废止清单(Certificate revocation lists,CRLs)提供这个解决方案。每个CA都可以维护一个CRL,并让CRL指明哪一个已发行的凭证已被废止。每个废止的凭证是由它的序号(serial number)识别的,它包含在所有凭证的一个栏位中。每当一个凭证被使用後,如在验证数位签章的过程中,发行这个凭证的CA之CRL就可以用来检验,以确保这个凭证并没有被废止。</span><span  id=Layer139></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个CA的废止凭证包含在凭证废止清单(CRL)中。</span><span  id=Layer140></font></p><hr><p><font size=2 color=#3c3c3c face=arial>CRL同样在判断该信任哪一个网域时扮演一个重要的角色。毕竟信任一个CA代表的意思是相信它产生的所有凭证都是有效的。若要被信任,一个CA必须固定发行一个更新的CRL,以便让凭证的使用者判断凭证是否已被废止。而CRL本身也有有效期限,它让使用者知道何时该撷取新版本了。</span><span  id=Layer141></font></p><a name=204002><font color=#3e70d7 face=arial size=5><b>在Windows 2000中管理公开金钥技术</span><span  id=Layer142></b></font><p><font size=2 color=#3c3c3c face=arial>了解公开金钥的基本概念无疑是一件很重要的事,不过这只是成功条件的其中一个。需要公开金钥技术(20年前发行的)的其中一个理由已慢慢地蔓延开来:建立必要的基础架构并能够有效地使用要花很大的努力。Windows 2000代表了Microsoft的第一个尝试,将这个受广泛支援的技术内建到作业系统。本章其馀小节将描述Windows 2000支援的主要元件。</span><span  id=Layer143></font></p><font color=#3e72d7 face=arial size=4><b>CryptoAPI</span><span  id=Layer144></b></font><p><font size=2 color=#3c3c3c face=arial>和Windows 2000透过单一的Security Support Provider介面(SSPI) 显露出的分散式安全性服务相似的方法,它同样将加密服务隐藏在公用的API,称做CryptoAPI。这个介面允许存取任何安装在系统上的密码编译服务提供者(Cryptographic Service Provider,CSP)。CSP类似和SSPI一起使用的Security Service Providers (SSPs),不过它们并不是用来封装分散式安全性服务,而是用来封装密码编译服务(cryptographic service)。</span><span  id=Layer145></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>密码编译服务提供者可透过CryptoAPI存取</span><span  id=Layer146></font></p><hr><p><font size=2 color=#3c3c3c face=arial>将加密的细节从使用它的应用程式中隐藏起来是个好主意,理由如下:第一,将应用程式与加密技术保持独立可让这些应用程式更有弹性,因为CryptoAPI允许为不同的目的来安装并使用不同的密码编译提供者。第二,这个解决方案让程式设计师的生活更为简单,他们希望尽可能不要了解加密的细节。第叁,因为许多国家的政府已立法来控制输入、输出以及使用许多坚固的加密软体,模组化在加密技术中特别地有用。</span><span  id=Layer147></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>CryptoAPI协助应用程式更有弹性地使用安全性技术</span><span  id=Layer148></font></p><hr><p><font size=2 color=#3c3c3c face=arial>若使用CryptoAPI,应用程式便可以跟使用的加密技术独立开来。不必绑死在特定的演算法,应用程式可以直接呼叫标准的CryptoAPI呼叫。依赖於系统可用的CSP,应用程式可以取得任一等级的安全性机制。如此可允许使用加密技术的应用程式开发者在建立软体时,不须受汇出控制的支配。CryptoAPI架构将应用程式汇出的问题从应用程式开发者转移到CSP开发者的身上。</span><span  id=Layer149></font></p><p><font size=2 color=#3c3c3c face=arial>CryptoAPI透过一组C的函数呼叫显露它的服务,如图4-9所示,它被应用在许多Windows 2000应用程式之中。这个API允许应用程式建立金钥配对、加密资料与解密资料,建立杂凑(也称为检查码,或讯息摘要) 以及数位签章,并验证这些数位签章等等。CryptoAPI的使用者包含Windows 2000  SSL的实作以及Microsoft Certificate Services。CryptoAPI不仅仅只有允许对CSP的存取,它也提供程式码以支援其它重要的服务,如建立一个凭证链。</span><span  id=Layer150></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>应用程式使用CryptoAPI来建立金钥配对,并能跟数位签章一起运作</span><span  id=Layer151></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Windows 2000包含许多CSP</span><span  id=Layer152></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>Kerberos,Windows 2000核心的分散式安全性协定,它并没有显示在图4-9中,因为Kerberos并不使用CryptoAPI。Kerberos SSP自行包含一份Microsoft DES与RC4实作的复本。</span><span  id=Layer153></font></p><hr><br><center><a target=_new href=imagesh/4-9.gif><img border=0 src='imagesl/4-9.gif'></a></center></span><span  id=Layer154><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-9</span><span  id=Layer155>&nbsp;</b></font>SSP可透过CryptoAPI存取加密服务。</span><span  id=Layer156></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>Windows 2000内含许多不同的CSP。依赖於你使用的系统,Windows 2000系统可能包含:</span><span  id=Layer157></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;基本的RSA CSP</span><span  id=Layer158>&nbsp;</b></font>实作1024位元的RSA金钥,以及56位元的RC2与RC4金钥。因为它们的长度相当地短,这个CSP不需任何外销授权便可以使用。它同样也实作了MD5与SHA-1以产生讯息摘要(message digests)。</span><span  id=Layer159></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;增强的RSA CSP</span><span  id=Layer160>&nbsp;</b></font>实作了16k位元组的RSA(虽然长度很长,但效率很慢)、以及128位元的RC2与RC4金钥,和DES与Triple-DES。这些演算法提供有效、难以破解的安全性(DES则有一些例外)。增强的RSA CSP只有在北美地区才没有外销授权问题。</span><span  id=Layer161></li><br></font></ul></font><br><font size=2 color=#3c3c3c  face=arial><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>美国外销法律在本书出版时可能会改变,这个叙述在你阅读此书时可能不再为真。</span><span  id=Layer162></font></p><hr></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Diffie-Hellman/DSS CSP</span><span  id=Layer163>&nbsp;</b></font>实作Diffie-Hellman演算法以进行金钥交换,以及美国政府的数位签章标准(Digital Signature Standard,DSS)。</span><span  id=Layer164></li><br></font><p><font size=2 color=#3c3c3c face=arial>第叁协力厂商提供其它的CSP。举例来说,一个智慧卡的供应商必须实作一个适当的CSP以便配合卡片一起使用。不过CSP本身也有很敏感的议题。记住,加密软体很难取悦政府。因为这个因素,在Windows 2000中每个CSP执行档都必须由Microsoft签署数位签章。这个签章将在CSP载入时验证,以避免其它加密软体任意地介入。即使存取CSP软体开发工具(software development kit (SDK))已受控制,它并无法自由地从Microsoft的网站上下载。这表示骇客便没有办法撰写一个CSP,把它安装到Windows 2000,然後意外拥有内建存取加密的能力。虽然在技术上做得到,但政府机构一般来说不会对这麽容易存取的加密机制感到高兴,因此Windows 2000限定了哪些CSP可以使用。</span><span  id=Layer165></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>CSP必需由Microsoft进行数位签章的动作</span><span  id=Layer166></font></p><hr><font color=#3e72d7 face=arial size=4><b>储存私密金钥与凭证</span><span  id=Layer167></b></font><p><font size=2 color=#3c3c3c face=arial>我们已经看过,CSP实作公开金钥与秘密金钥(有时候)的加密演算法。不过典型上CSP同样也需要某些机制以储存资讯。举例来说,特定工作站的使用者可能会拥有一对金钥,代表使用者的私密金钥与凭证(包含对应的公开金钥)都可在此台机器上存取。在其他的情况下,只有凭证才需要储存,不需相关的私密金钥以便进行追踪。举例来说,当一个应用程式使用CSP来验证数位签章,此应用程式必需展示一个附签章的凭证链。若要验证这个签章,CSP需要存取凭证链中每一个凭证,不过并不需要对应到这些凭证的任一把私密金钥。</span><span  id=Layer168></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>CSP需要储存资料的地方</span><span  id=Layer169></font></p><hr><p><font size=2 color=#3c3c3c face=arial>对於智慧卡CSP来说,每一个使用者的私密金钥与凭证都是储存在使用者卡片上的硬体中。然而,对於软体CSP,私密金钥与凭证必须储存在使用者机器上的硬碟中。每个CSP可能都会定义自己的架构描述(schema)来储存私密金钥,不过Windows 2000同样提供了一些标准。对於凭证而言,Windows 2000定义许多不同的凭证存放区,包含:</span><span  id=Layer170></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;个人存放区</span><span  id=Layer171>&nbsp;</b></font>(</span><span  id=Layer172><font size=2 face=arial color=#3e80d7><b>&nbsp;Personal store</span><span  id=Layer173>&nbsp;</b></font>) 储存一台机器或特定电脑上个别使用者终端实体(end-entity)的凭证。这些使用者通常都需要建立一个数位签章,一个需要私密金钥的操作,因此这些凭证储存时必须参考到它相关的私密金钥。</span><span  id=Layer174></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;信任的根CA存放区</span><span  id=Layer175>&nbsp;</b></font>(</span><span  id=Layer176><font size=2 face=arial color=#3e80d7><b>&nbsp;Trusted Root CA Store</span><span  id=Layer177>&nbsp;</b></font>) 包含某些凭证阶层中信任的根CA所发行的凭证。Windows 2000出货时附上许多自行签署的根凭证,这些凭证是由商业上的CA载入到凭证存放区中,其馀的可透过管理工具新增。所有储存在此的凭证都是自行签署的。</span><span  id=Layer178></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;中继CA存放区</span><span  id=Layer179>&nbsp;</b></font>(</span><span  id=Layer180><font size=2 face=arial color=#3e80d7><b>&nbsp;Intermediate CA Sore</span><span  id=Layer181>&nbsp;</b></font>) 包含用来建构凭证链的凭证。这些凭证一向都是由中继CA发行的,中继CA是阶层中的一部份,但不是根CA。</span><span  id=Layer182></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;企业信任存放区</span><span  id=Layer183>&nbsp;</b></font>(</span><span  id=Layer184><font size=2 face=arial color=#3e80d7><b>&nbsp;Enterprise Trust Store</span><span  id=Layer185>&nbsp;</b></font>) 这个存放区不直接储存凭证,它储存凭证信任清单(Certificate Trust List(CTL))。什麽是CTS,以及如何使用CTL将於文後描述。</span><span  id=Layer186></li><br></font></ul></font><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>用做不同目的的凭证储存在不同的凭证存放区</span><span  id=Layer187></font></p><hr><p><font size=2 color=#3c3c3c face=arial>对於这些所有的选项,凭证真正是储存在系统登录中,当有需要验证数位签章时,可透过CryptoAPI存取。在图4-10的范例中,个人存放区只包含使用者A的凭证。这个凭证是由CA 2发行的,这个CA所属的阶层展示在</span><span  id=Layer188>&nbsp;<a href="#4-7" target=_new>图4-7</span><span  id=Layer189></a>&nbsp;,因此它已被其它凭证机构签署了。因为这是储存凭证资讯的电脑上之特定使用者,因此个人存放区也包含一个参考,指向关联到这个凭证的私密金钥。中继CA存放区包含CA 1到CA 2的凭证,这两者都是前述CA阶层的一部份,而CA 8则属於不同的CA阶层。CA 2的凭证是由CA 1发行的,因此携带了CA 1的数位签章。CA 1的凭证是由根CA X发行的,而CA 8的凭证是由不同的根CA,CA Y发行的。最後,信任的根CA存放区包含自我签署的根凭证,从CA X到CA Y。若系统上的CryptoAPI以及凭证存放区(展示於图4-10)被要求要验证某些使用者A签署的东西,所有验证所需的凭证(以及一些不需要的)都已在手上:一个为CA X自行签署的根凭证,CA 1与CA 2的中间凭证,还有使用者A的终端实体凭证。</span><span  id=Layer190></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>CryptoAPI可以存取任一种凭证存放区</span><span  id=Layer191></font></p><hr><p><font size=2 color=#3c3c3c face=arial>凭证也可以储存在Active Directory之中。任何目录中的使用者物件(代表一些使用者的帐号)都可以为这个使用者包含一个或多个凭证(在userCertificate型态的属性上)。如此可让每个人都有正确的权限以存取这些凭证,使得凭证能容易地在分散式环境中使用。</span><span  id=Layer192></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Active Directory也可以储存凭证</span><span  id=Layer193></font></p><hr><p><font size=2 color=#3c3c3c face=arial>虽然Windows 2000提供公用存放区区域来储存凭证,并可让任何应用程式存取,但每个CSP可能会提供自己的容器(container)以储存私密金钥。对於智慧卡CSP,容器以及它包含的私密金钥实际上都储存在卡上。对於基本的RSA与增强的RSA,私密金钥的容器都是储存在Windows 2000 Application Data目录中,为使用者设定档(user profile)资讯的一部份(它们并非和Windows NT 4一样储存在系统登录中)。储存的私密金钥是加密过的,所使用的加密演算法是依赖於master金钥。这把金钥是使用使用者的密码来加密的。</span><span  id=Layer194></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>CSP可以将私密金钥储存在许多地方</span><span  id=Layer195></font></p><hr><br><center><a target=_new href=imagesh/4-10.gif><img border=0 src='imagesl/4-10.gif'></a></center></span><span  id=Layer196><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-10</span><span  id=Layer197>&nbsp;</b></font>逻辑上,Windows 2000拥有许多的凭证存放区。</span><span  id=Layer198></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>预设一个使用者的私密金钥是存放於CSP的金钥贮藏库(key storage),通常代表建立金钥的机器上之硬碟中。若启动了漫游使用者设定档(roaming user profile)选项,当使用者登出时,使用者私密金钥的复本便会上载到档案伺服器。当使用者从其它的系统登入时,登入的过程中将会取得一张存取档案服务的票根(ticket),它包含在使用者设定档所在的机器,然後下载私密金钥以及其它设定档的资讯到使用者的系统,如图4-11所示。因为私密金钥已使用master秘密金钥加密,所以在网路上共享的档案伺服器上储存私密金钥是一件很合理、安全的事。</span><span  id=Layer199></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>私密金钥可以储存在单机或在使用者登入时从其它机器下载</span><span  id=Layer200></font></p><hr><br><center><a target=_new href=imagesh/4-11.gif><img border=0 src='imagesl/4-11.gif'></a></center></span><span  id=Layer201><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-11</span><span  id=Layer202>&nbsp;</b></font>若启动了漫游使用者设定档选项,使用者的秘密金钥将会储存在档案伺服器上,在使用者登入时下载到使用者的工作站。</span><span  id=Layer203></td></table></font></center><font color=#3e72d7 face=arial size=4><b>Microsoft Certificate Services</span><span  id=Layer204></b></font><p><font size=2 color=#3c3c3c face=arial>凭证是公开金钥基础架构非常重要的一部份。理论上,虽然一家外部的公司,如VeriSign可以提供一家公司所需的所有凭证,但若能自行产生凭证将会方便许多。(也比较便宜,因为这些公司每发出一张凭证都要收费。)即使是以产生凭证为生的第叁协力厂商也需要一些建立凭证的机制。Microsoft Certificate Services,Windows 2000标准的一部份,提供了这个机制。它可以让想成为公开CA的公司使用,或者让需要自行产生凭证的公司组织使用。无论是属於哪一类公司,Certificate Services提供建立并管理X.509凭证的智慧。最後,Certificate Services依赖於某些CSP提供的服务,并能透过CryptoAPI存取。</span><span  id=Layer205></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Microsoft Certificate Services可以发行并管理凭证</span><span  id=Layer206></font></p><hr><p><font size=2 color=#3c3c3c face=arial>客户端可以使用很多种方式从Certificate Services要求凭证,包含透过Hypertext Transfer Protocol (HTTP)、DCOM,或从一个档案中读取。传送的要求本身是使用标准的PKCS #10格式。它必须指定欲使用的凭证之目的。举例来说,凭证发行的目的如:验证客户端、验证伺服器、传送电子邮件、签署执行档程式码...等等。要求的结果是一个X.509v3凭证,并以PKCS #7标准格式回传。</span><span  id=Layer207></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>你可以使用许多方式来要求凭证</span><span  id=Layer208></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>「PKCS」代表Public Key Cryptography Standards,这一群标准的名称可用在许多不同的公开金钥技术上。PKCS #10定义要求凭证的一个标准格式。</span><span  id=Layer209></font></p><hr><p><font size=2 color=#3c3c3c face=arial>为了要更容易地建立要求,系统管理者可以使用凭证范本(certificate templates),其中包含特定要求类型的基本参数。个别的要求只要插入它要求的使用者专属值。Windows 2000包含许多事先定义的范本以让一般类型的要求使用,因此系统管理者可以只使用已存在的。Certificate Services也允许新增自订的原则(policy)以及exit模组,以实行公司认为重要的规则。举例来说,在某些公司的CA可能会使用policy模组在公司目前全职工作的员工清单中,寻找每个使用者要求的凭证,然後只发行凭证给在清单上的使用者。</span><span  id=Layer210></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Certificate Service可以使用policy模组自订</span><span  id=Layer211></font></p><hr><p><font size=2 color=#3c3c3c face=arial>一家公司有可能只有一个CA,建立一个多层次的CA可拥有较佳的安全性。这是因为在高阶层的CA可以在安全的地方保持离线的状态,让它们更不易被骇客存取。不管选择哪一种,使用Windows 2000 Certificate Services实作的CA必须设定成两种类型:企业CA与独立CA。这两者最重要的不同点在於:企业CA可与网域中的安全性服务和目录服务整合在一起,当它接收到网域中使用者的验证要求时,能够自动地发行一个凭证。对照上,独立CA一般在要求凭证时,需要明确地由系统管理者或其它方法审核通过。</span><span  id=Layer212></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Certificate Services支援企业CA与独立CA</span><span  id=Layer213></font></p><hr><p><font size=2 color=#3c3c3c face=arial>实际上,企业CA只能够部署为Windows 2000网域的一部份,它需要Active Directory。在发行一个凭证到使用者之前,企业CA在Active Directory中查看使用者,是否满足这项要求:这个使用者真的存在此网域中,同时这个使用者被允许取得这类凭证。若是如此,要求的凭证便自动地发行,不需人为的介入。同样地,企业CA也可以组态来发行他们产生的凭证,以及Active Directory中的CRL。</span><span  id=Layer214></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>当使用者要求凭证时,企业CA可以自动地发行凭证</span><span  id=Layer215></font></p><hr><p><font size=2 color=#3c3c3c face=arial>相形之下,独立CA并不需要存取Active Directory,因此它不必是Windows 2000网域中的一部份。很有可能独立CA不属於一个网域,然而若为网域的一部份,它可以将资讯发行到Active Directory,就像是企业CA一样。不过独立CA并不会自动地验证Active Directory中的使用者,而且若没有人为的介入,它们也不会自动地发行凭证。</span><span  id=Layer216></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>独立CA通常需要人为的介入才能发行一张凭证</span><span  id=Layer217></font></p><hr><p><font size=2 color=#3c3c3c face=arial>在大部份的公司中,绝大多数的CA都是企业CA,不过有一些情况下独立CA才是正确的选择。举例来说,想像一下一个商务的CA,如VeriSign,可能使用这类的软体。当使用者要求凭证时能自动地发行(类似企业CA一样)可能意义不大,一个商务的CA通常会离线以执行使用者识别码的验证工作。在发行凭证之前需要人为介入的独立CA恰好符合这类情况的要求。独立CA对於自行产生CA阶层的公司也是很有用的。因此在阶层中的CA大部份是企业CA,则根CA应该是独立CA。</span><span  id=Layer218></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>独立CA在某些情况下是很有用的</span><span  id=Layer219></font></p><hr><p><font size=2 color=#3c3c3c face=arial>回顾一下根CA只发行凭证给它阶层中下一层的CA,而非发行给终端使用者。虽然使用独立CA发行凭证给使用者可能会不太方便,让企业CA使用Active Directory验证使用者的存在比较好,然後再发行凭证,相对地直接在根之下的CA数量很少。更重要的是颁发凭证给根CA之下的新CA是很要紧的事,若使用有使用者介入的独立CA可能是一件好事。最後,在阶层的根使用独立CA允许保护CA执行所在的机器,它不一定要上线。</span><span  id=Layer220></font></p><p><font size=2 color=#3c3c3c face=arial>依赖於CA的类型以及存在於阶层中的位置,一个使用Windows 2000 Certificate Services的CA实例可以组态成下面四种类型:</span><span  id=Layer221></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;企业根CA</span><span  id=Layer222>&nbsp;</b></font>扮演阶层中最上层的CA角色。企业根CA只发行凭证给其它的CA使用,它们不直接发行凭证给使用者。因为它们位於CA阶层中的根,每个企业根CA都拥有一个自行签署的凭证。</span><span  id=Layer223></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;企业次级CA</span><span  id=Layer224>&nbsp;</b></font>在某些企业的阶层中非根的CA。它的凭证是由其它CA发行的,如企业根CA或其它的企业次级CA。</span><span  id=Layer225></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;独立根CA</span><span  id=Layer226>&nbsp;</b></font>类似一个独立根CA,不过若没有人为的介入并不会发行凭证。</span><span  id=Layer227></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;独立次级CA</span><span  id=Layer228>&nbsp;</b></font>类似一个企业次级CA,不过若没有人为的介入并不会发行凭证。</span><span  id=Layer229></li><br></font></ul></font><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Certificate Service支援根与次级CA</span><span  id=Layer230></font></p><hr><p><font size=2 color=#3c3c3c face=arial>为了要管理以Windows 2000为基础,使用Certificate Services的CA,系统管理者可以使用凭证授权单位M

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -