很久之前就答应devilman要写一个关于KRA的文章,无奈由于大连的课程一直很多,一直也没有环境和时间去研究,今天课程快结束了,我搭建了完整的实验环境,终于有时间研究了一下WIN2003
EE的CA里的新功能--KRA(密钥恢复代理)的使用,写了这个文章,还将继续完成从EXCHANGE
2000
KMS到WIN
2003
CA的迁移。本打算只写一个的,看来不能了,因为内容太多了,只好改成连载了,呵呵……,另外,本文不讨论过多的KRA技术的原理,有对技术原理感兴趣的,可以仔细阅读下面的参考文章,本文只对KRA在实际操作中的实战做分析,请谅解。
首先给出原文的参考文章:
Key Archival and Management in Windows Server 2003这篇文章是英文的,且很难看明白(可能是我的水平不够吧),郁闷……
一、KRA证书的申请
申请证书之前,首先需要建立和安装企业根CA(独立根CA不能建立KRA证书),怎么安装这个不用说了吧。呵呵。。
安装CA后,你需要在证书模板中要选择上密钥恢复代理。否则不能申请该证书。
1、通过证书管理单元申请
然后打开一个自定义的MMC,使用证书单元,申请证书。
选择证书类型为密钥恢复代理。
输入证书的好记名称,比如:KEYRECOVERY
完成证书申请吧,OK
申请完后,需要到CA管理界面上去颁发一下,方法不说了。颁发后的证书如下:
然后转到CA的属性里,在故障恢复代理页上,选择存档密钥,输入需要的KRA数量,这里是1个,在下面的部分增加上合法的KRA证书,这里就是上面申请的那个。刚增加的证书会显示为“未装载”,确定后系统会提示你重新启动证书服务,按规定重新启动后,证书即显示为有效了。如图:
注意:如果使用了多个KRA,就可以设置需要代理数量为多个。这里的数量要小于实际的证书数量。
再按此方法申请一个标准的EFS证书,注意:只有在已经存在企业CA的情况下,才能申请由CA颁发的EFS证书,否则EFS会使用自己颁发的证书。
2、使用WEB页面申请
也可以使用WEB证书页来申请,先打开http://ca/certsrv(建议使用HTTPS)。
选择申请一个证书
高级证书申请
选择创建一个向CA提交的申请
在这里注意了哦,要选择密钥恢复代理的证书模版。不要选错了。密钥大小为2048即可,如果你希望更高的安全,可以选择8192或更高。
选择完毕,按提交。系统将返回证书请求已经发送的提示。回到CA管理界面,你可以看到刚才提交的证书请求。
选择颁发,即可立即颁发证书。
颁发后请回到WEB页的首页,选择查看证书挂起申请。
安装此证书,即完成了申请。
注意:强烈建议在证书管理单元里申请KRA证书,如在WEB页申请请不要让系统自动选择容器,否则系统会将KRA证书安装在计算机的KRA容器里,KRA证书必须要安装在恢复代理的个人证书容器里,才可以解密导出的BLOB(见后说明)。但默认情况下,KRA是无权在CA里找回用户证书的BLOB的,这就起到了一个制约作用。这也是CA管理员和KRA要分离的原因。后面会继续说到。
二、KRA和DRA的区别
我们知道在使用EFS的时候,我们经常用到DRA(数据恢复代理),那么KRA和DRA有什么区别呢?DRA用来对加密的文件在必要时可以解密,但DRA不能访问特别的私有密钥,也不能恢复用户的证书,而KRA可以将用户的证书存档,所以可以在必要的时候取回用户的证书。如果你的公司和企业策略允许管理员或特殊的用户能访问和使用他人的用户证书,那么你可以使用KRA技术,反之,如果你的企业策略不允许用户访问其他人的用户证书,那就不应该实施KRA技术。而DRA技术适用于企业策略要求所有的被加密的文件都要是可解的,但不允许访问或使用他人的证书,这时就需要使用DRA技术。如果你的企业策略不允许他人解密用户的加密文件,则不应该使用以上两种技术。
三、KRA的最佳实践指南
1、如果密钥明知泄露或丢失,那它应被立即吊销且不得再使用。
2、密钥和证书在处理时应是高度安全的,不再极端的情况下,不应通过KRA恢复用户证书和密钥。
3、用于签名的私有密钥不应该被归档或恢复
4、当密钥泄露或丢失后,它应该在允许恢复之前被吊销。尽管密钥泄露了,它仍然有可能需要被恢复为了解密原来的加密文件,然而加密新的文件应该用新的密钥。
5、为了减少用户混淆和简化密钥管理,应尽量少的发行证书。
6、发行的加密用证书应比签名证书的时间要长一些。
7、同时对同一应用系统只发行一个有效的密钥对。
8、制订严格的恢复流程,并将KRA和证书管理员分离。
9、尽量让执行归档的CA最少。
10、如果通过WEB方式执行密钥存档,应确保其有SSL保护(本文是实验环境,因此没有使用SSL)。
四、KRA的系统需求
1、证书注册必须使用CMS(CMC)的证书管理协议,只有XP和2003客户端才可以,如果是98、2000、ME可以使用WEB方式完成
2、活动目录必须做了WIN2003扩展。
3、CA必须运行在WIN
2003企业版上。
五、从WINDOWS证书管理单元或OUTLOOK导出证书
我们可以从证书管理单元或OUTLOOK里导出需要的证书。
1、证书管理单元导出证书
打开MMC,增加证书管理单元,选择需要导出的证书,选导出,如图。
2、使用OUTLOOK导出证书
打开工具的选项里的安全页,选择导入/导出
选择导出你的证书到文件。输入文件名和密码。
六、手工归档密钥
先按上述方法从客户端导出密钥,然后在CA上执行。
C:\CertUtil.exe
–f
–importKMS
<name
of
file>
命令的帮助页
以下是执行结果
七、自动归档密钥
自动归档的过程
1)客户端从AD里查询CA
2)客户端建立一个鉴别的DCOM连接到CA,以获得CA的交换证书(加密证书)
3)CA发送交换证书给客户
4)客户端对获得的交换证书进行验证,验证其是有效的CA签名证书签名的,且检查证书的吊销状态,这是为了确保只有特定的有效CA才能解密包括密钥的证书申请。
5)客户端用CA的交换证书的公钥加密自己符合申请的私有密钥,建立CMC请求并发送给CA
6)CA利用自己的私钥验证证书请求里的加密的私钥和公钥对
7)CA用请求里的公钥验证签名
8)CA用随机的3DES对称密钥加密用户请求中的私钥,并用KRA的公钥加密该对称密钥
9)CA保存包含有加密密钥和被KRA加密的对称加密密钥的二进制大对象(BLOB)到CA的数据库里
10)CA开始正常的处理证书请求
11)CA用CMC完整的回应回答客户请求。
注意:
1、证书的申请有三种方式:证书管理单元、WEB页和自动申请代理。
2、CA的交换证书是个加密证书,默认情况下,WIN2003的CA会自动建立一个短期的交换证书以适用于密钥交换,默认周期为一个星期。你需要激活CA交换证书模板以延长该证书的使用期限。如果你的CA不能正确的建立CA交换证书,将不能实现密钥归档,你可以执行以下命令以修正,该命令执行必须在CA交换证书模板有效或CA交换证书生成失败时:
certutil
–setreg
ca\CRLFlags
+CRLF_USE_XCHG_CERT_TEMPLATE
3、在有根CA和从属CA存在的结构下,对于根CA应禁止密钥归档
4、如果你的CA里配置了多个KRA,则上述的对称密码将被这些KRA的公钥分别加密,以确保用户证书可以被任意的KRA来恢复。实际上这些KRA的使用是循环的,CA会使用一个指针来确定当前使用的KRA证书,假设你的CA有4个KRA证书,并设置了需要2个KRA来完成恢复操作,那么在CA启动时,它将产生一个随机的循环指针,由它指向的那个KRA证书开始使用,比如现在指向的是第2个,那么现在第2和3个KRA生效,使用一次后,指针将向下移动,就变成了3和4个KRA,依次类推。
八、密钥恢复过程
1)CA的证书管理员从CA的数据库里定位并找回用户的加密的私钥。这个加密的BLOB是被ACL保护的,以确保只有证书管理员能从数据库里COPY它。自从它被KRA的公钥加密后,证书管理员就不能导出用户私钥但可以从CA数据库里找回。这个加密的BLOB里包含着证书的发行者和KRA的证书序列号,证书管理员可以借助此序列号把找回的证书交给合适的KRA来解密。
2)KRA解密这个BLOB,并把它们存储成被密码保护的PKCS
#12格式交还给用户。
3)用户将这个被保护的KEY导入本地存储。
说明:CA的角色
1、CA管理员:用于维护、管理CA,可以续订CA证书
2、证书管理员:批准或拒绝证书的颁发和吊销,可以从CA数据库里读取用户加密的BLOB用于恢复
3、备份操作员:对CA的配置和数据库进行备份,包括CA的证书密钥对
4、审核员:定义和检查证书服务的审核事件
5、KRA:KRA是IT的管理人员,它负责有权对用户证书执行恢复操作,可以解密用户的加密的归档私钥,但是KRA是不能从CA数据库里读取用户的BLOB的,因此该角色应和CA证书管理员分离。
KRA证书的样子:
九、密钥恢复操作
说了一大堆的废话,终于开始操作了,呵呵。。
密钥恢复可以使用CERTUTIL命令或资源工具包里的KRECOVERY工具来完成。下面来看看具体操作。
CA管理员可以使用以下参数做为恢复证书的依据
•
User1@nwtraders.com
(denotes
UPN)
•
nwtraders\user1
(denotes
the
down-level
name)
•
Users\nuser1
(denotes
a
user
in
the
default
users
container
of
Active
Directory)
•
User1
(denotes
the
CN)
•
<serial
number
of
the
certificate>
•
<SHA1
hash
(thumbprint)
of
certificate>
1、查找需要恢复的候选者
使用命令行查找恢复侯选者:Certutil
-getkey
<cn
of
user>
outputblob
同时会输出一个文件,如图:
用CA管理器确定恢复侯选者:打开CA管理器,在颁发的证书里,选择查看菜单里的增加/删除列,选择存挡的密钥。
现在你看到有一个证书是存挡的
打开它,可以看到详细信息里的证书序列号,看看和上面有命令行找到的一样吗?
记录下这个序列号,恢复时要用到的哦。
注意:输出的BLOB是加密的,请不要试图修改它,命令输出页的收件人就是该用户证书的KRA证书的序列号。CA管理员导出这个BLOB后,应按其显示的KRA归属交给适合的KRA来处理该BLOB。
2、密钥恢复
命令行恢复:1)Certutil
-getkey
####################
outputblob
这里的#################是刚才的序列号。
2)执行恢复操作
Certutil
-recoverkey
outputblob
user.pfx
系统将根据刚才查询到的BLOB来用KRA证书解密并恢复出新的用户证书,
现在在刚才的目录里产生了新的PFX文件了,如图:
证书恢复完成。
批量恢复:可以执行命令certutil
-v
-getkey
user1@northwindtraders.com
>myBatchfile.bat
得到一个恢复的批处理文件。
注意:如果用户没有必要的KRA证书的私钥,将不能解密BLOB里的内容!!
-------------
OK,太累了,明天接着写用工具的恢复方法。
连载一完。,