配置国密Nginx多域名证书,核心在于使用支持国密算法的Nginx版本(如Tongsuo版),并正确配置多组证书。以下是完整的配置方法与关键注意事项。
一、前提条件与准备工作
1. 获取国密版Nginx:官方Nginx不支持国密,必须使用Tongsuo版Nginx或GmSSL版Nginx。
2. 申请并准备证书文件:
确保已成功申请国密SSL证书(SM2算法)。
如果采用SM2+RSA双证书方案(推荐),还需准备RSA证书。下载证书时选择“Nginx”类型。
国密证书通常包括签名证书(server.crt)和加密证书(encrypt.crt)及对应的私钥。
3. 确认域名与证书匹配:证书绑定的域名必须与服务器上配置的域名严格对应。多域名证书可保护多个精确域名或通配符域名。
4. 开放端口:确保服务器防火墙和安全组已开放443端口。
二、编译国密版Nginx
通过源码编译,将国密算法库(如Tongsuo)静态编译进Nginx。
bash
示例:配置编译选项(以GmSSL为例)
./configure \
--with-http_ssl_module \
--with-openssl="/usr/local/gmssl" \
--with-cc-opt="-I/usr/local/gmssl/include" \
--with-ld-opt="-lm"
make && make install
三 、配置多域名证书
在`nginx.conf`中,为每个域名配置独立的`server`块,并在其中指定对应的证书文件。
示例:配置单域名(双证书)
nginx
server {
listen 443 ssl;
server_name example.com; # 替换为你的域名
1. 配置国密双证书 (签名证书+加密证书)
ssl_certificate /path/to/example.com_server.crt; # 签名证书
ssl_certificate_key /path/to/example.com_server.key; # 签名私钥
ssl_certificate /path/to/example.com_encrypt.crt; # 加密证书
ssl_certificate_key /path/to/example.com_encrypt.key; # 加密私钥
2. 配置国密算法套件 (以Tongsuo为例)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECC-SM4-CBC-SM3:ECDHE-SM4-CBC-SM3:RSA-SM4-CBC-SM3;
ssl_ecdh_curve sm2p256v1;
... 其他配置
}
示例:配置多域名
多个域名,每个域名单独一个`server`块,结构完全一致。
nginx
域名1
server {
listen 443 ssl;
server_name example1.com;
ssl_certificate /path/to/example1.com_server.crt;
ssl_certificate_key /path/to/example1.com_server.key;
ssl_certificate /path/to/example1.com_encrypt.crt;
ssl_certificate_key /path/to/example1.com_encrypt.key;
... 其他配置
}
域名2
server {
listen 443 ssl;
server_name example2.com;
ssl_certificate /path/to/example2.com_server.crt;
ssl_certificate_key /path/to/example2.com_server.key;
ssl_certificate /path/to/example2.com_encrypt.crt;
ssl_certificate_key /path/to/example2.com_encrypt.key;
... 其他配置
}
重要提示:如果采用SM2+RSA双证书方案,需要在`server`块中同时配置SM2和RSA证书。
三、注意事项与最佳实践
1. 私钥权限安全:将私钥文件(.key)权限设置为`600`(仅所有者可读写),并确保属主为Nginx进程用户(如`nginx`或`www-data`)。
2. 证书链完整性:确保证书文件包含完整的证书链(服务器证书+中间证书)。若提供的是分离的证书链文件,需将它们合并到一个文件中。
3. HTTP重定向:建议在每个`server`块中增加HTTP到HTTPS的强制跳转。
nginx
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
4. 测试与验证:修改配置后,务必用`nginx -t`测试语法,无误后重载Nginx。使用国密浏览器(如红莲花、360安全浏览器国密版)访问测试,并检查Nginx错误日志排查问题。
5. 双证书部署(推荐):为兼顾浏览器兼容性,强烈建议部署SM2+RSA双证书。Nginx可同时配置两套证书,让国密浏览器使用SM2证书,普通浏览器回退使用RSA证书。
五、验证与测试
部署完成后,通过以下方式验证:
浏览器测试:使用国密浏览器(如红莲花、360安全浏览器国密版)访问域名,应显示安全连接。
命令行测试:使用支持国密的OpenSSL工具(如Tongsuo版的`openssl`)测试握手。
bash
openssl s_client -connect example.com:443 -tls1_2 -cipher ECC-SM4-CBC-SM3
检查Nginx日志:查看错误日志`/var/log/nginx/error.log`,确认无SSL握手失败等异常。
总的来说,配置的核心是使用国密版Nginx、正确设置双证书以及严格管理私钥权限。