Apache主线不支持SSLFIPS指令,它仅存在于国密定制版(如GMSSL集成版)中,用于强制启用SM2/SM3/SM4算法;标准版需通过SSLProtocol和SSLCipherSuite组合配置实现合规。

Apache 本身不直接支持国密(SM2/SM3/SM4)或 FIPS 140-2/3 合规模式的原生指令,SSLFIPS 指令在标准 Apache + OpenSSL 组合中并不存在。官方 mod_ssl 文档明确列出的指令中没有 SSLFIPS —— 它是某些定制化国密分支(如基于 GMSSL 的 Apache 衍生版)或特定合规中间件中引入的扩展参数,并非 Apache 主线或上游 OpenSSL 的标准配置项。
先确认你是否真需要“SSLFIPS”这个指令
很多用户搜索“SSLFIPS”,实际目标是:
– 让 Apache 满足等保三级、密码应用安全性评估(密评)要求
– 使用国密算法(SM2证书、SM4加密套件)提供 HTTPS 服务
– 禁用非国密/非合规算法(如 RSA、SHA1、TLS 1.0)
但这些目标不依赖 SSLFIPS 指令实现,而是通过组合配置达成:
- 使用国密版 OpenSSL(如 GMSSL 1.1.x)替代系统 OpenSSL
- 编译 Apache 时链接该国密 OpenSSL 库
- 在 httpd.conf 或虚拟主机中用 SSLProtocol 和 SSLCipherSuite 显式限定仅启用 SM2/SM4/SM3 相关 TLS 协议与套件(例如
TLSv1.2+ECDHE-SM2-SM4-SM3) - 加载国密证书链(
SSLCertificateFile指向 SM2 证书,SSLCertificateKeyFile指向 SM2 私钥)
若你使用的是国密增强版 Apache(如 Wotrus/GMSSL 集成包)
部分国产化发行版或厂商定制 Apache 会添加类似 SSLFIPS on 的开关,用于强制进入“国密合规模式”。此时需注意:
- 该指令通常只在启用国密 OpenSSL 后才被识别,否则 Apache 启动会报错 “Unknown directive 'SSLFIPS'”
- 开启后,系统将自动禁用所有非国密算法(RSA、AES、SHA256 等),仅允许 SM2/SM3/SM4 及其组合套件
- 必须配合国密证书、国密私钥、国密 CA 信任链(
SSLCACertificateFile指向 SM2 根/中间证书) - 典型配置片段示例(仅适用于已集成国密模块的 Apache):
SSLEngine on<br>SSLFIPS on<br>SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2<br>SSLCipherSuite ECDHE-SM2-SM4-SM3:SM2-SM4-SM3<br>SSLCertificateFile /etc/httpd/ssl/cloud.tencent.com_sm2.crt<br>SSLCertificateKeyFile /etc/httpd/ssl/cloud.tencent.com_sm2.key<br>SSLCACertificateFile /etc/httpd/ssl/gmca_sm2.crt
绕过“SSLFIPS”也能达成同等合规效果
即使你的 Apache 版本不识别该指令,只要完成以下动作,仍可满足密评对传输层密码合规的核心要求:
-
彻底禁用非国密协议:用
SSLProtocol -all +TLSv1.2关闭 TLS 1.3(因当前国密标准尚未定义 TLS 1.3 国密套件)及更低版本 -
精准控制加密套件:通过
SSLCipherSuite仅保留含SM2、SM4、SM3字样的套件(需 GMSSL 编译支持),并用!排除所有 RSA/AES/SHA 类套件 -
验证证书签名算法:确保证书签发使用 SM3 with SM2,可用
openssl x509 -in server.crt -text -noout | grep "Signature Algorithm"检查输出是否为sm2sign-with-sm3 -
关闭不安全特性:设置
SSLHonorCipherOrder on、SSLCompression off、SSLSessionTickets off
最后提醒几个实战易错点
部署中常见疏漏直接影响密评结果:
- 未替换系统默认 OpenSSL,仍用 yum/apt 安装的 openssl-libs —— 导致国密指令无效或启动失败
- 证书链文件混用:把 RSA 根证书和 SM2 中间证书拼在一起,造成握手失败
- 未开放 443 端口或防火墙拦截 TLS 1.2 握手包(特别是 ClientHello 中的国密扩展)
- 浏览器未安装国密根证书或未启用国密支持(如 360 安全浏览器国密版、红莲花浏览器)
- 未在虚拟主机配置中显式启用
SSLEngine on,导致 HTTPS 不生效


















