IKEv2建立(IKEv2 Packet Exchange)
介绍
IKEv1最初在RFC2409中进行定义,明确规定了IKEv1交互过程中分为Main Mode 和Aggressive Mode两种模式,在Main Mode中交互6个报文,在Aggressive Mode中交互3个报文。IKEv2与IKEv1不同,IKEv2最初在RFC 4306中进行定义,又在RFC5996中进行了修正。在IKEv2中没有Main Mode和Aggressive Mode说法。而是IKE_SA_INIT和IKE_AUTH 。在相同的环境下IKEv1完成建立需要交互9个报文,而IKEv2仅需要4个报文就能完成建立,相比于IKEv1,IKEv2更加紧凑和高效。下图是IKEv2 Packet Exchange 交互过程,来自“IKEv2 IPsec Virtual Private Networks Understanding and Deploying”
· SAi1: Sets of cryptographic algorithms proposed by initiator
· SAr1: Specific of cryptographic algorithms chosen by responder
· KEi: Initiator key exchange material (uses DH group with highest local priority)
· KEr: Responder key exchange material
· Ni : Initiator nonce
· Nr: Responder nonce
· CertReq: Certificate request (optional). The square brackets [ ] surrounding the CertReq payload denotes this as optional.
· SK { … } : Payload between { } is encrypted and integrity protected
· IDi : Initiator identity
· IDr : Responder identity
· Cert : Initiator certificate (optional)
· CertReq: Certificate request (optional)
· AUTH: Initiator and responder authentication data (not present if initiatorauthenticates via EAP)
· SAi2: Child SA transforms proposed by initiator
· SAr2: Child SA transforms chosen by responder
· TSi/TSr: Child SA traffic selectors (src/dst proxies)
IKE_SA_INIT Exchange
IKE_SA_INIT是ipsec vpn建立的初始交换,当完成IKE_SA_INIT交换之后后续其他的交互报文将被加密。下图是IKE_SA_INIT的数据包结构。通过查看可以看到,在基础的IKE头部里面有多个payload,在payload又有多个Proposal组成,在Proposal中由多个Transform 组成。
纵观整个IKE_SA_INIT数据包可以发现。在IKE_SA_INIT数据包中包括的内容有。
· Security Association
· Proposal
· Transform(Encryption Algorithm、Pseudo-random Function、Integrity Algorithm、Diffie-Hellman Group)
· Key Exchang
· Nonce
通过观察可以看到,其实IKE_SA_INIT数据包中的内容就是IKEv1中主模式的1~4个报文。也就是说,IKE_SA_INIT对IKEv1中1~4个报文进行了整合,使得交互更加高效。通过IKE_SA_INIT传递“材料”就可以完成后续报文的加密工作,当IKE_SA_INIT交互完成之后后续其他交互的报文将被加密。
IKE_AUTH Exchange
一旦IKE_SA_INIT交换成功完成,IKE_AUTH交换将会开始,用于认证对方,并产生IPsec Security Associations。下图是IKE_AUTH的报文。因为关键的信息被加密,我们无法获知其中的内容,不过笔者通过查阅IKEv2 IPsec Virtual Private Networks Understanding and Deploying 和RFC5996发现这一部分还是可以说清楚的。Internet Security Association and Key Management Protocol
Initiator SPI: 82752e51d889cf91
Responder SPI: 7f79f53a9737fe8f
Next payload: Encrypted and Authenticated (46)
Version: 2.0
0010 .... = MjVer: 0x2
.... 0000 = MnVer: 0x0
Exchange type: IKE_AUTH (35)
Flags: 0x08 (Initiator, No higher version, Request)
.... 1... = Initiator: Initiator
...0 .... = Version: No higher version
..0. .... = Response: Request
Message ID: 0x00000001
Length: 352
Type Payload: Encrypted and Authenticated (46)
Next payload: Vendor ID (43)
0... .... = Critical Bit: Not Critical
Payload length: 324
Initialization Vector: e8d40dfc
Encrypted Data
在IKEv2中先通过messages#1 和messages#2创建IKE SA 进行加密,然后通过messages#3和messages#4消息进行认证,认证完成之后将建立 CHILD_SA。其中IKE_AUTH所带的信息如下。 IKE头部(明文)、加密部分:发起者身份(IDi)、发起者证书(Cert)、证书请求(CertReq)、发起方和应答者身份验证数据(AUTH)、响应者选择的Child SA转换(SAr2)、Child SA流量选择器。
在IKEv2中支持签名认证、预共享密钥、EAP进行身份验证,采用什么样的方式进行认证就携带响应的信息。
通过Cisco debug信息发现在IKE_AUTH中主要交换如下几个Payload。
*Mar 21 01:21:39.829: IKEv2:Construct Vendor Specific Payload: CISCO-GRANITE其中INITIAL_CONTACT Payload是用于标识对等体之间唯一的唯一的IKEv2会话以前任何会话现在都无效,应该被删除。当主机在IKE_AUTH交换机内发送INITIAL_CONTACT通知时执行初始联系,在认证成功之后需要检查和此对等体还有没有其他的IKEv2会话,如果有则删除,如果没有那么就断言最新的IKEv2 SA是双方当前唯一的IKEv2 SA。
*Mar 21 01:21:39.833: IKEv2:Construct Notify Payload: INITIAL_CONTACT
*Mar 21 01:21:39.833: IKEv2:Construct Notify Payload: SET_WINDOW_SIZE
*Mar 21 01:21:39.837: IKEv2:Construct Notify Payload: ESP_TFC_NO_SUPPORT
*Mar 21 01:21:39.841: IKEv2:Construct Notify Payload: NON_FIRST_FRAGS
IKEv2中认证是一个大项,有很多东西不在此文档中展开,在此不再展开赘述,有兴趣的可以查阅“IKEv2 IPsec Virtual Private Networks Understanding and Deploying”当中有详细的介绍。
IKE SA states
因为在看debug信息的时候才会关注IKEv2中的状态,所以在此稍微说一下。
发起者INIT状态表示IKE_SA_INIT请求尚未发送。
应答方的INIT状态表示响应者正在处理从发起者接收到的IKE_SA_INIT请求。
WAIT KE状态指示发起者已经发送了IKE_SA_INIT请求,并且正在等待来自响应者的IKE_SA_INIT响应。
WAIT KE状态指示应答方已经处理了IKE_SA_INIT并正在等待来自发起者的IKE_AUTH请求。
发起方的WAIT AUTH状态表示发起方发送了IKE_AUTH请求
应答方的WAIT AUTH状态表示响应方已收到IKE_AUTH请求
发起方的DONE状态表示启动器已经收到IKE_AUTH响应
应答方的DONE状态表示响应者已经发送了IKE_AUTH响应
参考文献
- IKEv2 Packet Exchange and Protocol Level Debugging
- RFC 5996
- IKEv2 Phase 1 (IKE SA) and Phase 2 (Child SA) Message Exchanges
- IOS IKEv2 Debugs for Site-to-Site VPN with PSKs Troubleshooting TechNote
- Interpreting IKEv2 IKE SA states
- IKEv2 IPsec Virtual Private Networks Understanding and Deploying
(因为版权问题,这个书没有办法直接上传分享出来,如果有兴趣查看的可以联系我 ccie43413@yahoo.com)