# 基于 Nginx 与 TongsuoSSL 的国密 SSL 网关方案 ## 1. 目标与范围 本方案描述一个基于 Nginx 与 TongsuoSSL 的 SSL 网关程序,用于在网关入口侧支持国密算法套件,并将业务流量安全、稳定地转发到后端服务。 网关重点能力如下: - 支持国密 TLS/SSL 能力,包括 SM2、SM3、SM4 及国密相关密码套件。 - 支持端口融合,在同一个监听端口上同时兼容国密套件和国际套件。 - 可选支持 SDF 接口对接海光 CCP,SDF 动态库通过配置外置指定。 - 复用 Nginx 的高性能网络模型、反向代理能力、负载均衡能力和配置体系。 - 使用 TongsuoSSL 替换或增强 Nginx 原生 OpenSSL 依赖,为 TLS 握手、证书校验、加解密提供国密能力。 - 对外提供统一 HTTPS/GMSSL 入口,对内按策略转发 HTTP、HTTPS 或其他上游协议。 - 将证书、密钥、路由、上游、日志、监控等职责拆分为清晰模块,便于后续实现和运维。 ## 2. 总体架构 整体架构采用“增强版 Nginx 网关 + TongsuoSSL 加密底座 + 配置与运维支撑模块”的形式。 ```mermaid flowchart LR Client["客户端
浏览器、终端、SDK"] --> Listener["监听接入模块
Nginx listen 与 server"] Listener --> TLS["国密 TLS 处理模块
TongsuoSSL"] TLS --> Router["请求路由模块
Nginx location、map 与 rewrite"] Router --> Proxy["反向代理模块
proxy 与 upstream"] Proxy --> Upstream["后端业务服务"] Config["配置管理模块"] --> Listener Config --> TLS Config --> Router Config --> Proxy Cert["证书密钥管理模块"] --> TLS SDF["SDF 适配模块
海光 CCP 动态库"] --> TLS SDF --> Cert %% 日志模块从各组件收集数据(箭头指向 Log) Listener --> Log["日志审计模块"] TLS --> Log Router --> Log Proxy --> Log %% 监控模块从各组件收集数据(箭头指向 Monitor) Listener --> Monitor["监控告警模块"] TLS --> Monitor Proxy --> Monitor ``` 核心关系说明: - Nginx 是网关主进程与流量调度核心,负责监听端口、解析请求、路由匹配、负载均衡和反向代理。 - TongsuoSSL 是 TLS/SSL 能力提供方,嵌入 Nginx SSL 模块调用链中,负责国密握手、国际 TLS 握手、密码套件协商、证书链校验和数据加解密。 - 配置管理模块以 Nginx 配置为主,统一描述监听、端口融合、证书、密码套件、SDF 动态库、路由、上游和日志策略。 - 证书密钥管理模块向 TLS 处理模块提供签名证书、加密证书、国际证书、私钥、CA 链和吊销信息。 - 日志审计与监控告警模块不直接参与转发决策,主要消费各模块运行状态和请求结果。 ## 3. 模块职责 ### 3.1 监听接入模块 职责: - 基于 Nginx `server` 与 `listen` 配置暴露网关入口端口。 - 支持普通 HTTPS 入口、国密 SSL 入口以及同端口融合入口。 - 负责连接接入、连接复用、超时控制、客户端 IP 透传和基础限流。 - 在端口融合入口中不按端口区分算法体系,由国密 TLS 处理模块根据 ClientHello 能力完成协议和套件协商。 - 将完成 TCP 接入后的连接交给国密 TLS 处理模块。 输入: - 客户端 TCP 连接。 - 监听端口、端口融合开关、协议类型、连接超时、并发限制等配置。 输出: - 已接入的连接上下文。 - 连接建立、关闭、异常等基础日志和指标。 与其他模块关系: - 从配置管理模块读取监听端口和协议参数。 - 将连接转交给国密 TLS 处理模块。 - 向日志审计模块和监控告警模块输出连接级事件。 ### 3.2 国密 TLS 处理模块 职责: - 通过 TongsuoSSL 提供国密 TLS/SSL 与标准 TLS 能力。 - 完成协议版本协商、密码套件协商、密钥交换、证书选择、证书校验和会话密钥生成。 - 支持 SM2 签名证书、SM2 加密证书、SM3 摘要算法、SM4 对称加密算法。 - 支持同端口融合,根据客户端 `ClientHello` 中的协议版本、签名算法、密码套件和扩展字段选择国密或国际 TLS 处理路径。 - 支持国际套件所需的 RSA 或 ECDSA 服务端证书,避免国密和国际客户端互相阻塞。 - 支持单向认证和可选的双向认证。 - 根据配置决定是否启用会话复用、会话缓存、OCSP/CRL 校验等能力。 输入: - 监听接入模块传入的连接上下文。 - 证书、私钥、CA 链、密码套件、协议版本、端口融合策略、SDF 开关等 TLS 配置。 输出: - 已完成 TLS 握手的安全连接。 - 握手失败原因、证书校验结果、协议类型、密码套件协商结果、SDF 使用结果等日志和指标。 与其他模块关系: - 被 Nginx SSL 模块调用,底层依赖 TongsuoSSL API。 - 从证书密钥管理模块加载国密证书和私钥。 - 从配置管理模块读取协议版本、密码套件、端口融合、SDF 和认证策略。 - 握手完成后将明文 HTTP 请求交给请求路由模块。 ### 3.3 国密协议版本与密码套件范围 本方案首版明确支持以下国密协议与密码套件。实际可用范围需要以最终选定的 TongsuoSSL 与 Nginx 编译组合为准,启动前通过 `nginx -t` 和客户端握手测试确认。 | 协议版本 | 密码套件名称 | 身份认证 | 密钥交换 | 摘要算法 | 对称加密 | 支持级别 | 说明 | | --------- | ----------------------- | ----------- | ---------------- | ---- | ------- | ---- | ----------------------- | | GMTLS 1.1 | `ECC-SM2-SM4-CBC-SM3` | SM2 | ECDHE 或 SM2 协商流程 | SM3 | SM4-CBC | 首版必选 | 常见国密双证书场景,兼容性优先 | | GMTLS 1.1 | `ECDHE-SM2-SM4-CBC-SM3` | SM2 | ECDHE | SM3 | SM4-CBC | 首版必选 | 适合需要前向安全的国密 TLS 场景 | | GMTLS 1.1 | `ECDHE-SM2-SM4-GCM-SM3` | SM2 | ECDHE | SM3 | SM4-GCM | 首版建议 | 优先选择 AEAD 模式,需确认客户端兼容性 | | TLS 1.3 | `TLS_SM4_GCM_SM3` | 证书算法可使用 SM2 | TLS 1.3 密钥协商 | SM3 | SM4-GCM | 兼容增强 | 适用于支持 RFC 8998 的客户端和服务端 | | TLS 1.3 | `TLS_SM4_CCM_SM3` | 证书算法可使用 SM2 | TLS 1.3 密钥协商 | SM3 | SM4-CCM | 兼容增强 | 适用于支持 RFC 8998 的客户端和服务端 | 版本边界: - 国密专用双证书握手优先按 `GMTLS 1.1` 设计,证书侧使用签名证书和加密证书。 - 标准 `TLS 1.3` 国密密码套件按 RFC 8998 设计,密码套件名称为 `TLS_SM4_GCM_SM3` 和 `TLS_SM4_CCM_SM3`。 - 标准 `TLS 1.2` 本身没有 IETF 标准化的 `SM2 + SM3 + SM4` 密码套件;如需兼容,应按 TongsuoSSL 提供的国密扩展能力单独验证。 - 标准 RSA、ECDSA、AES 类密码套件不属于本方案的国密重点范围,可作为兼容入口另行配置。 配置原则: - 默认优先启用 `ECDHE-SM2-SM4-GCM-SM3` 或 `TLS_SM4_GCM_SM3`,在客户端不兼容时回退到 CBC 套件。 - 对公网入口不建议启用弱算法、非国密目标算法或无前向安全的配置。 - 每个监听入口应明确协议版本和密码套件,避免一个入口同时承担过多兼容逻辑。 ### 3.4 SDF 适配模块 职责: - 可选对接海光 CCP 的 SDF 接口,为 SM2 私钥运算、随机数生成等能力提供硬件或密码卡支撑。 - SDF 动态库不内置到网关程序中,通过配置指定动态库路径、设备标识、应用标识、密钥索引和访问参数。 - 网关启动或 reload 时按配置加载 SDF 动态库,并完成设备打开、会话创建和密钥可用性检查。 - 当 SDF 模块内密钥已生成且可用时,优先使用 SDF 内部密钥完成私钥相关密码运算。 - 当 SDF 模块内密钥未生成、密钥索引不存在或设备不可用时,按配置退化为使用外部私钥文件和证书。 - SDF 退化只能影响私钥运算来源,不应改变客户端可见的证书链、路由规则和上游转发行为。 输入: - SDF 开关、动态库路径、设备参数、密钥索引、超时和回退策略。 - 外部证书、外部私钥和 CA 链配置。 输出: - 可供国密 TLS 处理模块调用的私钥运算接口。 - SDF 初始化状态、密钥命中状态、回退原因和错误信息。 与其他模块关系: - 被国密 TLS 处理模块调用,用于完成握手中的 SM2 私钥相关运算。 - 与证书密钥管理模块协作,决定当前入口使用 SDF 内部密钥还是外部私钥文件。 - 从配置管理模块读取动态库路径、密钥索引和回退策略。 - 向日志审计模块和监控告警模块输出 SDF 初始化、调用失败和回退事件。 回退规则: | 场景 | 处理方式 | 日志级别 | 是否允许继续启动 | | --- | --- | --- | --- | | 未启用 SDF | 使用外部私钥文件和证书 | info | 是 | | SDF 动态库路径为空 | 使用外部私钥文件和证书 | warn | 是 | | SDF 动态库加载失败 | 使用外部私钥文件和证书 | error | 是,前提是外部私钥可用 | | SDF 设备打开失败 | 使用外部私钥文件和证书 | error | 是,前提是外部私钥可用 | | SDF 密钥索引不存在 | 使用外部私钥文件和证书 | warn | 是,前提是外部私钥可用 | | SDF 内部密钥可用 | 使用 SDF 内部密钥 | info | 是 | | SDF 不可用且外部私钥不可用 | 当前入口启动失败 | error | 否 | ### 3.5 证书密钥管理模块 职责: - 管理国密双证书体系,包括签名证书、加密证书及其私钥。 - 管理国际 TLS 证书体系,包括 RSA 或 ECDSA 证书及其私钥。 - 当启用 SDF 时,负责校验外部证书与 SDF 内部密钥的公钥匹配关系。 - 管理 CA 根证书、中间证书、客户端认证 CA、CRL 文件等信任材料。 - 支持证书文件加载、权限校验、格式校验和到期时间检查。 - 为后续热更新或自动轮换预留清晰边界,但首版可采用文件配置方式。 输入: - PEM 格式证书、私钥、CA 链和吊销列表文件。 - 证书路径、密钥路径、SDF 密钥索引、客户端认证策略等配置。 输出: - 可供 TongsuoSSL 使用的证书、私钥、SDF 密钥引用和信任链。 - 证书加载失败、即将过期、校验失败等告警信息。 与其他模块关系: - 向国密 TLS 处理模块提供证书、外部密钥材料或 SDF 密钥引用。 - 从配置管理模块读取证书文件路径和认证策略。 - 向日志审计模块记录证书加载和校验结果。 - 向监控告警模块输出证书有效期和加载状态。 ### 3.6 请求路由模块 职责: - 基于 Nginx `server_name`、`location`、`map`、`rewrite` 等能力完成请求匹配。 - 根据域名、路径、Header、方法等条件选择后端上游。 - 负责请求头规范化、必要的安全头处理和客户端信息透传。 - 将路由后的请求交给反向代理模块。 输入: - 国密 TLS 处理模块解密后的 HTTP 请求。 - 路由规则、域名规则、Header 处理策略等配置。 输出: - 已匹配上游的请求上下文。 - 路由命中、未命中、重写结果等日志和指标。 与其他模块关系: - 从配置管理模块读取路由规则。 - 将请求转交给反向代理模块。 - 向日志审计模块输出访问日志所需字段。 ### 3.7 反向代理与上游管理模块 职责: - 使用 Nginx `proxy_pass` 与 `upstream` 能力转发请求到后端服务。 - 支持轮询、权重、最少连接、健康检查等上游策略。 - 支持对内 HTTP、HTTPS 或按需扩展其他协议。 - 负责连接池、超时、重试、失败切换和响应返回。 输入: - 请求路由模块传入的请求上下文。 - 上游服务地址、负载均衡策略、超时、重试等配置。 输出: - 后端服务响应。 - 上游连接状态、请求耗时、错误码、重试次数等日志和指标。 与其他模块关系: - 从配置管理模块读取上游列表和代理策略。 - 将响应返回给客户端连接。 - 向日志审计模块和监控告警模块输出转发结果。 ### 3.8 配置管理模块 职责: - 以 Nginx 配置文件为核心,统一管理网关运行参数。 - 管理监听端口、SSL 参数、证书路径、路由规则、上游服务、日志格式和限流策略。 - 支持配置语法检查、灰度发布和 reload 生效。 - 通过模板或配置生成工具降低手工配置错误,但首版可先使用静态配置文件。 输入: - 运维或部署系统提供的配置文件。 - 环境变量、模板参数或外部配置中心数据。 输出: - Nginx 可加载的完整配置。 - 配置检查结果和 reload 结果。 与其他模块关系: - 为监听接入、国密 TLS、证书密钥、请求路由、反向代理、日志监控提供配置来源。 - 不直接处理业务流量,只影响各运行模块的行为。 ### 3.9 日志审计模块 职责: - 记录访问日志、错误日志、TLS 握手日志和安全审计日志。 - 记录客户端 IP、域名、路径、状态码、响应时间、上游地址、密码套件、证书校验结果等关键信息。 - 支持与日志采集系统对接,例如 Filebeat、Fluent Bit 或本地日志轮转工具。 - 为问题排查、合规审计和安全分析提供数据来源。 输入: - 各模块产生的运行事件、请求结果和异常信息。 输出: - 标准访问日志、错误日志、安全审计日志。 - 可被外部采集系统消费的结构化或半结构化日志。 与其他模块关系: - 被监听接入、国密 TLS、请求路由、反向代理、证书密钥等模块调用或间接写入。 - 向运维平台、安全平台提供审计数据。 ### 3.10 监控告警模块 职责: - 采集网关运行指标、TLS 握手指标、证书状态和上游服务状态。 - 关注 QPS、连接数、握手成功率、握手耗时、4xx/5xx、上游耗时、证书剩余有效期等指标。 - 支持通过 Nginx stub_status、日志采集、Exporter 或外部探针方式接入监控系统。 - 根据阈值产生告警,辅助定位证书过期、握手失败、后端异常和容量不足等问题。 输入: - Nginx 运行状态、日志、证书检查结果、上游探测结果。 输出: - 指标数据、健康状态和告警事件。 与其他模块关系: - 从监听接入、国密 TLS、反向代理、证书密钥模块获取运行状态。 - 与日志审计模块互补,日志用于追踪明细,监控用于观察趋势和触发告警。 ## 4. 请求处理流程 ```mermaid sequenceDiagram participant C as 客户端 participant N as Nginx监听接入 participant T as TongsuoSSL国密TLS participant R as 请求路由 participant P as 反向代理 participant U as 后端服务 C->>N: 建立TCP连接 N->>T: 发起TLS或国密握手 T->>T: 协商协议版本与国密密码套件 T->>T: 加载并校验证书链 T-->>C: 握手完成 C->>T: 发送加密HTTP请求 T->>R: 解密后转交HTTP请求 R->>R: 匹配server、location与upstream R->>P: 传递路由结果 P->>U: 转发请求 U-->>P: 返回响应 P-->>T: 返回明文响应 T-->>C: 加密响应并返回 ``` 流程说明: 1. 客户端连接网关监听端口。 2. Nginx 接收 TCP 连接并进入 SSL 握手流程。 3. TongsuoSSL 负责国密协议与密码套件协商。 4. 握手成功后,TongsuoSSL 解密 HTTP 请求。 5. Nginx 按配置执行域名、路径和请求规则匹配。 6. 反向代理模块将请求转发到目标上游。 7. 后端响应经网关返回客户端,出口侧继续由 TLS 模块加密。 ## 5. 部署形态 建议首版采用静态编译或明确绑定 TongsuoSSL 的 Nginx 构建方式: ```text Nginx 主程序 ├── Nginx core/event/http 模块 ├── Nginx ssl/http_ssl 模块 ├── TongsuoSSL 库 ├── 网关配置文件 ├── 国密证书与私钥文件 └── 日志与监控采集组件 ``` 模块部署关系: - Nginx 与 TongsuoSSL 位于同一运行实例中,TongsuoSSL 作为 Nginx SSL 能力的底层库。 - 配置文件、证书文件和日志目录通过部署系统挂载或复制到实例内。 - 监控采集组件可与网关同机部署,也可由外部监控系统远程采集。 - 后端服务与网关之间可处于同一内网,是否启用内侧 TLS 根据安全要求决定。 ## 6. 端口融合策略 端口融合指同一个 `listen` 端口同时支持国密密码套件和国际密码套件,避免为不同客户端分别暴露不同端口。 设计原则: - 同一端口同时配置国密套件和国际套件,由 TLS 握手阶段根据客户端能力自动协商。 - 国密客户端优先协商 `GMTLS 1.1` 或 `TLS 1.3` 国密套件,国际客户端协商标准 RSA、ECDSA、AES 或 CHACHA20 套件。 - 服务端需要同时准备国密证书和国际证书,TLS 处理模块根据握手上下文选择匹配证书。 - 对不支持国密的普通客户端,不应因为启用国密套件导致握手失败。 - 对只支持国密的客户端,不应因为同时配置国际套件导致降级到非国密算法。 同端口融合关系如下: ```mermaid flowchart LR ClientHello["ClientHello
协议版本、签名算法、密码套件"] --> Selector["TLS 能力选择
TongsuoSSL"] Selector --> GM["国密路径
GMTLS 1.1 或 TLS 1.3 SM 套件"] Selector --> INTL["国际路径
标准 TLS 套件"] GM --> GMCert["国密证书
SM2 签名证书与加密证书"] INTL --> IntlCert["国际证书
RSA 或 ECDSA 证书"] GMCert --> Router["统一请求路由"] IntlCert --> Router ``` 注意事项: - 端口融合属于 TLS 握手层能力,路由模块不应依赖“国密或国际”来决定默认业务路由。 - 如果业务必须区分国密和国际来源,应通过独立 Header、变量或日志字段显式标记,避免隐式依赖端口。 - 若客户端兼容性复杂,可保留独立国密端口和独立国际端口作为排障入口。 ## 7. 配置边界 首版建议将配置划分为以下文件或片段: ```text conf/ ├── nginx.conf # 主配置,定义 worker、日志、全局参数 ├── conf.d/ │ ├── gateway.conf # 网关 server、SSL、端口融合和路由配置 │ ├── sdf.conf # 可选 SDF 动态库、设备和密钥索引配置 │ └── upstream.conf # 后端 upstream 配置 ├── certs/ │ ├── sign.crt # 国密签名证书 │ ├── sign.key # 国密签名私钥 │ ├── enc.crt # 国密加密证书 │ ├── enc.key # 国密加密私钥 │ ├── intl.crt # 国际 TLS 证书 │ ├── intl.key # 国际 TLS 私钥 │ └── ca.crt # CA 证书链 └── logs/ ├── access.log ├── error.log └── ssl_audit.log ``` 职责边界: - `nginx.conf` 只放全局配置,不承载业务路由细节。 - `gateway.conf` 定义入口、端口融合、SSL 参数、server_name、location 和代理规则。 - `sdf.conf` 定义 SDF 开关、动态库路径、设备参数、密钥索引和回退策略。 - `upstream.conf` 定义后端服务池和负载均衡策略。 - `certs/` 只保存证书和密钥材料,权限应独立控制。 - `logs/` 只作为本地日志落地点,由外部系统负责采集和归档。 ## 8. 安全职责划分 | 安全事项 | 责任模块 | 说明 | | -------- | -------------------- | ------------------------ | | 国密密码套件支持 | 国密 TLS 处理模块 | 由 TongsuoSSL 提供底层算法与协议支持 | | 端口融合协商 | 监听接入模块、国密 TLS 处理模块 | 同一端口根据 ClientHello 协商国密或国际套件 | | SDF 密钥运算 | SDF 适配模块、证书密钥管理模块 | 可选调用海光 CCP SDF 动态库,失败时按策略回退 | | 服务端证书加载 | 证书密钥管理模块 | 提供签名证书、加密证书和私钥 | | 客户端证书认证 | 国密 TLS 处理模块、证书密钥管理模块 | 可按入口启用双向认证 | | 后端访问控制 | 请求路由模块、反向代理模块 | 通过路由规则和网络策略限制上游访问 | | 敏感信息保护 | 配置管理模块、证书密钥管理模块 | 限制私钥文件权限,避免日志泄露密钥 | | 安全审计 | 日志审计模块 | 记录握手失败、证书异常和访问异常 | | 证书过期告警 | 监控告警模块 | 采集证书剩余有效期并触发告警 | ## 9. 实施阶段建议 ### 阶段一:基础可用版本 目标:验证 Nginx 与 TongsuoSSL 能够完成国密 TLS 接入和基础反向代理。 主要工作: - 构建绑定 TongsuoSSL 的 Nginx。 - 配置同端口国密与国际套件融合入口。 - 准备国密服务端证书、国际 TLS 服务端证书和 CA 证书。 - 配置国密 SSL、国际 TLS 和端口融合所需密码套件。 - 配置单个后端 upstream 并完成请求转发。 - 输出访问日志和错误日志。 验收标准: - 客户端可使用国密 TLS 或国际 TLS 在同一端口成功连接网关。 - 网关可将请求转发到后端服务并返回响应。 - 握手失败、证书错误、上游错误可在日志中定位。 ### 阶段二:生产增强版本 目标:完善稳定性、安全性和运维能力。 主要工作: - 增加多 upstream 与负载均衡策略。 - 增加双向认证配置能力。 - 增加证书有效期检查、SDF 初始化状态检查和告警。 - 增加结构化访问日志和 TLS 审计字段。 - 增加配置检查、reload 和回滚流程。 验收标准: - 多后端转发策略符合配置预期。 - 客户端证书校验策略可按入口控制。 - 证书即将过期、SDF 不可用、上游异常、握手异常可触发监控告警。 - 配置变更可通过检查后平滑 reload。 ### 阶段三:平台化版本 目标:将网关能力沉淀为可持续运维的平台组件。 主要工作: - 对接配置中心或配置生成工具。 - 支持证书自动轮换、集中托管或 SDF 内部密钥生命周期管理。 - 接入统一日志、监控和告警平台。 - 形成标准部署包、启动脚本和运维手册。 验收标准: - 网关实例可批量部署和一致化配置。 - 证书轮换或 SDF 密钥切换流程不影响业务连续性。 - 运维人员可通过统一平台观察运行状态并定位问题。 ## 10. 推荐版本与工作量预估 ### 10.1 推荐版本 | 组件 | 推荐版本 | 备选版本 | 推荐理由 | 注意事项 | | --- | --- | --- | --- | --- | | Nginx | `1.30.3` | `1.31.2` | `1.30.x` 属于稳定分支,适合作为首版工程基线;`1.31.x` 更新但更偏主线验证 | 如需使用更新 HTTP 或 SSL 能力,可在专项测试后切换到 `1.31.2` | | TongsuoSSL | `8.4.0` | `8.3.3` | 当前可见稳定标签中 `8.4.0` 较新,适合作为国密、TLS 1.3 SM 套件和后续 SDF 适配基线 | 需要实测与 Nginx SSL 模块、端口融合、SDF 动态库加载的兼容性 | 推荐组合: - 首选组合:`Nginx 1.30.3 + TongsuoSSL 8.4.0`。 - 保守组合:`Nginx 1.30.3 + TongsuoSSL 8.3.3`,用于 `8.4.0` 与 SDF 或端口融合存在兼容问题时回退。 - 验证组合:`Nginx 1.31.2 + TongsuoSSL 8.4.0`,仅建议在需要 Nginx 主线能力时进入兼容性测试。 版本锁定原则: - 研发、测试和交付环境必须固定具体 tag 或源码提交号,不使用浮动分支。 - 编译产物需要记录 Nginx 版本、TongsuoSSL 版本、编译参数、SDF 动态库版本和操作系统版本。 - 升级任一组件时,需要重新执行国密握手、国际 TLS 握手、端口融合、SDF 回退和反向代理回归测试。 ### 10.2 开发工作量预估 以下预估按 2 名后端或基础设施开发人员投入计算,默认已有可用的国密证书、国际证书、测试客户端和海光 CCP SDF 测试环境。如果 SDF 设备、证书或客户端环境需要额外准备,工期需要顺延。 | 阶段 | 工作内容 | 预估人日 | 主要产出 | | --- | --- | --- | --- | | 方案细化 | 明确协议范围、密码套件、端口融合策略、SDF 回退策略和配置格式 | 2-3 | 详细设计、配置样例、测试清单 | | 构建集成 | 编译 Nginx 与 TongsuoSSL,固化构建脚本和版本信息 | 3-5 | 可重复构建脚本、二进制包、版本说明 | | 国密 TLS 接入 | 配置 GMTLS 1.1、TLS 1.3 SM 套件、国密双证书和基础反向代理 | 4-6 | 国密入口、证书配置、代理配置 | | 端口融合 | 同端口支持国密和国际套件,完成证书选择、套件优先级和日志字段 | 5-8 | 融合入口配置、协商日志、兼容性说明 | | SDF 适配 | 外置加载海光 CCP SDF 动态库,完成初始化、密钥索引检查、私钥运算调用和回退 | 8-12 | SDF 配置、适配代码或补丁、回退逻辑 | | 日志监控 | 增加协议类型、密码套件、SDF 状态、回退原因和上游状态观测 | 3-5 | 日志格式、指标清单、告警建议 | | 打包部署 | 启停脚本、配置模板、证书目录、日志目录和部署说明 | 3-4 | 部署包、目录规范、运维说明 | | 开发自测 | 开发侧握手、代理、reload、异常回退和基础性能自测 | 4-6 | 自测记录、问题修复 | 开发合计: - 不含 SDF:约 `24-37` 人日,2 人并行约 `3-4` 周。 - 含 SDF:约 `32-49` 人日,2 人并行约 `4-6` 周。 ### 10.3 测试工作量预估 以下预估按 1-2 名测试人员投入计算,包含功能、兼容性、异常、稳定性和基础性能测试。 | 测试类型 | 测试内容 | 预估人日 | 验证重点 | | --- | --- | --- | --- | | 构建验证 | 版本号、编译参数、依赖库路径、启动和 reload | 1-2 | 产物可重复、配置检查通过 | | 国密功能测试 | GMTLS 1.1、TLS 1.3 SM 套件、国密双证书、单向和双向认证 | 4-6 | 握手成功、证书校验、套件正确 | | 国际 TLS 测试 | RSA、ECDSA、标准 TLS 1.2 和 TLS 1.3 客户端接入 | 2-4 | 国际客户端兼容性 | | 端口融合测试 | 同端口国密客户端和国际客户端混合接入 | 5-8 | 协商正确、互不影响、日志可区分 | | SDF 功能测试 | 动态库加载、设备打开、密钥索引命中、私钥运算 | 5-8 | SDF 路径可用、性能和错误处理正常 | | SDF 回退测试 | 未生成密钥、索引不存在、动态库缺失、设备不可用、外部私钥缺失 | 4-6 | 按规则回退或失败,日志清晰 | | 代理功能测试 | 路由、Header 透传、负载均衡、超时、重试和上游故障 | 3-5 | 代理行为符合配置 | | 安全测试 | 弱套件禁用、证书过期、错误证书、客户端证书异常 | 3-5 | 不接受非法连接,审计可追踪 | | 稳定性测试 | 长连接、并发连接、reload、日志轮转和异常恢复 | 5-8 | 长时间运行无明显异常 | | 基础性能测试 | 握手吞吐、请求吞吐、SDF 与外部私钥性能对比 | 4-6 | 形成容量基线 | 测试合计: - 不含 SDF:约 `27-44` 人日,1-2 人约 `3-5` 周。 - 含 SDF:约 `36-58` 人日,1-2 人约 `4-7` 周。 ### 10.4 总体周期建议 | 范围 | 开发周期 | 测试周期 | 总周期建议 | | --- | --- | --- | --- | | 基础国密网关,不含端口融合和 SDF | 2-3 周 | 2-3 周 | 4-6 周 | | 含端口融合,不含 SDF | 3-4 周 | 3-5 周 | 6-8 周 | | 含端口融合和海光 CCP SDF | 4-6 周 | 4-7 周 | 8-12 周 | 主要风险: - 端口融合依赖客户端 `ClientHello` 能力,老旧国密客户端可能存在非标准行为。 - SDF 适配依赖海光 CCP 动态库、设备驱动、密钥生命周期和接口行为,建议尽早取得真实测试环境。 - TongsuoSSL 与 Nginx SSL 模块的接口兼容性需要以实际编译和握手测试为准。 - 国密证书签发、双证书匹配和 SDF 内部密钥公钥匹配会影响联调进度。 ## 11. 后续设计重点 后续进入实现前,需要进一步明确以下事项: - TongsuoSSL 与 Nginx 的具体版本组合。 - 国密证书格式、双证书配置方式和证书签发来源。 - 端口融合入口需要支持的客户端范围,以及国密与国际套件的优先级。 - 海光 CCP SDF 动态库版本、SDF 接口兼容性、密钥索引规划和回退策略。 - 后端协议是否必须加密,以及是否需要内侧双向认证。 - 日志字段、审计留存周期和监控接入方式。 - 部署环境是物理机、虚拟机、容器还是 Kubernetes。 ## 12. 成功标准 本方案对应的网关程序实现完成后,应满足以下标准: - 客户端可通过同一端口使用国密 TLS 或国际 TLS 与网关建立安全连接。 - 网关可基于域名、路径或 Header 将请求转发到指定后端。 - 证书、SDF、路由、上游和日志配置边界清晰,便于维护。 - TLS 握手、端口融合协商、SDF 状态、请求路由、上游代理、证书加载均可观测。 - 常见异常场景可通过日志和监控定位,包括证书错误、SDF 回退、握手失败、路由未命中、上游不可用。