前置准备
操作前请确认已满足以下条件,避免配置过程卡壳:
- 已申请有效SSL证书(含证书文件、私钥文件、证书链文件),证书文件权限设为644,私钥文件权限设为600
- 明确业务场景:高安全场景默认兼容安卓6+、iOS10+、Edge/Chrome/Firefox现代浏览器;兼容场景可覆盖安卓4.4+、iOS9+、IE11
- 所有配置修改前请备份原有配置文件,操作后先做语法校验再重启服务,避免线上业务中断
Nginx服务器配置步骤
1. 先确认Nginx已编译SSL模块,执行命令:
```shell
nginx -V
```
返回结果中包含--with-http_ssl_module即为符合要求,若缺失需重新编译Nginx添加该模块。
2. 编辑站点配置文件,默认路径为/etc/nginx/conf.d/你的站点配置.conf,在443端口的server块中添加以下配置,可根据场景切换加密套件:
```nginx
server {
listen 443 ssl http2;
server_name 你的业务域名;
ssl_certificate /path/to/你的证书.pem;
ssl_certificate_key /path/to/你的私钥.key;
协议配置:等保2.0要求仅开启TLS1.2、TLS1.3,禁用所有低版本协议
ssl_protocols TLSv1.2 TLSv1.3;
高安全场景加密套件(无需兼容老终端时使用)
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
兼容场景加密套件(需覆盖老终端时取消注释,注释上一行套件配置)
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:AES128-SHA;
ssl_prefer_server_ciphers on;
会话缓存优化,降低握手开销
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
可选:开启HSTS提升安全评分,需确认所有子域名都支持HTTPS再配置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
原有站点业务配置保持不变
location / {
root /path/to/站点根目录;
index index.html index.htm;
}
}
```
3. 执行配置校验,确认无错误后重载服务:
```shell
nginx -t
返回test is successful后执行重载
systemctl reload nginx
```
Apache服务器配置步骤
1. 先开启SSL模块,Debian/Ubuntu执行:
```shell
a2enmod ssl headers
systemctl restart apache2
```

CentOS/Rocky Linux执行:
```shell
yum install -y mod_ssl
systemctl restart httpd
```
2. 编辑SSL站点配置文件,默认路径为/etc/apache2/sites-available/你的站点-ssl.conf(Debian)或/etc/httpd/conf.d/ssl.conf(CentOS),添加以下配置:
```apache
ServerName 你的业务域名
DocumentRoot /path/to/站点根目录
SSLEngine on
SSLCertificateFile /path/to/你的证书.pem
SSLCertificateKeyFile /path/to/你的私钥.key
SSLCertificateChainFile /path/to/你的证书链.pem
协议配置
SSLProtocol TLSv1.2 TLSv1.3
高安全场景加密套件
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
兼容场景加密套件
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:AES128-SHA
SSLHonorCipherOrder on
SSLSessionCache shmcb:/run/apache2/sslcache(512000)
SSLSessionTimeout 300
可选HSTS配置
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
原有业务配置保持不变
AllowOverride All
Require all granted
```
3. 校验配置后重载服务:
```shell
Debian/Ubuntu
apache2ctl configtest
systemctl reload apache2
CentOS/Rocky
httpd -t
systemctl reload httpd
```
Tomcat服务器配置步骤
以下配置适用于Tomcat 8.5及以上版本,编辑conf/server.xml文件,根据运行模式选择对应配置:
NIO模式(Tomcat默认模式)
```xml
```
APR模式(性能优化模式)
```xml
```
配置完成后重启Tomcat生效:
```shell
cd tomcat安装目录
./bin/shutdown.sh && ./bin/startup.sh
```
配置生效验证方法
1. 本地命令行验证:
```shell
验证TLS1.3是否正常支持,返回握手成功即为正常
openssl s_client -connect 你的域名:443 -tls1_3
验证低版本协议是否被禁用,返回握手失败即为配置正确
openssl s_client -connect 你的域名:443 -tls1
查看当前生效的加密套件,确认与配置一致
openssl s_client -connect 你的域名:443 < /dev/null | grep "Cipher :"
```
2. 在线安全评分验证:打开SSL Labs测试工具,输入域名即可获得安全评分,A+为最优配置。
常见问题排查
- 服务启动失败:优先查看服务错误日志,Nginx错误日志默认路径为
/var/log/nginx/error.log,Apache为/var/log/apache2/error.log,Tomcat为logs/catalina.out,大概率为证书路径错误、权限错误或配置语法错误
- 老终端访问失败:切换为兼容版加密套件,确认终端是否支持TLS1.2协议,低于安卓4.4、iOS9的设备本身不支持TLS1.2,无法兼容
- 安全评分低于A:检查是否遗漏HSTS配置、是否存在弱套件未禁用、证书链是否配置完整