对于PKI及证书服务的这些概念,相信初学者会有许多迷惑的地方,那是因为其中的某些关键概念没有理解清楚,我力争以通俗易懂的方式给初学者一些启示,也给以后自己忘了的时候一个参考:) !
参考资料:http://technet.microsoft.com
基本概念:
1.接收证书的实体是证书的“使用者”;证书的颁发者和签)。
解读:证书是使用者用来证明自己身份的凭证,实际上是证书的拥有者,这个证书在使用者申请后由CA颁发。证书拥有者可以是人员(例如用户)、设备(例如计算机)和计算机上运行的服务(例如 IPSec)。CA可是不会随便颁发证书给你的,他把证书颁发给你,就说明承认了你的合法性,说明你符合了他的策略。
2.证书包含的信息:
? |
使用者的公钥值。 |
? |
使用者标识信息(如名称和电子邮件地址)。 |
? |
有效期(证书的有效时间)。 |
? |
颁发者标识信息。 |
? |
颁发者的数字签名,用来证明使用者的公钥和使用者的标识信息之间的绑定关系是否有效。 |
解读:有了颁发者的数字签名,就说明了CA承认了这张证书的有效性,数字签名是使用私钥的,是CA的私钥,也就是谁签名就用谁的私钥,以验证身份,这也正是数字签名的作用。至于使用者的公钥,别人可以用它来加密,加密了的信息只有用使用者的私钥才能解密,这个私钥是保密的,只有使用者知道,除非他泄露了!
这里要理解两个相关的概念:数字签名和加密。
数字签名:验证身份,使用签名者的私钥,因为这个密钥只有签名者自己知道,所以别人也就认为这个签名是由签名者作出的,所以要做好私钥的保密性!
加密:在发送方和接收方之间传递信息,如果对信息进行加密,将会增强安全性。这个加密使用接收方的公钥,但是,只有接收方的私钥能够解密。而公钥是公开的,只要拿到接收方的一张证书,就能知道他的公钥了。为了向发送方证明自己的身份,接收方会向发送方传送自己的证书。注意和数字签名的区别,可以简单理解为数字签名是使用发送方的私钥,而加密是使用接收方的公钥!
3.公钥和私钥
在任何情况下,当您生成了新证书的申请时,该申请中的信息都将先从申请程序传到 CryptoAPI 中。CryptoAPI 会将正确的数据传送到名为加密服务提供程序 (CSP)(安装在您的计算机上或您的计算机可以访问的设备上)的程序中。如果 CSP 是基于软件的,它将在您的计算机上生成一个公钥和一个私钥,这两个密钥通常称为密钥对。如果 CSP 是基于硬件的,例如智能卡 CSP,它将指示由一个硬件生成密钥对。
密钥生成后,软件CSP 将进行加密并保护私钥的安全。智能卡CSP 将私钥存储在智能卡中,并由智能卡控制对该密钥的访问。公钥连同证书申请者信息一起被发送到证书颁发机构。一旦 CA 根据它的策略确认了证书请求,它将使用它自己的私钥在证书上创建数字签名,然后将它颁发给申请人。随后,证书申请人将获得来自 CA 的证书以及相应的选项,以便将它安装在计算机或硬件设备上的适当证书存储区。
加密服务提供程序 (CSP) 是 Windows 操作系统中提供一般加密功能的硬件和软件组件。可以编写这些 CSP 以提供各种加密和签名算法。
解读:主要是针对非对称加密算法,CSP会自动生成密钥对,其中公钥是公开的,但私钥一定要保密。数字证书中包含了公钥信息。
CSP是真正实行加密的独立模块,他既可以由软件实现也可以由硬件实现。但是他必须符合CryptoAPI接口的规范。每个CSP都有一个名字和一个类型。每个CSP的名字是唯一的,这样便于CryptoAPI找到对应的CSP。目前已经有9种CSP类型,并且还在增长。每个CSP有一个密钥库,密钥库用于存储密钥。而每个密钥库包括一个或多个密钥容器(KeyContainers)。每个密钥容器中含属于一个特定用户的所有密钥对。每个密钥容器被赋予一个唯一的名字。在销毁密钥容器前CSP将永久保存每一个密钥容器,包括保存每个密钥容器中的公/私钥对。
4.信任的建立
当两个实体(例如设备、个人、应用程序或服务)试图建立标识和信任时,如果两个实体都信任相同的证书颁发机构(CA),就能够在它们之间实现标识和信任的结合。当某个证书使用者提供了由受信任的 CA 所颁发的证书之后,试图与之建立信任的实体通过将证书使用者的证书保存在它自己的证书存储中,并且(如果适用)使用包含在证书中的公钥来加密会话密钥以便使所有与证书使用者进行的后续通讯都是安全的,就可以继续进行信息交换。
解读:并不是别人给我们一张证书我们就承认他的,就像文凭一样,中国的大学毕业证书到了国外就不承认了,我们要信任证书使用者的身份,必须首先要信任给他颁发证书的证书颁发机构(CA),就像必须先承认大学,才能承认他的证书一样。而要信任CA,机器上必须装有CA证书,即CA Certificate,这个是证明CA身份的证书,可以是其他CA颁发给他的,也可以是自签名的(也就是自己颁发给自己的)。很多CA都是公认的,像我们个人也可以向第三方CA申请证书,比如Verisign,就是需要Money!
一个简单的实例是,通信双方A和B,A可以生成自签名证书(比如像Cisco的ACS),A生成自签名证书后,在A上安装,这样A就信任A颁发的证书了,把这份证书copy到B上并安装,这样B也信任A颁发的证书了,这样A和B就信任相同的CA,就可以相互验证身份了!有自签名证书也免去了单独安装证书服务器或向第三方CA申请证书的麻烦。