PKI系列:(4) 证书访问控制—CABAC

说明

    有时候,我们希望对证书的内容控制的非常细致,总是想让同一部门的人才能互访,而其余的部分则不可以,默认情况下,只要有合法的证书的设备,那么就能正常建立起***,如果想得到控制的话,在Cisco上提供一个叫做CABAC,证书访问控制来对证书的某些字段进行匹配,只有匹配的才能进行建立***,访问特定的资源。

    介绍下环境,CA Server是2003服务器,之前用IOS建立过***的介绍,这次换2003,设备左边的是路由器,而右边用的是ASA 8.0版本,它们之间建立基于证书的***。 NTP服务器用路由器来搭建,Windows 2003上没找到好的NTP 服务器,ASA是做不了NTP服务器的。IP 地址信息按图上所规划的,路由器身后有个网段1.1.1.0/24,ASA身后有个网段 2.2.2.0/24。

NTP服务器设置

这里NTP的时间一定要与2003的时间对应,否则整个PKI则无效,可以比2003的时间快点,因为这样可以落在证书有效范围内,但是,不要比它慢。
Router
Cisco-site_1(config)#clock timezone GMT 8
Cisco-site_1#clock set 11:11:00 18 nec 2012

ASA
Cisco-Site-2(config)# clock timezone GMT 8
Cisco-Site-2(config)# ntp server 12.1.1.2

show ntp status的时候,显示为synchronized,就证明时间已经同步了。

服务器搭建
参考之前CA Server部署那篇文章,有对于2003和SCEP插件的安装介绍。

路由器申请证书

1、创建RSA密钥对
Cisco-site_1(config)#crypto key generate rsa modulus 2048 label cciese exportable

2、创建信任点
Cisco-site_1(config)#crypto pki trustpoint IOS
Cisco-site_1(ca-trustpoint)#enrollment url http://12.1.1.1/certsrv/mscep/mscep.dll
Cisco-site_1(ca-trustpoint)#subject-name cn=Site1.ccie.com, o=ccie, ou=cciers, c=cn
Cisco-site_1(ca-trustpoint)#rsakeypair ccies

注意,微软的格式是这样获取的。

3、申请根证书
Cisco-site_1(config)#crypto pki authenticate IOS

PKI系列:(4) 证书访问控制—CABAC

这个MD5值可以询问CA 管理员是否一致

PKI系列:(4) 证书访问控制—CABAC

可以通过这个进行查看 。

4、申请个人证书
首先进入http://12.1.1.1/certsrv/mscep/mscep.dll 来复制一次性密码,也就是challenge password is 那段
Cisco-site_1(config)#crypto pki enroll IOS

PKI系列:(4) 证书访问控制—CABAC

这里password和re-enter password 是输入那个复制的一次性密码。

5、CA Server颁发证书
可以在管理工具里面———证书颁发机构

PKI系列:(4) 证书访问控制—CABAC

有个等待颁发的证书,如果是正常手续的话,可以双击这个证书查看个人信息,如果确定无误,右击进行颁发。
Dec 18 03:47:20.811: %PKI-6-CERTRET: Certificate received from Certificate Authority 当收到这个信息后,就表示证书申请成功了。

注意的地方

我们看下 show crypto pki certificates
申请过程中的状态

PKI系列:(4) 证书访问控制—CABAC

申请后的状态

PKI系列:(4) 证书访问控制—CABAC

它在申请过程中,其实通过RA来进行申请的,这时候Windows 2003其实是作为RA的存在,因为SCEP默认它不集成的。那为什么在路由器上它能自动识别呢。可以看下show run的配置

PKI系列:(4) 证书访问控制—CABAC

当配置了url为微软格式后,它会自动添加一条命令 mode ra,所以,它可以*的转换, 如果是在H3C和HW上配置的话,这个必须手动配置,否则的话,证书会申请失败。

ASA上的证书申请

1、创建RSA密钥对,在ASA上这是必须的,系统不会自动创建
Cisco-Site-2(config)# crypto key generate rsa label cciese modulus 2048

2、创建信任点
Cisco-Site-2(config)# crypto ca trustpoint ASA
Cisco-Site-2(config-ca-trustpoint)# subject-name cn=site2.ccie.com, o=ccie, ou=cciese, c=cn
Cisco-Site-2(config-ca-trustpoint)# enrollment url http://12.1.1.1/certsrv/mscep/mscep.dll
Cisco-Site-2(config-ca-trustpoint)# keypair cciese

这里ASA还是引用的12.3IOS的配置方法,而IOS 12.4以后就使用PKI的方式了

3、申请根证书
Cisco-Site-2(config)# crypto ca authenticate ASA

PKI系列:(4) 证书访问控制—CABAC

4、申请个人证书
首先,在CA Server上刷新一次性密码,按F5即可,因为上次的密码被使用了。然后复制

Cisco-Site-2(config)# crypto ca enroll ASA

PKI系列:(4) 证书访问控制—CABAC

5、CA Server颁发证书

PKI系列:(4) 证书访问控制—CABAC

# The certificate has been granted by CA! ASA上收到这个提示了就证明,收到个人证书

PKI系列:(4) 证书访问控制—CABAC

一个非常重要的问题来了,注意下,它发布CRL的方式,http://domain/certenroll/Root-ccie.crl,这个domain对于路由器和ASA来说它并不知道是多少,这会导致什么情况发生?

PKI系列:(4) 证书访问控制—CABAC

查看crls发现为空,这是很正常的,因为ASA和路由器发送请求这个CRL时候,CA 服务器以http://domain来做为地址,而domain这个地址,对于ASA和路由器来说并不知道,所以导致CRL解析失败。

解决办法:

1、ASA和路由器上静态定义一个ip host domain 12.1.1.1 ,这样ASA和路由器就能正常解析了,但这个只适合实验环境。


2、对于工程环境来说,可以通过NAT来把CA服务器映射出来,无论是否是动态IP地址,动态IP地址可以通过一个技术解决,DDNS,只需要ASA和IOS上开启域名解析和定义一个公网的DNS服务器。建议是8.8.8.8 或者是DDNS产商的服务器。

3、关闭CL的检查,这样能互相建立***,但是,不建议这么做。

4、在CA Server上添加一个CRL的静态地址目录,右击Root-CCIE属性——-扩展——-添加,这种方法只能是静态的公网地址才可,否则建议使用第二种解决方案。


PKI系列:(4) 证书访问控制—CABAC

关于使用哪种方案,取决于实际环境而定,建议使用 2、3、4, 第一种比较不太现实,但是,我这由于是实验环境,所以,可以通过这种办法解决。

PKI系列:(4) 证书访问控制—CABAC
PKI系列:(4) 证书访问控制—CABAC

都可以正常获取CRL,当设置了静态映射后,通过crypto pki crls request来重新获取CRL,ASA上注意参数是CA

***的配置

IOS上的
crypto isakmp policy 10
!
!
crypto ipsec transform-set trans esp-des esp-md5-hmac
!
crypto map l2l 10 ipsec-isakmp
set peer 12.1.1.3
set transform-set trans
match address ***

ip access-list extended ***
permit ip host 1.1.1.1 host 2.2.2.2
!
ip route 2.2.2.0 255.255.255.0 12.1.1.3

interface Loopback0
ip address 1.1.1.1 255.255.255.255
!

interface FastEthernet0/0
ip address 12.1.1.2 255.255.255.0
crypto map l2l

ASA的配置
crypto isakmp enable outside
crypto isakmp policy 10
authentication rsa-sig
encryption des
hash sha
group 1
lifetime 86400

tunnel-group 12.1.1.2 type ipsec-l2l
tunnel-group 12.1.1.2 ipsec-attributes
trust-point ASA

crypto ipsec transform-set trans esp-des esp-md5-hmac

crypto map l2l 10 match address 100
crypto map l2l 10 set peer 12.1.1.2
crypto map l2l 10 set transform-set trans
crypto map l2l 10 set trustpoint ASA
crypto map l2l interface outside

access-list 100 extended permit ip host 2.2.2.2 host 1.1.1.1

这里注意下,ASA上面默认是预共享密钥的,所以需要改为数字签名,然后、ASA与IOS的策略是不同的,所以需要改变。 红色部分是需要注意的。

***已经正常建立了。

CABA证书访问控制

当证书只要是合法的时候,那么IOS和ASA之间建立***是没有任何限制的,但是,在填写证书的个人信息的时候,IOS填写的OU为cciers,为ASA填写的cciese,这样填写就是为了模拟两个不同的部门,看下证书列表的使用。

Cisco-site_1(config)#crypto pki certificate map l2l 10

issuer-name是匹配根证书,而subject-name是匹配个人证书的信息。
Cisco-site_1(ca-certificate-map)#subject-name co ou=cciers
eq=必须等于 ne=不等于 co=包含 nc=不包含 ,通常情况下使用co就行了,包含这个字段就行了。

调用这个证书访问控制
Cisco-site_1(config)#crypto isakmp profile profile
Cisco-site_1(conf-isa-prof)#match certificate l2l
Cisco-site_1(conf-isa-prof)#ca trust-point IOS

调用这个证书访问控制,然后用IOS申请的根证书进行 验证,isakmp profile的功能就不介绍了,可以调用许多策略在里面。
Cisco-site_1(config)#crypto map l2l 10 ipsec-isakmp
Cisco-site_1(config-crypto-map)#set isakmp-profile profile
调用这个profile到map里面。

这时候,只允许从同一个CA申请的证书并且要满足OU=cciers的情况下,才允许进行***的建立,而ASA则是cciese的,如果成功的话,那么就***建立不起来。 注意的是,证书访问控制控制的是当别人与自己建立***的时候,才会检查是否满足列表匹配的,自己与别人建立是不会进行检查的。

PKI系列:(4) 证书访问控制—CABAC

ASA主动发起会话的时候,是不信的

PKI系列:(4) 证书访问控制—CABAC

debug信息提示Dec 18 05:42:56.539: map_db_check_isakmp_profile profile did not match,策略不匹配profile的内容

而从路由器端发起则没什么问题

PKI系列:(4) 证书访问控制—CABAC

ASA上的证书访问控制

ASA的证书访问控制有点特殊,之前IOS上做了证书访问控制,ASA端发起的流量被拒绝了,因为OU不匹配访问控制设置的,这次,需要在ASA上定义一个OU=cciese的策略,IOS主动发起流量,如果建立不成功,则证明访问控制是有效的。
Cisco-Site-2(config)# tunnel-group-map enable rules
Cisco-Site-2(config)# no tunnel-group-map enable ou
Cisco-Site-2(config)# no tunnel-group-map enable ike-id
Cisco-Site-2(config)# no tunnel-group-map enable peer-ip

crypto ca certificate map ASA 10
subject-name attr ou co cciese

tunnel-group-map ASA 10 12.1.1.2

在ASA上做L2L的证书访问规则比较特殊,它必须关闭其余的匹配信息,自己定义规则, 默认情况下,ASA是通过对方发送过来的地址信息或者OU位来匹配特定的Tunnel-group,但是在L2L的证书控制之中,必须关闭才能有效,所以,在ASA进行证书访问控制需要特别的小心才行,暂时还没找到什么解决的办法。关闭这些,不会影响预共享密钥的***建立

PKI系列:(4) 证书访问控制—CABAC

通信不了了,

PKI系列:(4) 证书访问控制—CABAC

在ASA上的debug信息,级别我只给了7,只显示了部分信息,它上面提示

Dec 18 14:05:44 [IKEv1]: IP = 12.1.1.2, Trying to find group via cert rules… 说12.1.1.2正在视图匹配cert 的rules规则,后面就被拒绝了。

怎么确定它是被证书规则搞定的呢,可以在规则中在添加匹配ou=cciers即可
crypto ca certificate map ASA 20
subject-name attr ou co cciers

tunnel-group-map ASA 20 12.1.1.2

注意:不要把规则都定义在一个序列号中,一个序列号匹配一个规则,所以这里定义了20

PKI系列:(4) 证书访问控制—CABAC

这时候,***就建立起来了。
总结下:1、证书访问规则只对对方发起的连接有效,而自己方发起的连接则不检查
2、如果要定义多个规则,就必须用序列号区分,一个序列号对应一个匹配规则(比如定义多个OU,如果是不同字段可以在一个ID中定义)
3、如果使用的是2008服务器的话,默认情况下CRL是不允许使用HTTP来获取的,需要在属性中打开这个功能。

本文首发于公众号:网络之路博客

上一篇:超简单获取快应用摘要值


下一篇:Buuctf-crypto-[GKCTF2020]小学生的密码学