在Apache中配置国密证书,核心参数仍然是 `SSLCertificateFile`、`SSLCertificateKeyFile` 和 `SSLCertificateChainFile`,但它们生效的前提是Apache的底层SSL库(如OpenSSL)必须支持国密算法(SM2/SM3/SM4)。
下面为你详细解析这几个核心参数及其配置方法。
环境准备:国密支持是前提
标准Apache和OpenSSL不支持国密算法,因此配置前必须完成环境改造。
1. 替换OpenSSL为国密版:编译安装支持SM2/SM3/SM4的OpenSSL,如`GMSSL`。
2. 重新编译Apache:编译时需链接到新安装的国密版OpenSSL,并启用`mod_ssl`模块。
3. 开启443端口:确保服务器防火墙开放了HTTPS默认端口。
核心配置参数详解
国密证书的配置主要在`httpd-ssl.conf`或`ssl.conf`文件中进行。
`SSLCertificateFile`:指定服务器证书文件。这个文件包含了你的域名证书(终端实体证书)。国密证书通常是PEM格式,以`.crt`或`.pem`结尾。
示例:`SSLCertificateFile "/etc/httpd/ssl/your_domain_sm2.crt"`。
`SSLCertificateKeyFile`:指定服务器证书的私钥文件。这是与`SSLCertificateFile`中公钥配对的SM2私钥,必须妥善保管。
示例:`SSLCertificateKeyFile "/etc/httpd/ssl/your_domain_sm2.key"`。
`SSLCertificateChainFile`:指定证书链文件。用于补齐从你的服务器证书到根证书之间的中间证书,构建完整的信任链。重要提示:国密证书的根证书通常不在浏览器或操作系统的默认信任库中,因此正确配置此文件尤为重要。
示例:`SSLCertificateChainFile "/etc/httpd/ssl/ca_chain_sm2.crt"`。
国密双证书部署方案
为确保兼容性(普通浏览器用RSA,国密浏览器用SM2),常采用双证书方案。
方案:在同一个443端口上同时配置RSA和SM2两套证书。
实现:借助ALPN(应用层协议协商) 扩展。当国密浏览器(如密信、红莲花)请求时,声明支持 `sm2-http/1.1` 协议,Apache据此自动选择SM2证书。
限制:Apache原生不支持单`VirtualHost`内配置两套证书,通常需要借助**国密增强版Apache或代理方案实现。
配置示例与验证
一个标准的国密虚拟主机配置片段如下:
apache
<VirtualHost *:443>
ServerName www.yourdomain.com
DocumentRoot "/var/www/html"
# 国密证书配置
SSLEngine on
SSLCertificateFile "/etc/httpd/ssl/your_domain_sm2.crt"
SSLCertificateKeyFile "/etc/httpd/ssl/your_domain_sm2.key"
SSLCertificateChainFile "/etc/httpd/ssl/ca_chain_sm2.crt"
# 国密加密套件(需根据实际环境调整)
SSLCipherSuite "ECDHE-SM2-SM4-SM3:SM2-SM4-SM3"
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
</VirtualHost>
配置完成后,重启Apache使配置生效:
bash
sudo systemctl restart httpd
验证方法:
1. 国密浏览器:使用密信、红莲花等国密浏览器访问,查看地址栏是否显示安全锁标识。
2. 命令行工具:使用`gmssl s_client`命令测试国密连接。
3. 检查错误日志:若服务启动失败,务必检查Apache的错误日志(通常位于`/var/log/httpd/error_log`)进行排查。
注意事项
证书文件路径:确保配置文件中的路径绝对正确,且Apache进程有读取权限。
备份配置:任何修改前,请备份原配置文件。
私钥安全:私钥文件权限应设置为`600`,仅允许root用户读写。
总而言之,配置Apache国密证书的关键在于底层SSL库的国密改造,而`SSLCertificateFile`等参数本身用法不变。`SSLCertificateChainFile`对国密证书尤为重要。对于生产环境,建议采用双证书方案以确保最大兼容性。