没有合适的资源?快使用搜索试试~ 我知道了~
首页IPSec加密流程学习笔记.pdf
IPSec加密流程学习笔记.pdf
需积分: 0 45 下载量 10 浏览量
更新于2023-03-03
评论 1
收藏 1.59MB PDF 举报
个人学习ipsec加密过程中整理的学习笔记,供大家参考学习。里面主要说明了ipsec策略匹配、报文封装等核心处理流程,同时对加密中的部分知识点进行解释说明
资源详情
资源评论
资源推荐
Author : Toney
•
Email : vip_13031075266@163.com
•
Date : 2020.11.22•
Copyright : 未经同意不得转载!!!
•
Version : openswan-2.6.51.5
•
Reference:https://download.openswan.org/openswan/•
1. 加密流程
2020年11月16日
22:21
struct {
enum ipsec_xmit_value (*action)(struct ipsec_xmit_state *ixs);
int next_state;
} xmit_state_table[] = {
[IPSEC_XSM_INIT1] = {ipsec_xmit_init1, IPSEC_XSM_INIT2 },
[IPSEC_XSM_INIT2]
=
{ipsec_xmit_init2,
IPSEC_XSM_ENCAP_INIT },
[IPSEC_XSM_ENCAP_INIT] = {ipsec_xmit_encap_init, IPSEC_XSM_ENCAP_SELECT },
[IPSEC_XSM_ENCAP_SELECT] = {ipsec_xmit_encap_select, IPSEC_XSM_DONE },
[IPSEC_XSM_ESP] = {ipsec_xmit_esp, IPSEC_XSM_ESP_AH },
[IPSEC_XSM_ESP_AH] = {ipsec_xmit_esp_ah, IPSEC_XSM_CONT },
[IPSEC_XSM_AH] = {ipsec_xmit_ah, IPSEC_XSM_CONT },
[IPSEC_XSM_IPIP] = {ipsec_xmit_ipip, IPSEC_XSM_CONT },
[IPSEC_XSM_IPCOMP] = {ipsec_xmit_ipcomp, IPSEC_XSM_CONT },
[IPSEC_XSM_CONT] = {ipsec_xmit_cont, IPSEC_XSM_DONE },
[IPSEC_XSM_DONE] = {NULL, IPSEC_XSM_DONE},
};
ipsec_tunnel_start_xmit: IPSEC策略匹配流程
v
根据报文五元组匹配eroute, 根据eroute找到对应得到outgoing_id
ipsec_xmit_init1
v
根据outgoing_id找到对应的ipsec sa
ipsec_xmit_init2
v
ipsecsa便是封装测试,遍历ipsecsa链,统计封装需要的headroom和tailroom。
ipsec_xmit_encap_init
v
加密状态机
2020年11月30日
23:21
以下不考虑ipv6的代码逻辑:
ipsec_tunnel_start_xmit: IPSEC策略匹配流程
v
创建ipsec发送状态:ixsØ
函数名
ipsec_xmit_state_new()
作用 创建ipsec发送状态结构
openswan源码中使用了内存池方式来申请内存○
openswan实现是在内核空间中,可以通过此接口实现流程功能。当ixs申请数量超过阈值时,关闭发送队列:
netif_stop_queue(); 等队列中的报文发送后再开启队列上层可以继续往队列中发送数据包。
○
ipsec出接口正确性检查:Ø
函数名
ipsec_xmit_sanity_check_ipsec_dev()
作用 检查ixs出接口相关参数
在
ipsec_xmit_state_new()成功创建完毕ixs后,会将dev结构存储到ixs上。而ipsec_xmit_sanity_check_ipsec_dev()则是检
查此出接口dev是否已经确定:如果未确定则返回失败,停止ipsec加密操作;
如果出接口已经确定,则将出接口MTU值存储在
ixs上。
ixs->physmtu = ixs->physdev->mtu;
ixs->cur_mtu = ixs->physdev->mtu;
网络数据包skb正确性检查:
Ø
函数名
ipsec_xmit_sanity_check_skb()
作用 检查ixs出接口相关参数
检查是否支持IPv6
○
检查是否支持IP头部选项字段
○
检查报文中是否包含二层头:Ø
函数名
ipsec_tunnel_strip_hard_header()
作用 检查报文中是否包含二层头
Sk_buf结构:
|
-------------
|
-------------------------
|
---------------
|
Head
data tail end
如果ixs->iph - ixs->skb->data > 0, 则说明已经封装了二层头。
如果报文中没有包含二层头,则○
ixs->hard_header_stripped = 1;
ixs->hard_header_len = ixs->physdev->hard_header_len;
根据报文查询Ipsec SA Ø
函数名
ipsec_tunnel_SAlookup()
作用 报文五元组查询eroute、IPSEC SA
从报文中提取:源IP、目的IP、Proto、源端口、目的端口、以及协议族构成matcher结构○
IPSEC策略匹配流程
2020年11月18日
23:26
根据matcher查询eroute路由表○
将报文中的端口号存储到ixs结构上
ixs->sport
§
ixs->dport §
○
构建
ixs->outgoing_said
○
设置outgoing_said默认值§
ixs->outgoing_said.proto = IPPROTO_INT; /*内部使用的协议类型*/
ixs
-
>outgoing_said.spi
= htonl(SPI_DROP);
ixs->outgoing_said.dst.u.v4.sin_addr.s_addr = INADDR_ANY;
略过本地外发的IKE协商报文§
ixs->outgoing_said.spi = htonl(SPI_PASS);
bypass = TRUE;
处理未被略过的报文(
bypass==FALSE && ixs->eroute
)
Outgoing_said从eroute上的said获取到ipsec sa信息
□
填充ixs->ips.ips_ident_d□
填充ixs->ips.ips_ident_s
□
§
根据outgoing_said查询ipsec sa
ixs->ipsp = ipsec_sa_getbyid(&ixs->outgoing_said,
IPSEC_REFTX);
○
查询失败,返回:IPSEC_XMIT_SAIDNOTFOUND○
Ø
构建ixs->ips
Ø
ipsec_xmit_init1
2020年11月18日
23:21
剩余24页未读,继续阅读
叨陪鲤
- 粉丝: 2w+
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0