SSLFipsMode不能用于国密迁移,因其仅支持FIPS 140-2认证的国际算法(AES/SHA256/RSA),完全不识别SM2/SM3/SM4等国密算法,且启用后会拒绝加载含国密的OpenSSL分支。

Apache 官方版本不支持 SSLFipsMode 指令启用国密算法,该指令本身是 OpenSSL FIPS 140-2 模块的专有配置项,仅适用于启用 FIPS 模式的国际标准加密(如 AES、SHA256、RSA),**完全不识别 SM2/SM3/SM4 等国密算法**。因此,试图通过设置 SSLFipsMode on 来实现国密迁移,技术上不可行,也不符合等保三级对“采用国家密码管理局认证算法”的明确要求。
为什么 SSLFipsMode 不能用于国密迁移
SSLFipsMode 是 Apache + OpenSSL 联合使用时,强制启用 OpenSSL 的 FIPS 验证模块(fips.so)的开关,其作用范围严格限定在 FIPS 140-2 认证的国际密码算法集合内。而国密算法(SM2/SM3/SM4)属于我国自主设计、独立认证的商用密码体系,与 FIPS 模块无任何兼容性。启用该指令后,Apache 甚至会拒绝加载含国密算法的自定义 OpenSSL 分支。
等保三级国密HTTPS的正确实施路径
要真正满足等保三级“通信传输”条款中“采用国家认可的密码算法”的要求,必须绕过标准 OpenSSL,改用支持国密的密码库,并重新编译 Apache:
- 选用经国家密码管理局认证的支持国密的底层密码库,例如:GMSSL OpenSSL 国密版 或 铜锁(Tongsuo)
- 下载对应版本的 Apache 源码(推荐 2.4.46 或 2.4.62),在
./configure阶段显式指定国密库路径:--with-ssl=/usr/local/gmssl(若使用 GMSSL)或--with-ssl=/opt/tongsuo(若使用铜锁) - 确保编译时链接的是静态库(
libssl.a和libcrypto.a),避免运行时动态加载失败 - 配置文件中不再使用
SSLProtocol管理协议,而是启用国密专属协议标识,例如:SSLEngine on<br>SSLCertificateFile /path/to/sm2_cert.pem<br>SSLCertificateKeyFile /path/to/sm2_key.pem<br>SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3<br>SSLCipherSuite ECDHE-SM2-SM4-GCM-SM3:ECDHE-RSA-AES256-GCM-SHA384
生产环境必须采用双证书兼容方案
纯国密证书只能被红莲花、密信、360国密版等少数浏览器识别,无法覆盖 Chrome、Firefox、Safari 等主流客户端。等保三级强调“可用性”与“安全性”并重,因此必须部署 SM2/RSA 双证书:
- 将 SM2 证书链与 RSA 证书链分别配置为两个独立的 VirtualHost,监听同一 IP 的 443 端口(需 Apache ≥ 2.4.8 支持 SNI)
- 或使用支持双算法的混合证书(如 Wotrus 提供的国密+RSA 合一证书),由服务端根据客户端 ClientHello 中的 Supported Groups 扩展自动协商算法套件
- 务必验证双路 HTTPS 均可正常握手,且 TLS 1.2+ 握手过程中能正确协商 SM2 密钥交换或 RSA 密钥交换
配套加固不可遗漏
仅替换算法不等于通过等保测评,还需同步落实其他通信传输控制项:
- HTTP 响应头强制添加:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - 禁用不安全重定向:所有 HTTP 请求(80 端口)必须 301 跳转至 HTTPS,且跳转目标不含明文参数
- 日志中记录 TLS 协议版本与协商密码套件,用于审计溯源:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{SSL_PROTOCOL}x %{SSL_CIPHER}x" combined_ssl - 私钥文件权限严格设为
600,证书链文件设为644,且存放路径不在 Web 可访问目录下


















