在数字经济加速发展的今天,网络通信安全已成为关键基础设施的核心保障。我国自主研发的国密算法(如 SM2、SM3、SM4 等)作为国家密码标准,在金融、政务、能源等关键领域的合规要求日益明确。然而,传统 Web 服务器(如 Nginx)主要支持国际通用加密算法(如 RSA、ECC),难以直接满足国密合规需求。在此背景下,openHiTLS 社区推出的 “nginx-with-openHiTLS” 项目应运而生,通过集成自主创新的 openHiTLS 密码库,为 Nginx 赋予国密算法与 TLCP 协议支持,成为构建安全可靠加密体系的重要技术方案。
国密改造的核心诉求:
国密算法(国家商用密码算法)是我国自主设计的加密标准,包括 SM2(非对称加密)、SM3(哈希算法)、SM4(对称加密)等,旨在保障国家信息安全与数据主权。随着《网络安全法》《密码法》等法规的实施,关键行业对 “国密合规” 的要求已从 “可选” 变为 “强制”。
传统 Nginx 作为全球主流的 Web 服务器,虽支持 TLS 1.2/1.3 等国际协议,但缺乏对国密算法及 TLCP(传输层密码协议,我国基于国密算法的 TLS 协议标准)的原生支持。若要在关键业务中使用 Nginx,必须通过技术改造实现国密协议与算法的集成 —— 这正是 openHiTLS 社区的核心目标:基于 Nginx 稳定版本(1.24),通过集成 openHiTLS 密码库,让 Web 服务无缝支持国密标准,同时保留 Nginx 原有的高性能与稳定性。
nginx-with-openHiTLS:技术特性解析
nginx-with-openHiTLS 并非对 Nginx 的重构,而是在其基础上进行模块化扩展,核心特性包括:
-
原生支持 TLCP 协议
作为国密标准的传输层协议,TLCP 可基于 SM2/SM3/SM4 算法实现端到端加密,解决了传统 TLS 协议依赖国际算法的合规性问题。 -
兼容 TLS 1.2 协议
保留对国际通用协议的支持,满足混合加密场景需求(如同时服务国内合规用户与国际用户)。 -
完善的客户端证书验证机制
支持基于国密证书的双向认证,可通过配置 CA 证书链与验证深度,强化对客户端身份的合法性校验,适用于金融交易、政务服务等高安全场景。
部署指南:从编译到运行的全流程
nginx-with-openHiTLS 的部署需依赖 openHiTLS 密码库的编译与集成,以下为详细步骤(基于 Linux 系统):
1. 环境准备
确保系统满足基础依赖:
- 操作系统:Linux(如 CentOS、Ubuntu)
- 编译工具:GCC 编译器、Make 工具
- 依赖库:PCRE(正则表达式支持)
2. 编译 openHiTLS 密码库
bash
# 1. 克隆代码仓库
git clone https://gitcode.com/openHiTLS/openhitls.git
# 2. 进入目录并创建构建文件夹
cd openHiTLS && mkdir -p ./build && cd ./build
# 3. 生成构建配置(根据架构选择)
# 3.1 通用64位构建
python3 ../configure.py --enable hitls_bsl hitls_crypto hitls_tls hitls_pki hitls_auth --lib_type static --bits=64 --system=linux
# 3.2 x86_64架构优化构建
python3 ../configure.py --enable hitls_bsl hitls_crypto hitls_tls hitls_pki hitls_auth --lib_type static --bits=64 --system=linux --asm_type x8664
# 3.3 armv8架构优化构建
python3 ../configure.py --enable hitls_bsl hitls_crypto hitls_tls hitls_pki hitls_auth --lib_type static --bits=64 --system=linux --asm_type armv8
# 4. 生成构建脚本并编译安装
cmake ..
make && make install
3. 编译并安装 nginx-with-openHiTLS
bash
# 1. 配置Nginx编译选项(指定openHiTLS路径)
cp auto/configure .
./configure --prefix=/path/to/install \
--with-cc-opt="-std=c99" \
--with-http_ssl_module \
--with-openhitls=/path/to/openhitls # 替换为openHiTLS实际安装路径
# 2. 编译并安装
make && make install
4. 国密协议配置示例
部署完成后,需通过 Nginx 配置文件启用 TLCP 协议与国密证书,典型配置如下:
nginx
server {
listen 443 ssl;
server_name example.com; # 替换为实际域名
# 启用TLCP协议(国密传输层协议)
ssl_protocols TLCP;
# 国密证书配置(需同时指定签名与加密证书)
ssl_certificate /path/to/sign.crt; # 签名证书(SM2)
ssl_certificate /path/to/enc.crt; # 加密证书(SM2)
ssl_certificate_key /path/to/sign.key; # 签名私钥
ssl_certificate_key /path/to/enc.key; # 加密私钥
# 客户端证书验证(双向认证场景)
ssl_verify_client on; # 开启客户端验证
ssl_client_certificate /path/to/ca-chain.crt; # 客户端CA证书链
ssl_verify_depth 3; # 验证深度(最多追溯3级CA)
}
5. 启动与验证
bash
# 进入安装目录
cd /path/to/nginx
# 指定配置文件启动
./sbin/nginx -c ./conf/nginx.conf
# 验证启动状态(查看错误日志排查问题)
tail -f /path/to/nginx/error.log
关键注意事项与故障排除
-
证书格式与权限
国密证书需使用 PEM 格式,且证书 / 私钥文件权限需限制为600
(仅所有者可读写),避免权限泄露导致安全风险。 -
TLCP 协议的特殊要求
启用 TLCP 时必须同时配置签名证书与加密证书(国密算法设计要求),缺少任一证书会导致协议握手失败。 -
常见错误排查
- 证书格式错误:通过
openssl x509 -in cert.crt -text
验证 PEM 格式合法性; - 依赖缺失:编译失败时检查 GCC、PCRE 等依赖是否安装完整;
- 协议不兼容:客户端需支持 TLCP 协议才能建立连接,可通过
openssl s_client -connect example.com:443 -tls1_2
测试基础连通性。
- 证书格式错误:通过
开源实践:nginx-with-openHiTLS开源代码实现
代码下载链接:GitCode - 全球开发者的开源社区,开源代码托管平台
【openHiTLS密码开源社区】
openHiTLS旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
项目地址:https://gitcode.com/openHiTLS/openhitls