Apache本身不支持国密TLS协议,必须替换OpenSSL为GMSSL等国密增强版,重新编译并链接mod_ssl,再配置SM2证书、启用ECDHE-SM2-SM4-SM3等国密套件,否则配置无效。
apache 本身不支持国密 tls 协议,必须通过替换底层 openssl 为国密增强版(如 gmssl 或国密分支 openssl),并配合特定配置才能启用 sm2/sm3/sm4 套件。单纯修改 sslcertificatefile 或调整常规 tls 参数无法生效。
替换并链接国密版 OpenSSL
这是前提,否则所有后续配置都会被忽略或报错:
- 下载编译 GMSSL(如
gmssl_openssl_1.1_b2024_x64.tar.gz)并安装到固定路径(如/usr/local/gmssl); - 重新编译 Apache 时,显式指定
--with-ssl=/usr/local/gmssl,确保mod_ssl动态链接该版本; - 验证是否生效:运行
/usr/local/httpd/bin/httpd -V | grep -i ssl,确认输出中包含SSL version: OpenSSL 1.1.1x-gm类似字样; - 检查
libssl.so实际依赖:ldd /usr/local/httpd/modules/mod_ssl.so | grep ssl,应指向/usr/local/gmssl/lib下的库文件。
加载 SM2 证书与密钥
证书格式仍是 PEM,但内容必须为国密标准:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 使用
gmssl req -sm2 -new -keyout server.key -out server.csr生成 SM2 密钥和 CSR; - 由支持国密的 CA(如 CFCA、Wotrus、阿里云国密 CA)签发,得到
server.crt(含 SM2 公钥 + SM3 with SM2 签名); - 在 Apache 配置中照常使用:
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key
注意:不能混用 RSA 密钥配 SM2 证书,也不能用普通 OpenSSL 生成的密钥。
启用国密 TLS 协议与密码套件
仅靠证书加载还不够,必须显式开启国密协商能力:
- 禁用不兼容旧协议,保留 TLSv1.2+(国密扩展通常基于此):
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 - 限定国密专用套件(名称依所用 GMSSL 分支略有差异):
SSLCipherSuite ECDHE-SM2-SM4-SM3:SM2-SM4-SM3
常见可选值包括EECDH-SM2-SM4-SM3、SM2-SM4-SM3,需对照你所用 GMSSL 的gmssl ciphers命令输出确认; - 若测试阶段遇到 SNI 握手失败,可临时关闭严格检查:
SSLStrictSNIVHostCheck off(上线前建议恢复默认)。
双证书兼容性部署(推荐生产环境)
为兼顾国密浏览器(如 360 安全浏览器)和国际浏览器(Chrome/Firefox),建议采用 ALPN 协商双证书方案:
- 同一
VirtualHost:443中同时配置两套证书:
SSLCertificateFile /path/to/rsa.crt
SSLCertificateKeyFile /path/to/rsa.key
SSLCertificateFile /path/to/sm2.crt
SSLCertificateKeyFile /path/to/sm2.key - 启用 ALPN,并在配置中添加:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-SM2-SM4-SM3
这样客户端可根据 ALPN 扩展(如sm2-http/1.1或http/1.1)自动选择对应证书; - 注意:该方式要求 Apache ≥ 2.4.46 且已启用
mod_ssl和mod_http2(用于 ALPN 支持)。

















