UPF HTTPS 头增强功能,数据面转发设计实现

按照 《面向垂直行业的边缘N4解耦UPF测试规范v2.0》对 HTTPS 头增强测试要求,UPF 需要对 HTTPS 满足以下功能要求:

  1. UPF 可以根据业务类型 (IP 或 SNI ) 实现 HTTPS client hello 报文不通拓展字段插入,修改;

  2. UPF 可以识别 HTTPS client hello 报文中 server_name,同时按照 SNI 白名单,实现开启/关闭 HTTPS 头增强功能;

  3. UPF 可以识别 HTTPS client hello 报文中目的 IP,同时按照 目的 IP 白名单,实现开启/关闭 HTTPS 头增强功能;

  4. UPF 可以基于 目的 IP 白名单 开启/关闭 HTTPS 头增强功能;

  5. UPF 可以开启关闭,SNI 防欺诈头增强功能(默认一直开启);

  6. UPF 可以检验 SNI 和 目的 IP 是否匹配;

  7. UPF 可以对插入的 sub extension 进行加密或不加密。

SNI 白名单, IP 白名单,以及防欺诈开启或关断等配置项,通过增加 UPF https Header Enrichment 策略配置文件 配置到 UPF 上;在 UPF 启动时,自动加载到 upf_main 全局量中。

数据面转发流程

https_header_enrichment_image1.png

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 执行相应的头增强插入。

流程图如下:

UPF_pfcp_parse_Header_Enrichment_str.png