在Apache环境下配置SM2+RSA双证书,核心思路是部署支持国密算法的Apache版本,并通过ALPN(应用层协议协商)扩展实现证书的自动切换。
由于官方Apache和OpenSSL默认不支持国密算法,需要重新编译安装。以下是基于主流方案(如沃通国密模块)的详细步骤,供你参考。
一、准备工作
在开始配置前,请确保你已具备以下条件:
证书文件:已获取由权威CA签发的RSA证书和SM2双证书(包含签名证书、加密证书及对应的私钥)。
服务器环境:拥有Linux服务器的`root`权限,并已确保域名解析指向服务器。
网络环境:服务器防火墙已开放`443`端口。
步骤一:安装国密版Apache
你需要从源码编译安装一个支持国密算法的Apache。以下以沃通(Wosign)国密模块为例。
1. 安装编译依赖
```bash
yum install -y gcc gcc-c++ make pcre-devel expat-devel apr apr-util bison bison-devel flex flex-devel
```
2. 编译安装国密版OpenSSL (GMSSL)
从国密SSL官方或相关服务商(如沃通)获取国密版OpenSSL源码包。
```bash
# 假设已下载 gmssl_openssl_1.1_b2024_x64_1.tar.gz 到/root目录
tar xzfm /root/gmssl_openssl_1.1_b2024_x64_1.tar.gz -C /usr/local
# 此时 /usr/local/gmssl 即为国密版openssl目录
```
3. 编译安装支持国密的Apache
下载Apache源码包(如`httpd-2.4.46.tar.gz`),在配置时指定使用国密版OpenSSL。
```bash
tar zxfm httpd-2.4.46.tar.gz
cd httpd-2.4.46
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork \
--with-ssl=/usr/local/gmssl \ # 关键:指定国密OpenSSL路径
--with-zlib \
LDFLAGS=-lm
make && make install
```
步骤二:配置双证书
在Apache的SSL配置文件中(通常是`/usr/local/httpd/conf/extra/httpd-ssl.conf`或`conf.d/ssl.conf`),你需要同时配置RSA证书和SM2双证书。
1. 配置RSA证书
使用标准的Apache SSL指令。
```apache
SSLCertificateFile "/path/to/your/rsa_cert.pem"
SSLCertificateKeyFile "/path/to/your/rsa_private.key"
SSLCertificateChainFile "/path/to/your/rsa_chain.crt" # 如果CA提供了链证书
```
2. 配置SM2双证书
国密SM2证书体系包含签名证书和加密证书,需使用特定指令(如沃通模块的`WotrusSSLCertificateFile`等)分别指定。
```apache
# SM2签名证书及私钥
WotrusSSLCertificateFile "/path/to/your/domain_sm2_sign.pem"
WotrusSSLCertificateKeyFile "/path/to/your/domain_sm2_sign.key"
# SM2加密证书及私钥
WotrusSSLCertificateEncFile "/path/to/your/domain_sm2_enc.pem"
WotrusSSLCertificateEncKeyFile "/path/to/your/domain_sm2_enc.key"
```
注意:具体的SM2证书配置指令可能因你使用的国密模块而异,请以你所选模块的官方文档为准。
步骤三:启用ALPN协议协商
为实现客户端自动选择证书,需要在Apache配置中启用ALPN扩展。
```apache
# 在SSL VirtualHost配置中启用ALPN
Protocols http/1.1 sm2-http/1.1
```
此配置告知支持国密的客户端(如密信浏览器),在TLS握手时可通过ALPN声明支持`sm2-http/1.1`协议,服务器便会自动匹配并返回SM2证书。
步骤四:验证配置
1. 检查配置文件语法:
```bash
/usr/local/httpd/bin/apachectl -t
```
2. 重启Apache服务:
```bash
/usr/local/httpd/bin/apachectl restart
```
3. 测试访问:
使用Chrome等主流浏览器访问,应能正常加载RSA证书。
使用密信、红莲花等国密浏览器**访问,应能正常加载SM2证书。
二、重要提醒
浏览器兼容性:SM2证书目前仅被少数国产浏览器原生支持。双证书方案正是为了解决此问题,让普通浏览器使用RSA证书,国密浏览器使用SM2证书。
模块差异:不同厂商(如沃通、零信等)提供的国密Apache模块,其配置指令和细节可能有所不同。请务必以你实际使用的模块官方文档为准。
排查思路:若配置后访问异常,请重点检查Apache错误日志(`error_log`),确认国密模块是否已正确加载,以及证书文件路径和权限是否正确。