apache本身不支持国密算法,必须替换底层openssl为gmssl等国密增强版,重新编译并配置国密套件与sm2证书,仅修改sslcertificatefile无效。

Apache 本身不支持国密算法,不能仅靠修改 SSLCertificateFile 或简单调整 TLS 参数就启用 SM2/SM3/SM4。真正可行的路径是:替换底层 OpenSSL 为国密增强版(如 GMSSL),重新编译 Apache 并正确配置国密套件与证书。
必须替换 OpenSSL 为国密增强版
标准 OpenSSL(包括 1.1.1 及更早版本)完全不识别 SM2 公钥、SM3 签名或 SM4 加密。Apache 的 mod_ssl 模块直接调用 OpenSSL 的 API,因此:
- 需下载并安装 GMSSL 或其他国密分支(如中科院、CFCA 维护的 OpenSSL 国密版);
- 编译 Apache 时,
--with-ssl=/path/to/gmssl必须指向该国密版安装路径; - 确认
httpd -V | grep SSL输出中 SSL 路径为 GMSSL 目录,且ldd /usr/local/httpd/modules/mod_ssl.so | grep ssl链接到libssl.so(GMSSL 提供)而非系统默认版本。
证书仍用 SSLCertificateFile,但内容必须是国密格式
SSLCertificateFile 和 SSLCertificateKeyFile 指令本身无需改动,它们依然指向 PEM 文件。关键在于文件内容:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 私钥必须是 SM2 密钥(可用
gmssl genpkey -algorithm sm2 -out server.key生成); - 证书必须由支持国密的 CA 签发,含 SM2 公钥 + SM3 with SM2 签名(即
server.crt); - 若使用双证书体系(签名证书 + 加密证书),需按服务器支持方式合并或分置——GMSSL 支持单证书模式,多数政务/金融场景部署即用一张 SM2 证书。
显式启用国密 TLS 协议与密码套件
仅换 OpenSSL 不够,Apache 配置中必须禁用非国密协议,并限定国密套件:
-
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3(国密通常基于 TLS 1.2 扩展); -
SSLCipherSuite ECDHE-SM2-SM4-SM3:SM2-SM4-SM3(具体名称依所用 GMSSL 版本而定,可通过gmssl ciphers -s查看支持列表); -
SSLStrictSNIVHostCheck off(部分国密实现对 SNI 处理较敏感,测试阶段建议关闭); - 确保
SSLEngine on、SSLCertificateFile、SSLCertificateKeyFile三者同时存在且路径正确。
验证是否生效
启动后,用支持国密的客户端(如密信浏览器、360 国密版、鸿蒙 Network Kit)访问,或通过命令行验证:
-
gmssl s_client -connect yourdomain.com:443 -cipher SM2-SM4-SM3—— 应成功握手并显示 “Verify return code: 0 (ok)”; - 抓包分析 TLS 握手数据,确认
Cipher Suite字段为国密套件(如0x00,0x9c对应SM2-SM4-SM3); - 避免用 Chrome/Firefox 直接测——它们不支持国密 TLS,会连接失败或降级到普通 HTTPS。









