UPF HTTPS 头增强功能,数据面转发设计实现
按照 《面向垂直行业的边缘N4解耦UPF测试规范v2.0》对 HTTPS 头增强测试要求,UPF 需要对 HTTPS 满足以下功能要求:
UPF 可以根据业务类型 (IP 或 SNI ) 实现
HTTPS client hello
报文不通拓展字段插入,修改;UPF 可以识别
HTTPS client hello
报文中server_name
,同时按照 SNI 白名单,实现开启/关闭 HTTPS 头增强功能;UPF 可以识别
HTTPS client hello
报文中目的 IP,同时按照 目的 IP 白名单,实现开启/关闭 HTTPS 头增强功能;UPF 可以基于 目的 IP 白名单 开启/关闭 HTTPS 头增强功能;
UPF 可以开启关闭,SNI 防欺诈头增强功能(默认一直开启);
UPF 可以检验 SNI 和 目的 IP 是否匹配;
UPF 可以对插入的 sub extension 进行加密或不加密。
SNI 白名单, IP 白名单,以及防欺诈开启或关断等配置项,通过增加 UPF https Header Enrichment
策略配置文件 配置到 UPF 上;在 UPF 启动时,自动加载到 upf_main
全局量中。
数据面转发流程
UPF PFCP 解析 Header Enrichment IE 匹配字符串
https
头增强时,需要注意一下两点:
1、是从 Header Enrichment IE
中确定需要插入哪些拓展字段;
2、插入格式为 TLV
形式,非字符串形式。
因此,为数据面不必每次对报文都做 Header Enrichment IE
中字符串匹配操作,在 UPF PFCP
添加或修改 Header Enrichment IE
时,统一匹配字符串,并存储在 far->forward.he_field
中,数据格式为:
struct header_enrichment_field {
uint8_t type;
uint64_t value;
uint16_t length; // value length
};
struct header_enrichment_field* he_field;
数据面在按照 he_field.type 执行相应的头增强插入。
流程图如下: