总部一端有固定IP,分支没有固定IP,两方使用IKEv1+NAT穿越,NAT穿越允许源端口可以为非UDP500,增加UDP头部解决多VPN数据回包问题。
分支出口没有配置NAT Server映射UDP 500,UDP4500,总部看到的是分支转换后的公网IP,分支的源是私网地址,这个时候分支和总部通信是如何通过IKE第一阶段的认证的呀?
(0)
最佳答案
您好,请知:
IKE第一阶段目的是建立一个保密和验证无误的通信信道(IKE SA),以及建立验证过的密钥。为双方的IKE通信提供机密性,消息完整性以及消息验证服务。
参与通信双方会生成四种秘密:SKEYID(后续所有秘密建立在他之上);SKEYID_d(用于为其他协议,如ipsec,生成加密密钥提供材料);SKEYID_a(用于为IKE消息保障数据的完整性以及对数据源的身份进行验证);SKEYID_e(用于对IKE消息进行加密)。
协商过程如下:
IPSec协商分为两个阶段:第一阶段协商对对方的身份进行认证,并且为第二阶段的协商提供一条安全可靠的通道。第二阶段主要对IPSEC的安全性能进行协商,产生真正可以用来加密数据流的密钥。 第一阶段主模式(IKE SA 阶段): 发送cockie包,用来标识唯一的一个IPSEC会话。 IKE阶段一(主模式):发送消息1 initiator====>responsor isakmp header sa payload proposal payload transform payload 定义一组策略: 加密方法:DES 认证身份方法:预共享密钥 认证散列:MD5 存活时间:86400秒 Diffie-Hellman group:1 IKE阶段二(主模式):发送消息2 initiator<====responsor 同上 IKE阶段三(主模式):发送消息3 initiator====>responsor 通过DH算法产生共享密钥 KE(Key Exchang) Payload nonce(暂时) Payload DH算法: A: P(较大的质数) B: P(较大的质数) G G PriA(随机产生) PriB(随机产生) PubA=G^PriA mod P PubB=G^PriB mod P 交换PubA和PubB Z=PubB^PriA mod P Z=PubA^PriB mod P Z就是共享密钥,两个自我产生的Z应相同,它是用来产生3个SKEYID的素材。 IKE阶段四(主模式):发送消息4 initiator<====responsor 同上 主模式第3、4条消息其实就是DH算法中需要交换的几个参数,然后路由器再通过DH算法计算出的公共密钥计算出以下3个参数(这是在发送第5、6个消息前完成的): SKEYID_d:留在在第二阶段用,用来计算后续的IKE密钥资源; SKEYID_a:散列预共享密钥,提供IKE数据完整性和认证; SKEYID_e:用来加密下一阶段的message,data, preshared key,包括第二阶段。 IKE阶段五(主模式):发送消息5 initiator====>responsor Identity Payload:用于身份标识 Hash Payload:用来认证 以上2个负载都用SKEYID_e加密 IKE阶段六(主模式):发送消息6 initiator<====responsor 同上 消息5、6是用来验证对等体身份的。至此IKE协商第一阶段完成。 第二阶段快速模式(IPSec SA 阶段): 首先判断是否启用了PFS(完美转发安全),若启用了则重新进行DH算法产生密钥,若没有启用则是用第一阶段的密钥。 IPSec阶段一(快速模式):发送消息1 initiator====>responsor 同样定义一组策略,继续用SKEYID_e加密: Encapsulation— ESP Integrity checking— SHA-HMAC DH group— 2 Mode— Tunnel IPSec阶段二(快速模式):发送消息2 initiator<====responsor 同上,主要是对消息1策略的一个确认。 在发送消息3前,用SKEYID_d,DH共享密钥,SPI等产生真正用来加密数据的密钥。 IPSec阶段三(快速模式):发送消息3 initiator====>responsor 用来核实responsor的liveness。 至此,整个IPSec协商的两个过程已经完成,两端可以进行安全的数据传输 |
(0)
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
你好,回复的和我问的不是一回事呀
HMAC用的是SKEYID_a?