IKE 协议简介
1. IKE 协议
IPSec 的安全联盟可以通过手工配置的方式建立,但是当网络中节点增多时,手工配置将非常困难,而且难以保证安全性。这时就要使用 IKE(Internet Key Exchange,因特网密钥交换)自动地进行安全联盟建立与密钥交换的过程。
IKE 协议是建立在由 Internet 安全联盟和密钥管理协议 ISAKMP (Internet Security Association and Key Management Protocol )定义的框架上。它能够为IPSec 提供了自动协商交换密钥、建立安全联盟的服务,以简化IPSec 的使用和管理。
IKE 具有一套自保护机制,可以在不安全的网络上安全地分发密钥、验证身份、建立 IPSec 安全联盟。
2. IKE 的安全机制
DH (Diffie-Hellman)交换及密钥分发。Diffie-Hellman 算法是一种公共密钥算法。通信双方在不传送密钥的情况下通过交换一些数据,计算出共享的密钥。加密的前提是交换加密数据的双方必须要有共享的密钥。IKE 的精髓在于它永远不在不安全的网络上直接传送密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥。即使第三者(如黑客)截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。
完善的前向安全性(Perfect Forward Secrecy,PFS)。PFS 是一种安全特性,指一个密钥被破解,并不影响其他密钥的安全性,因为这些密钥间没有派生关系。PFS 是由 DH 算法保障的。
身份验证。身份验证确认通信双方的身份。对于 pre-shared key 验证方法,验证字用来作为一个输入产生密钥,验证字不同是不可能在双方产生相同的密钥的。验证字是验证双方身份的关键。
身份保护。身份数据在密钥产生之后加密传送,实现了对身份数据的保护。
3. IKE 的交换阶段
IKE 使用了两个阶段为 IPSec 进行密钥协商并建立安全联盟:第一阶段,通信各方彼此间建立了一个已通过身份验证和安全保护的通道,此阶段的交换建立了一个ISAKMP 安全联盟,即 ISAKMP SA (也可称IKE SA);第二阶段,用在第一阶段建立的安全通道为 IPSec 协商安全服务,即为 IPSec 协商具体的安全联盟,建立IPSec SA,IPSec SA用于最终的 IP 数据安全传送。
从下图我们可以看出 IKE 和 IPSec 的关系。
具体安全联盟的建立过程如下图所示:
(1) 当一个报文从某接口外出时,如果此接口应用了IPSec,会进行安全策略的匹
配。
(2) 如果找到匹配的安全策略,会查找相应的安全联盟。如果安全联盟还没有建立,则触发 IKE 进行协商。IKE 首先建立阶段 1 的安全联盟,即IKE SA。
(3) 在阶段 1 安全联盟的保护下协商阶段2 的安全联盟,即IPSec SA。
(4) 使用 IPSec SA 保护通讯数据。
4. IKE 的协商模式
在 RFC2409 (The Internet Key Exchange)中规定,IKE 第一阶段的协商可以采用两种模式:主模式(Main Mode)和野蛮模式(Aggressive Mode )。主模式被设计成将密钥交换信息与身份、认证信息相分离。这种分离保护了身份信息;交换的身份信息受已生成的 Diffie-Hellman 共享密钥的保护。但这增加了3 条消息的开销。
野蛮模式则允许同时传送与 SA、密钥交换和认证相关的载荷。将这些载荷组合到一条消息中减少了消息的往返次数,但是就无法提供身份保护了。
虽然野蛮模式存在一些功能限制,但可以满足某些特定的网络环境需求。例如:远程访问时,如果响应者(服务器端)无法预先知道发起者(终端用户)的地址、或者发起者的地址总在变化,而双方都希望采用预共享密钥验证方法来创建 IKE SA,那么,不进行身份保护的野蛮模式就是唯一可行的交换方法;另外,如果发起者已知响应者的策略,或者对响应者的策略有全面的了解,采用野蛮模式能够更快地创建 IKE SA。
相关配置:
设置安全策略中引用的IKE Peer (仅用于IKE 协商方式)
对于 IKE 协商方式,无需象手工方式那样配置对等体、SPI 和密钥等参数,IKE 将自动协商这些它们,因而仅需要将安全策略和IKE Peer 关联即可。
在安全策略中引用 IKE Peer ike-peer peer-name
删除在安全策略中引用的IKE Peer undo ike-peer peer-name
配置IKE协商时的本地 ID
在系统视图下进行下列配置
配置IKE协商时的本地ID ike local-name router-name
删除本地ID undo ike local-name
指定IKE对端属性
1. 创建 IKE Peer并进入 IKE Peer视图
通过 IKE Peer,可以定义了一系列属性数据来描述 IKE协商所需的参数,包括创建IKE提议、协商模式、ID类型、NAT穿越、共享密钥、对端地址和对端名称等。
请在系统视图下进行下列配置。
创建IKE Peer并进入IKE Peer视图 ike peer peer-name
删除指定的IKE Peer undo ike peer peer-name
2. 配置 IKE协商模式
请在 IKE Peer视图下进行下列配置。
配置IKE协商方式 exchange-mode { main | aggressive }
恢复缺省IKE协商方式 undo exchange-mode
缺省情况下,采用主模式进行 IKE协商。
3. 配置 IKE安全提议
请在 IKE Peer视图下进行下列配置。
配置IKE安全提议 ike-proposal proposal-number
取消IKE安全提议 undo ike-proposal
缺省情况下,采用主模式时使用已配置的所有 IKE 安全提议,采用野蛮模式时使用
缺省的 IKE安全提议。
4. 配置对端 ID类型
当进行 IKE交换时,可以使用对端的 IP地址作为 ID,也可以使用对端名称作为 ID。
请在 IKE Peer视图下进行下列配置。
配置IKE Peer的ID类型 local-id-type { ip | name }
恢复缺省的ID类型 undo local-id-type
缺省情况下,IKE Peer采用的本端 ID类型为 IP地址形式。
5. 配置 IPSec是否需要 NAT穿越
请在 IKE Peer视图下进行下列配置。
使能IPSec的 NAT穿越 nat traversal
禁止IPSec的 NAT穿越 undo nat traversal
缺省情况下,禁止 NAT穿越功能。
6. 配置身份验证字
如果选择了 Pre-shared key验证方法。需要为每个对端配置预共享密钥。建
立安全连接的两个对端的预共享密钥必须一致。
请在 IKE Peer视图下进行下列配置。
配置与对端共享的 pre-shared key pre-shared-key key
删除身份验证字 undo pre-shared-key
7. 配置对端 IP地址
请在 IKE Peer视图下进行下列配置。
配置对端地址或地址段 remote-address low-ip-address [ high-ip-address ]
删除配置的对端地址 undo remote-address
8. 配置对端名称
在野蛮模式下,可以使用 remote-name命令配置对端名称。
请在 IKE Peer视图下进行下列配置。
配置对端名称 remote-name name
删除配置的对端名称 undo remote-name
创建IKE安全提议
IKE提议定义了一套属性数据来描述 IKE协商怎样进行安全通信。配置 IKE提议包括创建 IKE提议、选择加密算法、选择验证方法、选择验证算法、选择 Diffie-Hellman组标识和设置安全联盟生存周期。
用户可以按照优先级创建多条 IKE 提议,但是协商双方必须至少有一条匹配的 IKE提议才能协商成功。
采用主模式时:若在协商发起方的 ike peer中指定 IKE提议,IKE协商时将只发送指定的 IKE提议,响应方在自己的IKE提议配置中寻找与发送方指定的 IKE提议相匹配的 IKE提议,如果没有匹配的则协商失败;若发起方的 ike peer中不指定 IKE提议,IKE协商时将发送发起方所有的 IKE提议,响应方在自己的 IKE提议配置中依次寻找与发送方的IKE提议相匹配的 IKE提议。
采用野蛮模式时:若在协商发起方的 ike peer中指定 IKE提议,同采用主模式的情况;若发起方的 ike peer中不指定 IKE提议, IKE协商时将只发送发送方默认的 IKE提议,响应方也会用默认的 IKE提议匹配。
IKE显示与调试
IKE 提供以下命令显示当前所有安全联盟的状态和每个 IKE 提议配置的参数。display 命令可在所有视图下进行下列操作,debugging 和 reset 命令只能在用户视图下操作。
显示当前已建立的安全通道 display ike sa [ secp [ slot/card/port ] ]
查看IKE Peer的配置情况 display ike peer [ name peer-name ] [ secp [ slot/card/port ] ]
删除当前已建立的安全通道 reset ike sa [ connection-id ] [ secp [ slot/card/port ] ]
显示每个IKE提议配置的参数 display ike proposal [ secp [ slot/card/port ] ]
打开IKE的调试信息 debugging ike { all | error | exchange | message | misc | transport } [ secp [ slot/card/port ] ]
关闭IKE的调试信息 undo debugging ike { error | exchange | message | misc | transport } [ secp [ slot/card/port ] ]