32 (OC)* keyChain的本质
1:它是一个sqlite数据库,其保存的所有数据都是加密过的。
2:Keychain是加密规则(key)的集合。每个规则必须含有以下三个要素:认证算法、认证密钥(加密字符串)、规则的时间。
3:keychain item。15000个item和1个item50个键值对。
4:keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用。
目 录
18 Keychain配置
Keychain是一个集中控制认证算法和认证密钥的应用程序,广泛应用于应用协议的认证中。
- 18.1 Keychain简介
介绍Keychain的定义和作用。 - 18.2 原理描述
介绍Keychain的实现原理。 - 18.3 应用场景
介绍Keychain的应用场景。 - 18.4 配置注意事项
介绍配置Keychain的注意事项。 - 18.5 配置Keychain
配置Keychain,可以实现在不中断连接的情况下,定时更换认证加密的密钥和算法,从而保证应用程序数据传输的安全性。 - 18.6 配置举例
介绍Keychain配置举例。配置示例中包括组网需求、配置思路等。 - 18.7 参考信息
介绍Keychain的参考标准和协议。
18.1 Keychain简介
介绍Keychain的定义和作用。
定义
Keychain是加密规则(key)的集合。它可以为应用程序提供认证功能,在认证过程中,Keychain可以动态地更改认证算法和密钥。Keychain在不中断业务的前提下,通过定期更改认证加密的密钥和算法,提升网络数据传输的安全性。
目的
在网络中,两个应用程序进行通信时,会有一些非法用户试图篡改数据报文或者伪装成认证用户,这样会导致安全问题。为了能识别这些被篡改的报文和伪装的用户,应用程序通过定义认证规则进行信息的认证。一个应用程序可以使用自己独有的认证规则。
然而,长期使用同一个认证规则,容易被非法用户破解。如果由管理员人工修改通信双方的认证规则,将是非常繁琐和复杂的任务,同时,人工修改也容易引入各种问题。此外,如果每个应用程序独立拥有自己的认证规则,当许多应用实例需要配置相同的认证算法时,将会导致数据和配置过程重复。
为了解决上述问题,需要一种能够管理所有认证信息的程序,因而引入了Keychain。Keychain可以集中控制所有的认证过程,并且能够在认证过程中动态更改认证算法和密钥,而不需要人工过多参与。这极大的提高了通信的安全性。
18.2 原理描述
介绍Keychain的实现原理。
18.2.1 基本概念
Keychain是加密规则(key)的集合。每个规则必须含有以下三个要素:认证算法、认证密钥(加密字符串)、规则的发送/接收时间。其中认证算法和认证密钥用来控制加密/解密报文,发送/接收时间表示在这段时间内,能够使用配置的算法和密钥对报文认证后发送/接收。
key
key包含认证信息和活跃时间。认证信息包括认证算法和认证密钥。Keychain支持MD5、SHA-1、SHA-256、HMAC-MD5、HMAC-SHA1-12、HMAC-SHA1-20等认证算法。应用程序应用Keychain时,也必须支持Keychain里配置的认证算法。认证密钥是一串字符,由用户配置得到。
活跃时间包括发送时间和接收时间。设备上通过设置key的接收和发送活跃时间实现动态变更认证信息。根据key配置的接收时间和发送时间,key可以分为活跃的发送key和活跃的接收key:
活跃的发送key:当系统时间处于key配置的发送时间范围内时,该key处于发送活跃状态。应用程序发送报文时,使用此key配置的认证算法和密钥生成发送端的MAC(Message Authentication Code)。
活跃的接收key:当系统时间处于key配置的接收时间范围内时,该key处于接收活跃状态。应用程序接收报文时,使用此key配置的认证算法和密钥生成接收端的MAC。
Message Authentication Code
Message Authentication Code(信息认证码,简称MAC)是一串字符。在Keychain的应用中,由设备使用认证算法,对数据报文和认证密钥进行计算得到。
Keychain的时间模式
Keychain的时间模式是指Keychain中的key按时间工作的方式,包括绝对时间模式和周期时间模式。
绝对时间模式指时间是UTC格式,它表示Keychain只能在一个绝对的时间段内工作。
- 日周期模式,表示Keychain中的key在每天固定时间段内生效。
- 周周期模式,表示Keychain中的key在每周指定的周几生效。
- 月周期模式,表示Keychain中的key在每月指定的日期生效。
- 年周期模式,表示Keychain中的key在每年指定的月份生效。
一个Keychain只能指定一种时间模式。在Keychain创建时就需要指定时间模式,key的发送和接收时间根据Keychain的时间模式进行配置。
缺省发送key
如果在某个时间段管理员没有配置key,此时将没有活跃的发送key。在该时间段,应用程序将没有认证的交互。为了避免这种情况,可以配置缺省发送key。在没有其他活跃的发送key时,应用程序将使用缺省发送key作为活跃的发送key。
接收容忍时间
当设备上的发送key发生改变时,对应接收端的接收key也必须发生改变。由于时间不同步,在两台设备上的key发生改变时,可能会有时间差。在这段时间内,由于key的不一致将导致报文丢失。为了避免该情况出现,需要在接收key发生切换时有一个平滑的过渡。这个平滑的过渡时间段称为接收容忍时间。
接收容忍时间只能对接收key有用,可以在每一个Keychain中配置接收容忍时间。配置接收容忍时间后,如图18-1所示,接收key的启动和结束时间都将做相应的延长。
TCP kind-value和TCP algorithm-id
TCP应用程序之间通过TCP认证建立连接。对于TCP的认证交互,TCP使用增强的TCP认证选项。
不同的厂商使用不同的kind-value值代表增强的TCP认证选项。为了实现不同厂商设备之间的交互,kind-value是可配置的,能根据对端设备的TCP类型进行调整。
在TCP的增强认证选项中存在一个algorithm-id字段,该字段用来表示认证算法的类型。由于algorithm-id不是因特网地址分配组织IANA(Internet Assigned Numbers Authority)统一定义的,不同的厂商之间使用不同的algorithm-id值来代表认证算法。为了实现不同厂商之间的互通,algorithm-id的值与认证算法的对应关系也是可以配置的。
18.2.2 非TCP应用程序应用Keychain的原理
Keychain为应用层协议提供了认证服务。当创建之后,Keychain需要被应用程序使用才能生效。按照不同应用程序应用Keychain进行认证的不同处理流程,可分为非TCP应用程序使用Keychain认证和TCP应用程序使用Keychain认证。
非TCP应用程序使用Keychain认证发送报文
应用程序询问Keychain的活跃发送key ID和Keychain提供的算法类型。
如果存在活跃的发送key,Keychain模块提供活跃的发送key ID和算法类型;如果没有,应用程序正常发送报文。
应用程序收到活跃发送key ID和算法类型后,将Keychain算法类型转换为相应协议的标准算法ID,并将此算法ID和key ID封装进报文。
应用程序提供需要用来计算MAC(Message Authentication Code)的数据。
Keychain模块使用活跃的发送key定义的认证算法和密钥,计算出MAC,并返回MAC。
应用程序产生携带认证信息的报文,并发送出去。
非TCP应用程序使用Keychain认证接收报文
接收端接收到携带认证信息的报文。
接收端应用程序将接收的算法ID转换为Keychain算法类型。
接收端应用程序提供数据报文、key ID、算法类型、需要验证的MAC值。
Keychain模块根据接收到报文的key的ID,检查本端对应ID的接收key是否活跃。如果不活跃,则返回认证失败消息。
如果对应的接收key活跃,Keychain模块使用此key配置的认证算法和密钥,重新计算MAC,并且比较新生成的MAC和接收到的MAC是否一致。
返回成功消息或者失败消息。
应用程序根据Keychain的认证结果决定接收或丢弃报文。
18.2.3 TCP应用程序应用Keychain的原理
TCP应用程序使用Keychain认证发送报文
在donica草案中,TCP使用增强的认证选项进行认证交互,增强认证选项的报文格式如图18-4所示:
目前该草案还没有标准化,IANA没有统一定义类型(Kind)值和认证算法对应的ID(Alg-id)。各设备商使用不同的取值。为了使不同厂商的设备能够互通,Keychain使TCP类型值和认证算法的ID可以配置和维护。
应用程序询问活跃的发送key ID、TCP Kind、TCP algorithm-id。
如果存在活跃的发送key,则Keychain模块提供应用程序请求的信息。
应用程序用TCP Kind、TCP algorithm-id、key ID填充TCP增强认证选项。
应用程序给Keychain模块提供需要用来计算MAC(Message Authentication Code)的数据。
Keychain模块根据活跃发送key所配置算法和密钥,计算MAC,并返回MAC值。
应用程序将获取的MAC填充到增强认证选项,将报文发送出去。
TCP应用程序使用Keychain认证接收报文
接收端收到携带认证信息的TCP报文。
接收端向Keychain模块提供数据报文、key ID、TCP algorithm-id、TCP Kind以及需要验证的MAC。
Keychain模块检查,接收报文中的TCP类型和算法ID和本端的是否一致。如果不一致,则返回认证失败消息。
Keychain模块根据接收到的key ID,检查本端对应ID的接收key是否活跃。如果不活跃,则返回认证失败消息。
如果对应的接收key活跃,Keychain模块根据该接收key配置的认证算法和密钥,重新计算MAC,并且比较新生成的MAC和接收到的MAC是否一致。
返回成功消息或者失败消息。
应用程序根据Keychain的认证结果确认接收或丢弃报文。
18.3 应用场景
介绍Keychain的应用场景。
Keychain为多种应用协议提供了认证保护,设备支持Keychain认证的应用协议包括:RIP、IS-IS、OSPF、BGP、MSDP等。配置应用程序使用Keychain认证的流程都一样,首先需要创建Keychain,然后应用程序才能使用Keychain进行认证。
IS-IS使用Keychain进行认证
IS-IS作为一种广泛应用的路由协议,提高IS-IS协议的安全性是保证IS-IS正确路由的基础。IS-IS可以通过配置固定认证算法或密钥的方式对其进行认证,但是固定认证算法和密钥很容易被破解。为了增强IS-IS协议的安全性,可以使用Keychain对IS-IS协议报文进行认证。
如图18-7所示,RouterA、RouterB、RouterC、RouterD、RouterE之间通过IS-IS协议实现网络互连。RouterA、RouterB、RouterC属于区域10,RouterD、RouterE属于区域20。RouterA和RouterB是Level-1设备,RouterD和RouterE是Level-2设备,RouterC是Level-1-2设备。配置Keychain对IS-IS协议报文进行认证,需要在每台设备上建立Keychain,然后在IS-IS进程下配置路由域认证和区域认证,同时在接口下配置接口认证。
18.4 配置注意事项
介绍配置Keychain的注意事项。
Keychain只是对认证算法和加密密钥的管理,需要具体的应用程序使用Keychain,Keychain才能起作用。
- RIP
- OSPF
- OSPFv3
- IS-IS
- MSDP
- MPLS
- BGP and BGP4+
18.5 配置Keychain
配置Keychain,可以实现在不中断连接的情况下,定时更换认证加密的密钥和算法,从而保证应用程序数据传输的安全性。
前置任务
在配置Keychain之前,需完成以下任务:
设备上电,自检正常
18.5.1 创建Keychain
背景信息
配置对应用程序进行认证和加密保护时,需要首先创建一个Keychain。另外,如果删除正在使用的Keychain,可能会造成通信的中断,请谨慎操作。
TCP(Transmission Control Protocol)应用程序之间通过TCP认证建立连接。对于TCP的认证交互,TCP使用增强的TCP认证选项。目前,不同的厂商使用不同的kind-value值代表增强的TCP认证选项,使用不同的ID值代表不同的认证算法。当TCP应用程序使用Keychain时,用户必须根据对端的配置,进行相应的配置,以实现不同厂商之间的互通。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令keychain keychain-name mode { absolute | periodic { daily | weekly | monthly | yearly } },创建Keychain,并进入Keychain视图。
- (可选)配置TCP认证参数
- 执行命令tcp-kind kind-value,配置Keychain认证的TCP类型值。
- 执行命令tcp-algorithm-id { hmac-md5 | hmac-sha-256 | hmac-sha1-12 | hmac-sha1-20 | md5 | sha-1 | sha-256 } algorithm-id,配置TCP认证加密算法与算法ID的对应关系。
说明:
HMAC-MD5和MD5认证算法存在安全风险,推荐配置HMAC-SHA-256或SHA-256认证算法。
- (可选)执行命令receive-tolerance { value | infinite },配置Keychain的接收容忍时间。
说明:
建议用户配置接收容忍时间,这样可以使接收key的启动和结束时间都做相应的延长,以确保不会因为网络上时间不同步而导致报文丢失。
18.5.2 配置key
背景信息
配置Keychain时,key代表Keychain认证规则,每一个key包括:认证算法、认证加密的密钥、活跃的发送时间、活跃的接收时间,以及该key是否为缺省的发送key。一个Keychain中最多可以有64个key。
同一个Keychain中key必须唯一。不同的Keychain中key ID可以相同。同一Keychain中不能有多个发送key同时生效,否则应用程序无法选择应用哪个发送key进行加密。但是同一Keychain中可以有多个接收key同时生效,接收端会根据接收到的key ID,选择ID相同的活跃的接收key进行解密。
如果发送端的key发生变更,接收端的key也需要变更。由于网络上时钟可能不同步,在接收端和发送端变更key时,有可能存在时间延迟。在延迟的时间范围内会造成数据丢失。为了实现两端key变更时不丢包,可以配置接收容忍时间。接收容忍时间只对接收端的key有效。接收容忍时间将导致接收的起始和终止的时间延长。
如果在某个时间段管理员没有配置key,此时将没有活跃的发送key。在该时间段,应用程序将没有认证的交互。为了避免这种情况,可以配置缺省发送key。任何存在的key都可以被指定为缺省发送key,在一个Keychain中只能有一个缺省发送key。在没有其他活跃的发送key时,应用程序将使用缺省发送key作为活跃的发送key。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令keychain keychain-name,进入Keychain视图。
- 执行命令key-id key-id,创建key-id,并进入key-id视图。
- 执行命令algorithm { hmac-md5 | hmac-sha-256 | hmac-sha1-12 | hmac-sha1-20 | md5 | sha-1 | sha-256 | simple },配置key采用的认证加密算法。
各个应用程序支持的算法有不同,具体情况如下:
RIP支持MD5和simple;BGP和BGP4+支持MD5;IS-IS支持MD5和simple;OSPF支持MD5、simple和HMAC-MD5;MSDP支持MD5;MPLS的LDP支持MD5,MPLS的TE支持HMAC-MD5。
说明:
HMAC-MD5和MD5认证算法存在安全风险,推荐配置HMAC-SHA-256或SHA-256认证算法。
simple是一种不安全的认证算法,推荐配置HMAC-SHA-256或SHA-256认证算法。
- 执行命令key-string { plain plain-text | [ cipher ] cipher-text },配置key的认证加密的密钥。
说明:
配置认证密码时,请尽量选择密文模式,因为明文格式密码会以明文的方式保存在配置文件中,有高安全风险。为保证设备安全,请定期修改密码。
- 配置发送时间。创建Keychain时,选择的时间模式不同,配置发送时间的命令也不同。具体请参考表18-1:
表18-1 配置发送时间
创建Keychain的模式
配置发送时间的命令
absolute
send-time utc start-time start-date { duration { duration-value | infinite } | to end-time end-date }
periodic daily
send-time daily start-time to end-time
periodic weekly
send-time day { start-day-name to end-day-name | day-name &<1-7> }
periodic monthly
send-time date { start-date-value to end-date-value | date-value &<1-31> }
periodic yearly
send-time month { start-month-name to end-month-name | month-name &<1-12> }
说明:
建议配置NTP(Network Time Protocol),使网络中各设备的时钟保持一致,以避免因为时钟不同步,而产生混乱。 - 配置接收时间。创建Keychain时,选择的时间模式不同,配置接收时间的命令也不同。具体请参考表18-2:
表18-2 配置接收时间
创建Keychain的模式
配置接收时间的命令
absolute
receive-time utc start-time start-date { duration { duration-value | infinite } | to end-time end-date }
periodic daily
receive-time daily start-time to end-time
periodic weekly
receive-time day { start-day-name to end-day-name | day-name &<1-7> }
periodic monthly
receive-time date { start-date-value to end-date-value | date-value &<1-31> }
periodic yearly
receive-time month { start-month-name to end-month-name | month-name &<1-12> }
- (可选)执行命令default send-key-id,配置该key为缺省发送key。
18.5.3 配置应用Keychain
背景信息
配置Keychain之后,需要配置应用程序使用Keychain,否则Keychain不会生效。
特性 | 配置链接 |
---|---|
RIP |
rip authentication-mode |
MSDP |
peer keychain(MSDP) |
OSPF |
authentication-mode(OSPF) ospf authentication-mode |
IS-IS |
area-authentication-mode isis authentication-mode |
BGP\BGP4+ |
peer keychain (BGP) |
MPLS LDP |
authentication key-chain |
MPLS RSVP |
mpls rsvp-te authentication |
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number,进入接口视图。
- 执行命令rip authentication-mode keychain keychain-name,配置RIP使用Keychain。
18.5.4 检查配置结果
操作步骤
- 执行命令display keychain keychain-name,查看Keychain的当前配置。
- 执行命令display keychain keychain-name key-id key-id,查看key-id的当前配置。
18.6 配置举例
介绍Keychain配置举例。配置示例中包括组网需求、配置思路等。
18.6.1 配置RIP应用Keychain认证示例
组网需求
如图18-8所示,网络中RouterA和RouterB通过RIP-2实现互通。
要求在数据传输过程中,RIP连接始终稳定,不会因为非法用户的攻击而断开连接。
配置思路
为了保证RIP连接稳定,需要保证RIP协议数据能够稳定正确的传输,建议采用认证和加密的方法,保证RIP协议数据传输的安全性。同时为了防止非法用户通过非法手段窃取认证和加密的算法和密钥,建议采用动态更改认证加密算法和密钥的方法实现RIP数据协议传输的安全。综上,采用Keychain协议来保证RIP连接的稳定。
采用如下思路配置Keychain对RIP协议进行保护:
配置RIP基本功能。
配置Keychain功能。
配置RIP应用Keychain。
操作步骤
- 配置RIP基本功能
# 配置RouterA。
<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] rip 1
[RouterA-rip-1] version 2
[RouterA-rip-1] network 192.168.1.0
[RouterA-rip-1] quit# 配置RouterB。
<Huawei> system-view
[Huawei] sysname RouterB
[RouterB] rip 1
[RouterB-rip-1] version 2
[RouterB-rip-1] network 192.168.1.0
[RouterB-rip-1] quit - 配置Keychain功能
# 配置RouterA。
[RouterA] keychain huawei mode absolute
[RouterA-keychain-huawei] receive-tolerance 100
[RouterA-keychain-huawei] key-id 1
[RouterA-keychain-huawei-keyid-1] algorithm sha-256
[RouterA-keychain-huawei-keyid-1] key-string cipher Huawei@1234
[RouterA-keychain-huawei-keyid-1] send-time utc 0:00 2012-3-12 to 23:59 2012-3-12
[RouterA-keychain-huawei-keyid-1] receive-time utc 0:00 2012-3-12 to 23:59 2012-3-12
[RouterA-keychain-huawei-keyid-1] default send-key-id
[RouterA-keychain-huawei-keyid-1] quit
[RouterA-keychain-huawei] quit# 配置RouterB。
[RouterB] keychain huawei mode absolute
[RouterB-keychain-huawei] receive-tolerance 100
[RouterB-keychain-huawei] key-id 1
[RouterB-keychain-huawei-keyid-1] algorithm sha-256
[RouterB-keychain-huawei-keyid-1] key-string cipher Huawei@1234
[RouterA-keychain-huawei-keyid-1] send-time utc 0:00 2012-3-12 to 23:59 2012-3-12
[RouterA-keychain-huawei-keyid-1] receive-time utc 0:00 2012-3-12 to 23:59 2012-3-12
[RouterB-keychain-huawei-keyid-1] default send-key-id
[RouterB-keychain-huawei-keyid-1] quit
[RouterB-keychain-huawei] quit - 配置RIP应用Keychain
# 配置RouterA。
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] ip address 192.168.1.1 24
[RouterA-GigabitEthernet1/0/0] rip authentication-mode keychain huawei
[RouterA-GigabitEthernet1/0/0] quit
[RouterA] quit# 配置RouterB。
[RouterB] interface gigabitethernet 1/0/0
[RouterB-GigabitEthernet1/0/0] ip address 192.168.1.2 24
[RouterB-GigabitEthernet1/0/0] rip authentication-mode keychain huawei
[RouterB-GigabitEthernet1/0/0] quit
[RouterB] quit - 验证配置结果
# 执行命令display keychain keychain-name命令,查看Keychain中Key-id的当前状态,如下所示:
<RouterA> display keychain huawei
Keychain Information:
----------------------
Keychain Name : huawei
Timer Mode : Absolute
Receive Tolerance(min) : 100
TCP Kind : 254
TCP Algorithm IDs :
HMAC-MD5 : 5
HMAC-SHA1-12 : 2
HMAC-SHA1-20 : 6
HMAC-SHA-256 : 7
SHA-256 : 8
MD5 : 3
SHA1 : 4
Number of Key IDs : 1
Active Send Key ID : 1
Active Receive Key IDs : 01
Default send Key ID : Not configured Key ID Information:
----------------------
Key ID : 1
Key string : ******
Algorithm : SHA-256
SEND TIMER :
Start time : 2012-03-12 00:00
End time : 2012-03-12 23:59
Status : Active
RECEIVE TIMER :
Start time : 2012-03-12 00:00
End time : 2012-03-12 23:59
Status : Active# RIP应用Keychain配置成功后,可以执行命令display rip process-id interface verbose,查看RIP报文的认证方式。以RouterA为例。
<RouterA> display rip 1 interface verbose
GigabitEthernet1/0/0(192.168.1.1)
State : UP MTU : 500
Metricin : 0
Metricout : 1
Input : Enabled Output : Enabled
Protocol : RIPv2 Multicast
Send version : RIPv2 Multicast Packets
Receive version : RIPv2 Multicast and Broadcast Packets
Poison-reverse : Disabled
Split-Horizon : Enabled
Authentication type : MD5 (Non-standard - Keychain: huawei)
Last Sequence Number Sent : 0x0
Replay Protection : Disabled
配置文件
RouterA的配置文件
#
sysname RouterA
#
keychain huawei mode absolute
receive-tolerance 100
key-id 1
algorithm sha-256
key-string cipher %#%#e7,_2i0MfN6W5@Fb6Q3WU.\e)ju5"Jr&&())JmZ2%#%# send-time utc 00:00 2012-03-12 to 23:59 2012-03-12
receive-time utc 00:00 2012-03-12 to 23:59 2012-03-12
default send-key-id
#
interface GigabitEthernet1/0/0
ip address 192.168.1.1 255.255.255.0
rip authentication-mode keychain huawei
#
rip 1
version 2
network 192.168.1.0
#
returnRouterB的配置文件
#
sysname RouterB
#
keychain huawei mode absolute
receive-tolerance 100
key-id 1
algorithm sha-256
key-string cipher %#%#e7,_2i0MfN6W5@Fb6Q3WU.\e)ju5"Jr&&())JmZ2%#%#
send-time utc 00:00 2012-03-12 to 23:59 2012-03-12
receive-time utc 00:00 2012-03-12 to 23:59 2012-03-12
default send-key-id
#
interface GigabitEthernet1/0/0
ip address 192.168.1.2 255.255.255.0
rip authentication-mode keychain huawei
#
rip 1
version 2
network 192.168.1.0
#
return
18.6.2 配置BGP应用Keychain认证示例
组网需求
如图18-9所示,网络中的RouterA和RouterB之间通过BGP互通。
要求在数据传输过程中,BGP连接始终稳定,不会因为非法用户的攻击而断开连接。
配置思路
采用如下思路配置BGP的Keychain认证:
配置Keychain的基本功能。
配置Router应用Keychain认证BGP。
操作步骤
- 配置Keychain认证
# 配置RouterA。
<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] keychain huawei mode periodic weekly
[RouterA-keychain-huawei] tcp-kind 182
[RouterA-keychain-huawei] tcp-algorithm-id sha-256 17
[RouterA-keychain-huawei] receive-tolerance 100
[RouterA-keychain-huawei] key-id 1
[RouterA-keychain-huawei-keyid-1] algorithm sha-256
[RouterA-keychain-huawei-keyid-1] key-string cipher Huawei@1234
[RouterA-keychain-huawei-keyid-1] send-time day fri sat
[RouterA-keychain-huawei-keyid-1] receive-time day fri sat
[RouterA-keychain-huawei-keyid-1] default send-key-id
[RouterA-keychain-huawei-keyid-1] quit
[RouterA-keychain-huawei] quit# 配置RouterB。
<Huawei> system-view
[Huawei] sysname RouterB
[RouterB] keychain huawei mode periodic weekly
[RouterB-keychain-huawei] tcp-kind 182
[RouterB-keychain-huawei] tcp-algorithm-id sha-256 17
[RouterB-keychain-huawei] receive-tolerance 100
[RouterB-keychain-huawei] key-id 1
[RouterB-keychain-huawei-keyid-1] algorithm sha-256
[RouterB-keychain-huawei-keyid-1] key-string cipher Huawei@1234
[RouterB-keychain-huawei-keyid-1] send-time day fri sat
[RouterB-keychain-huawei-keyid-1] receive-time day fri sat
[RouterB-keychain-huawei-keyid-1] default send-key-id
[RouterB-keychain-huawei-keyid-1] quit
[RouterB-keychain-huawei] quit - 配置BGP应用Keychain进行认证和加密
# 配置RouterA
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] ip address 192.168.1.1 24
[RouterA-GigabitEthernet1/0/0] quit
[RouterA] bgp 1
[RouterA-bgp] router-id 1.1.1.1
[RouterA-bgp] peer 192.168.1.2 as-number 1
[RouterA-bgp] peer 192.168.1.2 keychain huawei
[RouterA-bgp] quit
[RouterA] quit# 配置RouterB。
[RouterB] interface gigabitethernet 1/0/0
[RouterB-GigabitEthernet1/0/0] ip address 192.168.1.2 24
[RouterB-GigabitEthernet1/0/0] quit
[RouterB] bgp 1
[RouterB-bgp] router-id 2.2.2.2
[RouterB-bgp] peer 192.168.1.1 as-number 1
[RouterB-bgp] peer 192.168.1.1 keychain huawei
[RouterB-bgp] quit
[RouterB] quit - 验证配置结果
# 执行display keychain keychain-name命令,查看Keychain中key-id的当前状态,如下所示:
<RouterA> display keychain huawei
Keychain Information:
---------------------
Keychain Name : huawei
Timer Mode : Weekly periodic
Receive Tolerance(min) : 100
TCP Kind : 182
TCP Algorithm IDs :
HMAC-MD5 : 5
HMAC-SHA1-12 : 2
HMAC-SHA1-20 : 6
HMAC-SHA-256 : 7
SHA-256 : 17
MD5 : 8
SHA1 : 4
Number of Key IDs : 1
Active Send Key ID : 1
Active Receive Key IDs : 01
Default send Key ID : Not configured Key ID Information:
-------------------
Key ID : 1
Key string : ******
Algorithm : SHA-256
SEND TIMER :
Day(s) : Fri Sat
Status : Active
RECEIVE TIMER :
Day(s) : Fri Sat
Status : Active# BGP应用Keychain配置成功后,执行命令display bgp peer ipv4-address verbose,查看BGP对等体的认证信息。以RouterA为例。
<RouterA> display bgp peer 192.168.1.2 verbose
BGP Peer is 192.168.1.2, remote AS 1
Type: IBGP link
BGP version 4, Remote router ID 2.2.2.2
Update-group ID: 1
BGP current state: Established, Up for 00h43m34s
BGP current event: RecvKeepalive
BGP last state: OpenConfirm
BGP Peer Up count: 1
Received total routes: 0
Received active routes total: 0
Advertised total routes: 0
Port: Local - 179 Remote - 55828
Configured: Active Hold Time: 180 sec Keepalive Time:60 sec
Received : Active Hold Time: 180 sec
Negotiated: Active Hold Time: 180 sec Keepalive Time:60 sec
Peer optional capabilities:
Peer supports bgp multi-protocol extension
Peer supports bgp route refresh capability
Peer supports bgp 4-byte-as capability
Address family IPv4 Unicast: advertised and received
Received: Total 45 messages
Update messages 0
Open messages 1
KeepAlive messages 44
Notification messages 0
Refresh messages 0
Sent: Total 48 messages
Update messages 0
Open messages 2
KeepAlive messages 46
Notification messages 0
Refresh messages 0
Authentication type configured: Keychain(huawei)
Last keepalive received: 2012/04/20 11:37:27
Last keepalive sent : 2012/04/20 11:37:27
Minimum route advertisement interval is 15 seconds
Optional capabilities:
Route refresh capability has been enabled
4-byte-as capability has been enabled
Peer Preferred Value: 0
Routing policy configured:
No routing policy is configured
配置文件
RouterA的配置文件
#
sysname RouterA
#
keychain huawei mode periodic weekly
receive-tolerance 100
tcp-kind 182
tcp-algorithm-id sha-256 17
key-id 1
algorithm sha-256
key-string cipher %#%#+q;c~,2pMWe)cb:9Yg[6ah3l+~r"GVAO*W.1f=v4%#%#
send-time day fri sat
receive-time day fri sat
default send-key-id
#
interface GigabitEthernet1/0/0
ip address 192.168.1.1 255.255.255.0
#
bgp 1
router-id 1.1.1.1
peer 192.168.1.2 as-number 1
peer 192.168.1.2 keychain huawei
#
ipv4-family unicast
undo synchronization
peer 192.168.1.2 enable
#
returnRouterB的配置文件
#
sysname RouterB
#
keychain huawei mode periodic weekly
receive-tolerance 100
tcp-kind 182
tcp-algorithm-id sha-256 17
key-id 1
algorithm sha-256
key-string cipher %#%#j8P<=eo2u$q}YxHvZ/"8M:=n!+K>xX1;D~L'`d78%#%#
send-time day fri sat
receive-time day fri sat
default send-key-id
#
interface GigabitEthernet1/0/0
ip address 192.168.1.2 255.255.255.0
#
bgp 1
router-id 2.2.2.2
peer 192.168.1.1 as-number 1
peer 192.168.1.1 keychain huawei
#
ipv4-family unicast
undo synchronization
peer 192.168.1.1 enable
#
return
18.7 参考信息
介绍Keychain的参考标准和协议。
KeyChain是什么
keychain是一个加密的容器,通常用来保存密码,证书,和一些需要加密的key。对于iOS应用来说,每个APP有独立的keychain。苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等。它是一个在所有app之外的sqlite数据库。
通俗点来说 keychain相当于银行的一个金库,keychain Item就相当于金库里的一个个保险柜,保存在keychain Item里面的密码就相当于保险柜里面存放的金条。
注意 :keyChain的访问权限依赖于provisioning file。所以,如果要在应用更新的时候,仍然能够访问之前保存的密码,要保证provisioning file是同一个文件。
KeyChain 结构组成
keyChain是通过字典来描述的,是一组key-value的对。用来描述这个keyChain是为什么样的应用保存什么样的数据,有什么样的访问权限等等。
Keychain内部可以保存很多的信息。每条信息作为一个单独的keychain item,keychain item一般为一个字典,每条keychain item包含一条data和很多attributes。
1.组成部分由 {N个标签(属性) + 一个重要数据} 组成!
2.@{@"属性key1":@"属性值1",@"属性keyN":@"属性值N",@"valueData":@数据}如图
keychainItem.png-- kSecClass 表示存储数据的类型,kSecClassGenericPassword代表密码
-- kSecAttrAccount 表示的是为IamUser这个账号存储的密码
-- kSecAttrService 表示是为App Store 这个歌APP存储的账号-- 其余两个在查询的时候使用,知道如果要查询都设为ture就可以了
如果把keychain item的类型指定为需要保护的类型比如password或者private key,item的data会被加密并且保护起来,如果把类型指定为不需要保护的类型,比如certificates,item的data就不会被加密。
item可以指定为以下几种类型:
kSecClassGenericPassword //指定通用密码项目
kSecClassInternetPassword //指定Internet密码项目
kSecClassCertificate //指定证书项目
kSecClassKey //指定关键项目
kSecClassIdentityOSX_AVAILABLE_STARTING(MAC_10_7, __IPHONE_2_0);//指定标识项注意:keychain虽然是可以保存15000条item,每条50个attributes,但是苹果工程师建议最好别放那么多,存几千条密码,几千字节没什么问题。
KeyChain的结构
iOS中Keychain Services使用key-value dictionary来指定我们想要创建或者查找的keychain item属性。
一个典型的搜索字典包含以下四部分:
- The class key-value pair:指定了keychain item类型。
- 一个或多个key-value pairs:指定keychain item的各种一般属性
- 一个或多个key-value pairs:指定keychain item的各种查找属性,例如kSecMatchPolicy,为了查找的精确性
- 一个返回类型的key-value pair:指定想要的返回结果的类型,例如是返回一个dictionary或者persistent reference
1:keychain的本质
iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌。苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等。它是一个sqlite数据库,位于/private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的
32 (OC)* keyChain的本质的更多相关文章
- iOS进阶一OC对象的本质
OC对象的本质 平时编写的Object-C代码,底层实现其实都是C/C++代码. 所以Objective-C的面向对象都是基于C/C++的数据结构实现的,OC对象内部可以容纳不同数据类型的数据,因此可 ...
- OC 类的本质和分类
一.分类 (一)分类的基本知识 概念:Category 分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件结构图: 在分类中添加一 ...
- OC对象的本质及分类
Object-C的底层都是通过C/C++来实现的,所以OC中的对象也会转化成C/C++中的某一个数据结构, 我们在终端里通过指令 xcrun -sdk iphoneos clang -arch arm ...
- OC类的本质,深入探讨,load方法和initialize方法
1:类的本质:类也是一种类,可以叫做类类,类对象,类类型: 2:类和对象在内存中分配问题(注意区分类的对象和类对象的概念) 类对象在内存中只有一份,且只加载一次,类对象中存放了类中定义的方法: 而成员 ...
- OC类的本质及分类
(一)类的本质 类对象(class object)与实例对象(instance object) 类本身也是一个对象,是class类型的对象,简称“类对象”. 在/usr/include/objc/ob ...
- OC 消息机制本质
转载自:http://m.blog.csdn.net/blog/util_c/10287909 在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段.编译器会将消 ...
- 编写OC高质量的代码的有效方法
1. 写这个只是为了自己记忆,有相关pdf文件,如需要留下邮箱.. 2. 在类的头文件中尽量少引入其他头文件 除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类( ...
- oc精简笔记
首先如果是想在终端学习的话,以下内容是必须的,如果是直接使用xcode的请随意: operating system os X ter 终端的缩写 ls 显示目录文件 ...
- QF——OC数组
OC中的数组: OC中的数组和它的字符串有很多相似之处.也分为可变和不可变. NSArray:不可变数组,一经初始化,便不能再更改: NSMutableArray:可变数组,它其实是继承于NSArra ...
随机推荐
- Spring源码剖析9:Spring事务源码剖析
转自:http://www.linkedkeeper.com/detail/blog.action?bid=1045 声明式事务使用 Spring事务是我们日常工作中经常使用的一项技术,Spring提 ...
- 13张PPT带你了解主动式消息队列处理集群
前言 偷偷和你们说,我搞了一份内部资料,该内部资料共有13张PPT,据作者透露,该PPT至少花了整整1周时间才编写完成,其内容简洁明了,内容深度足够,易于初学者理解,也给深度开发人员分享了不一样的消息 ...
- ranger-hdfs 插件组权限测试
当hdfs文件对外是公开的则该其他用户就算没有配置相关的权限一样可以进行相关的操作.当hdfs文件对外权限是没有开放的,其他用户若需要进行相关操作则需要通过Ranger进行相关权限的配置. 首先 / ...
- xgboost保险赔偿预测
XGBoost解决xgboost保险赔偿预测 import xgboost as xgb import pandas as pd import numpy as np import pickle im ...
- MSIL实用指南-类相关生成
一.创建class用MethodBuilder的DefineType方法,可以指定父类,得到一个TypeBuilder对象. 二.实现继承接口用TypeBuilder的AddInterfaceImpl ...
- 百度地图Canvas实现十万CAD数据秒级加载
背景 前段时间工作室接到一个与地图相关的项目,我作为项目组成员主要负责地图方面的设计和开发.由于地图部分主要涉及的是前端页面的显示,作为一名Java后端的小白,第一次写了这么多HTML和JavaScr ...
- 使用mybatis-generator生成底层
使用mybatis-generator生成底层 前言 使用springboot2,jdk1.8,idea 一.在pom引入相关依赖 <!--mybatise-generator--> ...
- mysql中的截取函数及其实例
一.mysql截取字符串函数 1.left(str,length) 从左边截取length 2.right(str,length)从右边截取length 3.substring(str,index)当 ...
- Storm 系列(八)—— Storm 集成 HDFS 和 HBase
一.Storm集成HDFS 1.1 项目结构 本用例源码下载地址:storm-hdfs-integration 1.2 项目主要依赖 项目主要依赖如下,有两个地方需要注意: 这里由于我服务器上安装的是 ...
- CodeForces 293E Close Vertices 点分治
题目传送门 题意:现在有一棵树,每条边的长度都为1,然后有一个权值,求存在多少个(u,v)点对,他们的路劲长度 <= l, 总权重 <= w. 题解: 1.找到树的重心. 2.求出每个点到 ...