2021-08-01 01:24:10
实现全站HTTPS的完整步骤如下:
一、选择免费SSL证书提供商使用Certbot(Let's Encrypt推荐):
安装Certbot:根据操作系统选择安装方式(如Ubuntu的sudo apt install certbot python3-certbot-nginx)。
申请证书:运行命令sudo certbot --nginx -d example.com -d
自动续订:Certbot会创建系统定时任务,定期检查并续订证书(有效期90天)。手动测试续订:sudo certbot renew --dry-run。
使用ZeroSSL在线工具:
访问ZeroSSL官网,填写域名并选择验证方式(如DNS验证)。
按提示添加DNS记录或上传文件,生成证书后下载.crt(证书)和.key(私钥)文件。
上传证书文件:
将下载的证书(如fullchain.pem)和私钥(如privkey.pem)上传到服务器指定目录(如/etc/ssl/)。
修改Web服务器配置:
Nginx示例:server { listen 443 ssl; server_name example.com; ssl_certificate /etc/ssl/fullchain.pem; ssl_certificate_key /etc/ssl/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # 启用OCSP Stapling(可选) ssl_stapling on; ssl_stapling_verify on;}
Apache示例:<VirtualHost *:443> ServerName example.com SSLEngine on SSLCertificateFile /etc/ssl/fullchain.pem SSLCertificateKeyFile /etc/ssl/privkey.pem</VirtualHost>
强制HTTPS跳转:
在Nginx中添加:server { listen 80; server_name example.com; return 301 https://$host$request_uri;}
在Apache中添加:RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$
“too many certificates already issued”错误:
原因:Let's Encrypt对每个域名(含子域名)的证书颁发数量有限制。
解决方法:
使用crt.sh工具检查已颁发的证书,吊销不再使用的旧证书。
合并子域名证书为一个多域名证书。
等待配额重置(通常每周重置)。
改用ZeroSSL或Cloudflare等其他提供商。
Nginx配置后仍显示“不安全”:
混合内容:使用浏览器开发者工具检查并更新所有HTTP资源为HTTPS。
证书链不完整:确保证书文件中包含根证书和中间证书(通常由提供商提供完整链文件)。
证书过期或无效:使用SSL Labs工具验证证书有效期。
OCSP Stapling配置错误:检查Nginx配置中是否启用了ssl_stapling on。
HTTPS跳转错误:确保80端口配置正确重定向到443端口。
SSL配置错误排查:
在线工具检测:使用SSL Labs的SSL Server Test分析配置。
浏览器开发者工具:查看控制台中的SSL错误信息。
服务器日志:检查Nginx/Apache的错误日志(如/var/log/nginx/error.log)。
OpenSSL测试:运行openssl s_client -connect example.com:443 -showcerts查看证书链和连接详情。
防火墙检查:确保443端口已放行(如sudo ufw allow 443/tcp)。
通过以上步骤,你可以高效地申请、绑定并维护免费SSL证书,实现全站HTTPS加密,确保网站数据传输安全。