PKI 、SSL 网站与邮件安全
当你在网络上发送数据时,这些数据可能会在发送过程中被截获、修改、而PKI(Public Key Infrastructure,公开密钥基础架构)可以确保电子邮件、电子商务交易、文件发送等各类数据发送的安全性。
PKI 概述
                   用户通过网络将数据发送给接收者,可以利用PKI所提供的以下两种功能来确保数据发送的安全性:

                   1:将发送的数据加密(encryption)。
                   2:接收者的计算机收到数据后,会验证该数据是否由发件人本人所发送(authentication)。同时还可以确认数据的完整性(integrity),也就是检查数据在发送过程中是否被修改。

         PKI根据Public Key Cryptography(公开密码编码学)来提供上述功能,而用户需要有用以下一组密钥来支持这些功能:
                   一、公钥:用户的公钥(Public Key)可以公开给其他用户。
                   二、私钥:用户的私钥(Private key)是该用户私有的,且是存储在用户的计算机内,只有他能够访问。
         用户需要通过向 证书颁发机构(Certification Authority,CA)申请证书(Certificate)的方法来拥有与使用这一组密钥。
          公钥加密
         数据加密后,必须经过解密才读的到数据的内容。PKI使用 公钥加密(Public Key Encryption)来将数据加密与解密。发件人利用就收方的公钥将数据加密,而接收方利用自己的私钥将数据解密,如下图就是用户jack发送一封经过加密的电子邮件给用户Mary的流程。
 
         图中Jack必须先取得Mary的公钥,才可以利用此密钥来将电子邮件加密,而因为Mary的私钥之存储在他的计算机内,故只有她的计算机可以将此邮件解密,因此她可以正常读取此邮件,其他用户即使拦截这封邮件也无法读取邮件内容,正常情况下他们没有Mary的私钥,无法将其解密。
          提示:
          公钥加密使用一组密钥:公钥与私钥,其中公钥用来加密,而私钥用来解密,这种方法又成为 非对称(asymmetric)加密。还有一种加密是 私钥加密(secret key encryption),又成为 对称(symmetric)加密,其加密、解密都是使用同一个密钥。

          公钥验证:
         发件人可以利用 公钥验证(Public Key Authentication)来将要发送的数据“数字签名”(digital signature),而接收方在收到数据后,便能够通过此数字签名来验证数据是否确实是由发件人本人所发出的,同时还会检查数据在发送的过程中是否被修改。
         发件人是利用自己的私钥将数据签名,而接收方会利用发件人的公钥来验证此份数据,下图即为用户Jack发送一封经过签名的电子邮件给用户Mary的流程。
 
         由于图中的邮件是经过Jack的私钥签名,而公钥与私钥是一对的,因此接收方Mary必须先取得发件人Jack 的公钥后,才可以利用此密钥来验证这封邮件是否由Jack本人所发送过来的,并检查这封邮件是否被修改。
          数字签名是如何产生的?又如何用来验证身份的,可以参考下图流程。
 
以下简要解释下图中的流程:
1、发件人的电子邮件经过 消息散列算法(Message hash algorithm)的运算处理后,产生一个消息再要(Message digest),它是 数字指纹(digital finderprint)。
2、发件人的电子邮件软件利用发件人的私钥将此消息摘要加密,所使用的加密方法为 公钥加密算法(public key encryption algorithm),加密后的结果被称为数字签名。
3、发件人的电子邮件软件将原电子邮件与数字签名一起发送给接收方。
4、接收方的电子邮件软件会将收到的电子邮件与数字签名分开处理:
         ·电子邮件重新经过 消息散列算法的运算后,产生一个新的message digest。
         ·数字签名经过 公钥加密算法的解密处理后,可得到发件人传来的原message digest。
5、新message digest与原message digest应该相同,否则表示这封电子邮件被改动或是假冒身份者发来的。
 
         SSL 网站安全连接
         SSL(Secure Socket Layer)是一个以PKI为基础的安全协议,若要让网站拥有SSL安全连接功能的话,就必须为网站向证书颁发机构(CA)申请SSL证书(网页服务器证书),证书内包含了公钥、证书的有效期限,发放此证书的CA、CA的数字签名等数据。
         在网站拥有SSL证书之后,客户端与网站之间就可以通过SSL安全连接来通信,也就是将URL路径中的http改成https,例如网站为www.itchenyi.com。则客户端是利用https://www.itchenyi.com来连接网站。
         下图中,说明客户端与网站之间如何新建SSL安全连接,新建SSL安全连接时,需要新建一个双方都同意的 会话密钥(session key),并利用此私钥来将双方所发送的数据加密、解密并确认数据是否被篡改。
         1、客户端在浏览器内通过https://www.itchenyi.com来连接网站,其中的https表示要与网站之间新建SSL安全连接。
         2、网站收到客户端的请求后,会将网站本身的证书信息(内含公钥)发送给客户端的浏览器。
         3、浏览器与网站双方开始协商SSL连接的安全级别,例如选择40或128位的加密方式,加密位数越多,越难以破解,数据就越安全,但网站性能就越差。
 
         4、浏览器根据双方同意的安全级别来新建会话密钥,利用网站的公钥将会话加密,将加密过后的会话密钥发送给网站。
         5、网站利用它自己的私钥来将会话密钥解密。
         6、之后网站与浏览器双方相互之间发送的所有数据,都会利用这个会话密钥将其加密与解密。
         “ 证书颁发机构( CA ”概述与根CA的安装
         无论是电子邮件保护或SSL网站安全连接,都必须申请证书(certifietion),才可以使用公钥与私钥来执行数据加密与身份验证操作。证书就好像是 机动车驾驶证一样,必须拥有 机动车驾驶证(证书)才能开车(使用密钥)。而负责发放证书的机构就是被成为 证书颁发机构(Certification Authority,CA)。
         在申请证书时,需要输入姓名、地址与电子邮件地址等数据,这些数据会被发送到一个成为CSP(cryptographic service provider,密码学服务提供者)的程序,此程序已经被安装在申请者的计算机内或此计算机可以访问的设备里。
         CSP会自动创建一对密钥:一个公钥和一个私钥。CSP会将私钥存储到申请者计算机的注册表(registry)中,然后将证书申请数据与公钥一起发送到CA。CA检查这些数据无误后,会利用自己的私钥将要发放的证书就加以签名,然后发放此证书。申请者收到证书后,将证书安装到他的计算机。
         证书内包含了证书的发放对象(用户或计算机)、证书有效期限、发放此证书CA与CA的数字签名,(类似于机动车驾驶证上的交通管理局盖章),还有申请者的姓名、地址、电子邮件地址、公钥等数据。
          提示:
         用户计算机若有安装卡片阅读机的话,他可以利用智能卡来登录,不过也需要通过类似程序来申请证书,CSP会将私钥存储到智能卡中。

          CA 的信任
         在PKI架构之下,当用户利用某CA所发放的证书来发送一份签名的电子邮件时,接收方的计算机应该信任(Trust)由此CA所发放的证书,否则接收方的计算机会将此电子邮件视为有问题的邮件。
         又例如客户端利用浏览器连接SSL网站时,客户端计算机也必须信任发放SSL证书给网站的CA,否则客户端浏览器会显示警告信息。
         Windows系统默认已经自动信任了一些知名商业CA,以Windows7来说可以通过【打开浏览器Internet Explorer → 工具菜单 → Internet选项 → 内容标签 → 证书 → 下图所示, 受信任的根证书颁发机构标签】来查看此计算机已经信任的CA。
 
         你可以向上述商业CA来申请证书,例如Versign,但如果公司只是希望在各分公司、企业合作伙伴、供应商与客户之间,能够安全通过因特网发送数据的话,则可以不用向上述商业CA申请证书,因为你可以利用Windows Server 2008 R2的Active Directory 证书服务(Active Directory Certificate Services,AD CS)来自行架设CA,然后利用此CA来发放证书给员工、客户与供应商等,并让他们的计算机来信任此CA。
          提示:
         虽然明晨个为Active Directory Certificate Services (AD CS),但即使没有Active Directory域环境,还是可以通过它来提供CA的服务。

         AD CS 的CA 种类
         若通过Windows Server 2008 R2的Active Directory  证书服务(AC CS)来提供CA服务的话,则你可以选择将CA设置为以下角色之一:
         1:企业根CA(enterprise root CA)
         企业根CA需要Active Directory域,你可以将企业根CA安装到域控制站或成员服务器。企业根CA发放证书的对象仅限域用户,当域用户来申请证书时,企业根CA可以从Active Directory来得知该用户的相关信息,并据以确定该用户是否用权利来申请所需证书。大部分新款夏,企业根CA主要应该用来发放证书给与子级CA,虽然企业根CA还是可以发放保护电子邮件安全、网站SSL安全连接等证书,不过应该将发放这些证书的工作交给子级CA来负责。
         2:企业子级CA(enterprise subordinate CA)
         企业子级CA也需要Active Directory域,企业子级CA适合于用来发放保护电子邮件安全、网站SSL安全连接等证书,企业子级CA必须向其父级CA(例如企业根CA)取得证书之后,才会正常运行。企业子级CA也可以发放证书给再下一层的子级CA。
         3:独立根CA(standalone root CA)
         独立根CA的角色与功能类似于企业根CA,但不需要Active Directory域,扮演独立根CA角色的计算机可以是独立服务器、成员服务器或域控制器。无论是否域用户,都可以向独立根CA申请证书。
         4:独立子级CA(standalone subordinate CA)
         独立子级CA的角色与功能类似于企业子级CA,但不需要Active Directory域,扮演独立子级CA角色的计算机可以是独立服务器、成员服务器或域控制器。无论是否域用户,都可以向独立子级CA申请证书。

          安装AD CS  与架设根CA
         我们需要通过添加Active Directory 证书服务角色的方式来将企业或独立根CA安装到Windows Server 2008 R2计算机:
         1:若要安装企业根CA,需要用域Administrator身份登录。
         2:单击左下角 服务器管理器→单击 角色界面右边的 添加角色
         3:出现开始之前的界面时单击下一步。
         4:如下图,选择Active Directory 证书服务后单击下一步。
 
         5:在Active Directory 证书服务简介界面中单击下一步。
         6:除了默认的证书颁发机构外,选择证书颁发机构Web注册(如下图)并在跳出的界面中单击 添加所需的角色服务来安装IIS网站,以便让用户可以利用浏览器来申请证书。
         7:回到 选择角色服务器界面时单击下一步。
         8:如下图,选择CA类型后单击下一步。
 
          提示:
         如果此计算机是独立服务器或你不是用域系统管理员身份登录的话,将无法选择企业CA。
         9:如下图,选择根CA后单击下一步。
         10:如下图,选择新建私钥后单击下一步,此为CA的私钥,CA必须拥有私钥后才可以发放证书给客户端。
          提示:
         若你是在重新安装CA的话(之前已经在这台计算机安装过),则你可以选择使用前一次安装时所创建的私钥。
         11:如下图单击下一步采用默认的私钥创建方法即可。
         12:如下图为此CA设置名称后单击下一步。
         13:在 设置有效期界面中单击下一步。CA的有效期默认为5年。
         14:在 配置证书数据库界面中单击下一步来采用默认值即可。
         15:在 WEB 服务器(IIS 界面中单击下一步。
         16:在 选择角色服务界面中单击下一步。
         17:确认在 确认安装选择界面中的选择无误后单击安装。
         18:出现 安装结果界面时单击关闭。

         安装完成后可通过【开始→管理工具→证书颁发机构】来管理CA,如下图为独立根CA的管理界面。
         企业根CA可发放的证书种类很多,而且它是根据 证书模板(如下图)来发放证书,例如图中右方的用户模板内提供了可以用来将文件加密的证书、保护电子邮件安全的证书与验证客户端身份的证书。
          如何信任企业根CA
         Active Directory域会通过组策略让域内所有计算机自动信任企业根CA(也就是自动将企业根CA的证书安装到客户端计算机),如下图是在域内一台Windows XP计算机利用【打开Internet Explorer → 工具菜单→Internet选项→内容标签→证书→受信任的根证书颁发机构】所看到的界面,此计算机自动信任CA“”(它是我们所假设的企业根CA)。
          如何手动信任企业或独立根CA
         未加入域的计算机并未信任企业CA,还有无论是否为域成员计算机,他们默认也都没有信任独立根CA,但是我们我可以在这些计算机上执行手动信任企业根CA或独立根CA的程序,一下步骤是让一台WIN-XP的客户端计算机来信任Windows Server 2008R2独立根CA.
         1:执行网页浏览器Internet Explorer,并输入一下URL路径:
         http://CA的主机名、计算机名或IP地址/certsv

          提示:
         如果客户端为Windows Server 2008R2或Windows Server 2008的话,需先将Internet Explorer增强的安全配置(IE ESC)禁用,否则系统会阻止连接CA网站:【单击服务器管理器→单击主界面的配置IE ESC→选择管理员处的禁用】。
         2:如下图单击下载CA证书、证书链或CRL
         3:如下图,单击下载CA证书链(或单击下载CA证书),然后单击保存以便将其存储,默认文件名为certnew.p7b
         4:俺Windows+R键输入MMC后单击回车→文件菜单→添加/删除管理单元,从列表中选择证书后单击添加→如下图选择计算机账户→单击下一步→完成→确定。
         5:如下图【展开到受信任的根证书颁发机构→对着证书单击右键→所有任务→导入】。
         6:出现 欢迎使用证书导入向导界面时单击下一步。
         7:选择前面下载的CA证书链接文件后单击下一步。
         8:如下图,直接单击下一步。
         9:出现完成证书导入向导界面时单击完成、接着单击确定。
         10:下图为完成后的界面,可以看到CA里有了受信任的itchenyi