将证书用于内容加密
虽然数字签名可以验证作者的身份以及确保文档内容的一致性,但是它不能用来保护内容本身,如果某人拦截了数字签名信息,这个人是可以读取文档信息的,但是他假如想修改内容的话,数据签名是可以检测到文档并非原作者所修改的,这个概念已经通过上一章的实验验证过了。
如果你想保护文档的内容不被非法用户读取,你就必须将文档进行加密,Windows操作系统能够支持基于文件的加密,这种技术被称为文件加密系统(EFS Encrypting File System),Outlook的邮件也是可以被加密的。
EFS
要使用EFS来加密文件,你必须有一个EFS证书,和其他证书一样,这个证书也会有一个配对秘钥(一个公钥和一个私钥),但是这个配对秘钥不是直接被用于内容的加密和解密,如果将一个秘钥用来加密,另一个秘钥用来解密,这样的效率是非常低的,相比起用同一个秘钥来进行加解密,前者的速度会比后者慢100到1000倍,所以加密算法通常使用的是对称加密,它使用同一个秘钥来进行加解密。EFS可以说是将两种加密方式结合在一起的加密方式。
当用户选择将一个文件加密时,本地计算机会生成一个对称秘钥,这个就是加密文件的秘钥,文件被加密之后,系统使用用户的公钥去加密这个对称秘钥,然后将对称秘钥保存在文件头中。当最初给文件加密的用户想将文件解密,然后读取文件中的内容的时候,本地计算机会使用用户的私钥先将对称秘钥从文件头中解密出来,然后使用对称秘钥去将文件解密,文件头中的这个区域也被称作数据解密区。
上面这种方式适用于仅个人需要去访问加密文件,不会有其他的用户需要访问加密文件。但是我们遇到更多的情况是,用户需要访问其他人共享给他的加密文件,这种时候如果要将文件先解密然后再共享给其他人使用,是非常不方便也很难被用户所接受的,而且一旦最初给文件加密的用户将私钥遗失了,这个文件将无法被任何人访问。为了解决这个问题,EFS为每个文件定义了一个数据恢复区,当你在本地或者域环境使用EFS时,数据恢复代理角色会默认的被定义并将它设置成本地管理员或域管理员。数据恢复代理实际上就是一个拥有配对秘钥的证书,当加密文件因为私钥的问题而无法访问的时候,我们就可以通过它来解密文件。
当用户通过EFS来加密文件时,他的公钥会被用来加密对称秘钥,然后被加密的对称秘钥会存放在文件头中的数据解密区,同时数据恢复代理的公钥也会将对称秘钥加密,然后将加密的对称秘钥保存到文件头中的数据恢复区,如果定义了多个数据恢复代理,对称秘钥会被每个数据恢复代理的公钥加密一次,接下来如果最初的加密用户因为某些原因无法使用他的私钥对文件解密了,数据恢复代理就可以使用它的私钥去将对称秘钥从数据恢复区解密出来,然后用解密的对称秘钥去解密文件。
注意:你可以使用另一种方法替代数据恢复代理,秘钥恢复代理(KRA Key Recovery Agent)是一个可以从CA数据库中获取到用户私钥的功能,如果你在CA和EFS证书模板中启用了秘钥归档功能,那么就可以通过KRA来获取用户的私钥来解密对称秘钥。
当用户想把加密文件共享给其他用户时,这个过程其实与数据恢复代理过程类似,我们选用EFS共享时,文件的所有者必须从每个需要分享文件的用户处选择一个证书,这些证书是要能够在AD域中发布和取回的,当证书选好之后,目标用户的公钥会被收集到文件所有者的计算机上,然后计算机使用这些公钥分别加密对称秘钥,并将加密好的对称秘钥各自保存到文件头中,当用户想访问加密文件的内容时,他们会通过自己的私钥将对称秘钥解密,然后将文件解密。
注意:你还可以为BitLocker驱动器加密定义数据恢复代理,因为BitLocker数据恢复代理的证书模板是没有被预定义的,你可以复制KRA模板,然后在应用程序策略中选择BitLocker加密和BitLocker驱动器恢复代理,将他们加入到模板中,当用户注册了这个证书后,可以通过GPO去将它作为域中的BitLocker数据恢复代理证书,组策略的设置路径:计算机配置\Windows设置\安全性\公钥策略\BitLocker驱动器加密
邮件加密:
除了用EFS加密文件以及用BitLocker加密驱动器之外,我们还可以使用证书来加密邮件,但是邮件加密比数字签名要复杂的多,你可以将数字签名的邮件发给任意用户,但是你无法将加密的邮件发送给任意用户。你想发一封包含PKI的加密邮件给某人时,你必须拥有对方的配对秘钥中的公钥,在使用Exchange邮件系统的域环境中,你可以将所有邮箱用户的公钥发布到全球地址簿(GAL Global Address List),然后outlook能够非常容易的从GAL中提取收件者的公钥用于发送加密邮件。你将加密邮件发送给一个内部用户时,你的邮件应用程序(outlook)会从GAL中抓取收件者的公钥,然后用它加密邮件之后发送给收件者,在用户收到邮件之后,outlook会使用证书中的私钥来解密邮件。
将加密邮件发送给外部的用户,这个过程就更加复杂了,因为你可以将内部用户的公钥发布到GAL中,但是你无法将外部用户的公钥发布到GAL中,要发送加密邮件给外部用户,你必须先要获得他的公钥,你可以让用户将他的公钥通过.cer的文件发送给你,然后你将.cer文件导入到你的本地地址簿,另外如果外部用户给你发了一封数据签名的邮件,你就可以通过这个数据签名获得他的公钥,然后将他的公钥导入到你的本地地址簿,这样就能够发送加密邮件给这些用户了。
注意:如果你想对邮件提供可靠性验证,内容一致性以及内容保护,你可以同时使用数字签名和文件加密。
将证书用于验证
证书除了用于数字签名和加密之外,还可以用来作为用户和设备的验证。证书通常被用于网络访问验证,因为它能够为用户和计算机的验证提供很强的安全性,解决了基于密码验证的低安全性问题。
例如你使用证书去管理通过VPN连接访问网络的计算机,它可以对用户和计算机进行验证,用户可以通过用户名和密码进行验证,但是设备通过证书来验证。如果设备没有安装公司的证书,即使用户有访问权限,也是无法连接到公司网络的,这显然提升了网络的安全性。
使用证书来管理网络访问有两种方法,可扩展验证协议-传输层安全性(EAP-TLS)和受保护的可扩展验证协议(PEAP)。这两种方法都是使用证书来进行服务器验证,根据验证类型中配置的验证方法,证书可以被用来做用户和客户端设备的验证。对于L2TP IPsec VPN必须使用基于证书的验证。
证书还可以在部署了IPsec的NAP环境中用来验证客户端,这种情况下,健康注册授权机构发布一个证书给满足健康策略的客户端,以便客户端能够建立一个IPsec连接。
Windows2012的IIS也支持针对用户的证书验证,例如你可以将Exchange的OWA配置成使用基于证书的验证。
最后你还可以对移动设备使用证书验证,某些移动设备可以安装证书,然后使用证书验证用户或设备是否能够访问网络资源。