把SSL证书装到Nginx和Apache上
证书申请下来了,接下来要装到服务器上。这篇文档主要讲Nginx和Apache两种Web服务器的配置方法,照着抄就行。
先看看下载的文件
从SSL免费网下载的是一个zip压缩包,解压后有两个文件:
- •域名.crt — 证书文件,里面包含域名证书和中间证书链
- •域名.key — 私钥文件
把这两个文件上传到服务器。建议放在专门的位置,比如:
- •Nginx:/etc/nginx/ssl/
- •Apache:/etc/apache2/ssl/(Ubuntu)或 /etc/httpd/ssl/(CentOS)
记得给私钥文件设置安全的权限:
chmod 600 /etc/nginx/ssl/你的域名.key
Nginx配置
1. 上传文件
mkdir -p /etc/nginx/ssl
把.crt和.key文件传到这个目录
2. 写配置
打开你的Nginx配置文件(一般在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/),加上HTTPS的server块:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
这几行优化SSL性能,建议加上
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
root /var/www/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
3. HTTP自动跳HTTPS
再加一个server块,把80端口的请求转到443:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
4. 测试并生效
nginx -t
systemctl reload nginx
没报错的话,浏览器访问 https://你的域名 就能看到锁标志了。
Apache配置
1. 上传文件
mkdir -p /etc/apache2/ssl
把.crt和.key文件传到这个目录
2. 开启SSL模块
a2enmod ssl
a2enmod rewrite
3. 写配置
在 /etc/apache2/sites-available/ 下创建或编辑配置文件:
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
DocumentRoot /var/www/html
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
4. HTTP跳HTTPS
ServerName example.com
ServerAlias www.example.com
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
5. 生效配置
a2ensite 你的配置文件名
apachectl configtest
systemctl reload apache2
配置完怎么检查
浏览器检查
访问 https://你的域名,地址栏出现锁标志就说明证书生效了。点锁标志能看证书详情,颁发机构是ZeroSSL。
在线工具检查
推荐用 SSL Labs 的检测工具(ssllabs.com/ssltest),能检测证书链、加密强度、协议支持等,给出一个综合评分。
常见问题
浏览器提示证书不信任?
检查一下服务器时间对不对,时间不对会导致证书验证失败。另外确认.crt文件里包含了完整的证书链。
启动Nginx报错?
大部分情况是证书文件路径不对,或者私钥跟证书不匹配。用 nginx -t 看具体报什么错。
配置了但访问还是HTTP?
检查一下有没有配80跳443的那个server块,没配的话用户直接输入HTTP地址不会自动跳转。
证书到期了怎么更新?
重新申请一张证书,下载新的.crt和.key文件,替换掉服务器上旧的文件,然后reload一下Web服务器就行。不用改配置文件。