运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

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

运维开发网 https://www.qedev.com 2021-04-07 12:16 出处:51CTO 作者:网络之路blo
说明    有时候,我们希望对证书的内容控制的非常细致,总是想让同一部门的人才能互访,而其余的部分则不可以,默认情况下,只要有合法的证书的设备,那么就能正常建立起***,如果想得到控制的话,在Cisco上提供一个叫做CABAC,证书访问控制来对证书的某些字段进行匹配,只有匹配的才能进行建立***,访问特定的资源。    介绍下环境,CA Server是2003服务器,之前用IOS建立过***的介绍

说明

    有时候,我们希望对证书的内容控制的非常细致,总是想让同一部门的人才能互访,而其余的部分则不可以,默认情况下,只要有合法的证书的设备,那么就能正常建立起***,如果想得到控制的话,在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的策略是不同的,所以需要改变。 红色部分是需要注意的。

***已经正常建立了。

CABAC 证书访问控制

当证书只要是合法的时候,那么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来获取的,需要在属性中打开这个功能。

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

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消