说明
之前已经介绍过PKI的组件和处理流程,以及怎么搭建CA服务器,包括Cisco的IOS 软件和微软的服务器,我们搭建CA服务器,就是为了提供扩展性和安全性,这段时间会介绍PKI在***中的应用,包括IPSec ***、EZ***、SSL ***的证书认证,关于DM***和GET***其实跟IPSec ***一样,只要掌握了IPSec ***的证书认证注意的地方,就不会有难点了,反而EZ***和SSL ***有几个需要注意的地方,需要特别的提下。
这个图很简单,这次利用IOS来搭建CA服务器,并且两个路由器向CA服务器申请根证书和个人证书,用证书来进行***的验证,而不是我们平时的预共享密钥。 建立的方式用的是新版的***,而不是传统的crypto map形式。
地址已经提前配置好了,根据图上的显示定义的,没有任何路由输入,因为都是直连。
前提
之前提到过,在PKI系统中一个很重要的组件就是时间,如果时间不对,那么整个PKI系统就会瘫痪了。这里用CA Server来部署NTP服务器。
CA Server
R-CA_server(config)#clock timezone GMT 8
R-CA_server#clock set 19:26:00 17 nov 2012
R-CA_server(config)#ntp master
路由器的配置
R-site_1(config)#clock timezone GMT 8
R-site_1(config)#ntp server 12.1.1.1
注意:NTP只同步时间,时区是不同步的,所以需要手动配置。
当显示为synchronized的时候,就表示已经同步了,就可以进行接下来的配置,否则的话,一定要等时间同步才可进行。
CA Server的搭建
1、开启http,因为SCEP是基于http的。
2、R-CA_server(config)#$generate rsa modulus 2048 label cciese exportable 创建一个RSA密钥对,并且为可导出,建议养成一个习惯
3、调用rsa密钥对,如果需要系统自动生成的话,那么2和3都可以省略
R-CA_server(config)#crypto pki trustpoint CA
R-CA_server(ca-trustpoint)#rsakeypair cciese
4、填写证书信息
R-CA_server(config)#crypto pki server CA
R-CA_server(cs-server)#issuer-name cn=CA.ccie.com, o=ccie, ou=cciese, l=hunan, c=cn
R-CA_server(cs-server)#no shutdown
%Some server settings cannot be changed after CA certificate generation.
% Please enter a passphrase to protect the private key
% or type Return to exit
Password:
Re-enter password:
% Exporting Certificate Server signing certificate and keys…
% Certificate Server enabled.
R-CA_server(cs-server)#
Nov 17 13:47:12.683: %PKI-6-CS_ENABLED: Certificate server now enabled.
注意的是:trustpoint和server 的name是一致的。
CA Server已经是成功创建的了。
***设备申请证书
关于申请证书的方式支持在线申请方式和离线申请,之前也介绍过在哪种情况下使用哪种方式来申请证书,这里两种方法都用的,一边用在线,一边用离线方式来申请。
在线申请方式:
1、创建RSA密钥对 (可选)
R-site_1(config)#crypto key generate rsa modulus 2048 label cciese exportable
R-site_1(config)#crypto pki trustpoint ***
2、创建信任点
R-site_1(config)#crypto pki trustpoint ***
R-site_1(ca-trustpoint)#subject-name cn=Site1.ccie.com, o=ccie, ou=cciers, c=cn
R-site_1(ca-trustpoint)#enrollment url http://12.1.1.1
R-site_1(ca-trustpoint)#rsakeypair cciese
信任点的名字随意定义,填写个人信息,包括SECP申请的地址,调用RSA密钥对
3、申请根证书
R-site_1(config)#crypto pki authenticate ***
之前说过,申请根证书的过程,其实也是验证CA服务器的过程,它会询问这个证书是否是合法的,会有一个完整性的验证,如果一个正常的操作流程,需要把这个MD5和SHA的值发送给CA服务器管理员,要求是否跟根证书的HASH值一致。
可以在server上通过show crypto pki server进行查看, 有一行 c cert fingerprint : 如果对应的话,那么就证明根证书是可信任的。
选择yes
提示CA根证书是可接受的。
4、申请个人证书
R-site_1(config)#crypto pki enroll ***
当向CA Server申请个人证书的时候,它会询问一次性密码,这个密码IOS和微软的SCEP都支持,但是这里没有产生,所以为空,直接回车即可。
% Include the router serial number in the subject name? [yes/no]: yes 是否加入这个设备的序列号信息
% The serial number in the certificate will be: XXXXXXXXXXX
% Include an IP address in the subject name? [no]: no 是否将IP地址加入证书的一部分,建议不要
Request certificate from CA? [yes/no]: yes 是否现在申请证书
当填写完毕后,它会申请证书,这时候有MD5和SHA的值,就需要把它复制下来把自己填写的个人信息一并发送给CA管理员,要求他核实和颁发证书。
当然,这里都是个人在操作,所以就不必要那么讲究
5、CA 服务器颁发证书
R-CA_server#crypto pki server CA info requests :查看当前有哪些申请证书的请求
确认无误后,颁发证书
R-CA_server#crypto pki server CA grant 1 :颁发1号申请的证书,可以通过查看来决定,也可以加all参数,就是所有请求者的
Nov 17 14:13:52.671: %PKI-6-CERTRET: Certificate received from Certificate Authority 1A93B234 44E6677E 10BBDE74 E2C74B4D 693590D7 6B07ADC2 B3D11B7A 17EDE337
当***设备收到这条信息以后,就表示证书已经成功获取了
show crypto pki certificates :进行查看证书的情况
第一张证书是关于根证书的,可以看出颁发者和个人信息都是一样的,第二张则是个人证书。
离线申请方式
1、创建RSA密钥对
R-site_2(config)#crypto key generate rsa modulus 2048 exportable label cciese
2、创建信任点
R-site_2(config)#crypto pki trustpoint ***
R-site_2(ca-trustpoint)#enrollment terminal
R-site_2(ca-trustpoint)#subject-name cn=site2.ccie.com, o=ccie, ou=cciese, c=cn
R-site_2(ca-trustpoint)#rsakeypair cciese
由于离线申请的话,所以申请方式改为终端
3、离线导入根证书
首先,需要在CA server上导出根证书
R-CA_server(config)#crypto pki export CA pem terminal
复制粘贴从——begin CERTIFICATE——到———–END CERTIFICATE——–
导入根证书
提示根证书可接受。
4、离线申请个人证书
R-site_2(config)#crypto pki enroll ***
复制这一对乱码的文本,这就是PKCS#10,用于请求一个实体证书,不把IP地址作为证书的一部分,因为IP地址通常是变化比较频繁的,而证书有效期至少一年以上。
在CA 服务器上导入申请的请求
R-CA_server#crypto pki server CA request pkcs10 terminal
请求成功,序列号为2
通过 crypto pki server CA info requesets 来查看请求的信息
CA颁发证书
R-CA_server#crypto pki server CA grant 2
复制这个PKCS#10的输出信息
在***设备上
R-site_2(config)#crypto pki import *** certificate
粘贴复制的PKCS#10信息,然后回车
% Router Certificate successfully imported 表示证书已经成功导入
如果未成功的话,检查时间或者根证书没有导入
show crypto pki certificates :查看证书的情况
都正常,根证书和个人证书
***的配置
左边设备
crypto isakmp policy 10
crypto ipsec transform-set trans esp-des esp-md5-hmac
!
crypto ipsec profile ipsecprofile
set transform-set trans
!
interface Tunnel0
ip unnumbered FastEthernet0/0
tunnel source FastEthernet0/0
tunnel destination 12.1.1.3
tunnel mode ipsec ipv4
tunnel protection ipsec profile ipsecprofile
右边设备
crypto isakmp policy 10
crypto ipsec transform-set trans esp-des esp-md5-hmac
!
crypto ipsec profile ipsecprofile
set transform-set trans
!
interface Tunnel0
ip unnumbered FastEthernet0/0
tunnel source FastEthernet0/0
tunnel destination 12.1.1.2
tunnel mode ipsec ipv4
tunnel protection ipsec profile ipsecprofile
这时候发现,在SITE2端一直提示ca requeset failed,认证失败,这是为什么呢?
分析:在之前提到过一个CRL吊销列表的内容,这个列表中包含了哪些证书是有效的,哪些是无效的,而SITE2是通过离线方式获取的证书,它是无法获取到CRL的,而默认情况下,对于CRL是进行检查的,所以导致认证失败。
发现R-site_1通过SCEP获取了CRL,而R-site_2是没有任何的信息显示。
解决办法:把离线端改为对CRL不检查,因为这种办法也比较合理,一般通过离线申请就是无法与CA服务器正常访问才需要离线,由于无法正常访问,那么自然就无法更新CRL了。
site-2上
R-site_2(config)#crypto pki trustpoint ***
R-site_2(ca-trustpoint)#revocation-check none
这时候,***已经建立成功了。
运行动态路由协议
R-site_1(config)#int tun 0
R-site_1(config-if)#ip ospf 1 area 0
R-site_1(config-if)#int lo 0
R-site_1(config-if)#ip ospf 1 area 0
R-site_2(config)#int tun 0
R-site_2(config-if)#ip ospf 1 area 0
R-site_2(config-if)#int lo 0
R-site_2(config-if)#ip ospf 1 area 0
邻居已经成功建立
ping对方的环回口地址,是正常通信的。
加解密正常,多余的包是OSPF的hello造成的。
CRL的作用
我们都知道CRL包含了合法证书的列表,如果这时候,我把R-site_2的证书给作废,那么R-site_1还能建立***么。
答案是可以的,因为CRL它是轮循更新的,Cisco的设备默认存在本地4个小时,4个小时之内,它只会查看本地缓存的信息,如果在这4个小时之内,服务器吊销了某些证书的话,那么这些被吊销的证书还是可以正常使用,直到***设备更新新的CRL。
可以通过:crypto pki crl request 来强制更新CRL。 不过针对离线的话,建议为none,不检查,因为它根本无法获取CRL,除非手动下载。
总结:其实对于PKI的架构并没有想象中的那么难,只要熟悉的套路,相对来说还是比较简单的,对于PKI难点在于排错和备份、还原,对于设计也就前期难点,后期的维护就简单的多了,增加一个设备只需要申请一个证书即可,而不像预共享密钥一样,需要每个设备上添加一个。 关于***的应用还有EZ***和SSL ***总结。
本文首发于公众号:网络之路博客