如何申请并绑定免费SSL证书,实现全站HTTPS

如何申请并绑定免费SSL证书,实现全站HTTPS
最新回答
谁都逃不过

2021-08-01 01:24:10

实现全站HTTPS的完整步骤如下

一、选择免费SSL证书提供商
  • Let's Encrypt:最流行的免费方案,支持自动化工具(如Certbot),但每个域名(含子域名)的证书颁发数量有限制(如每周50个)。
  • ZeroSSL:提供在线手动生成工具,适合需要灵活控制证书的用户,无严格配额限制。
  • Cloudflare:通过其CDN服务免费提供SSL证书,需将域名DNS解析指向Cloudflare,适合已使用其服务的用户。
二、验证域名所有权
  • HTTP验证:在网站根目录放置提供商指定的文件(如.well-known/acme-challenge/下的文件),通过访问验证链接确认所有权。
  • DNS验证:添加TXT或CNAME记录到域名DNS设置中,证明对域名的控制权。
  • 手动验证:部分提供商(如ZeroSSL)支持通过邮件验证,需接收并回复确认邮件。
三、生成并安装SSL证书
  1. 使用Certbot(Let's Encrypt推荐)

    安装Certbot:根据操作系统选择安装方式(如Ubuntu的sudo apt install certbot python3-certbot-nginx)。

    申请证书:运行命令sudo certbot --nginx -d example.com -d

    www.example.com
    ,自动完成验证和Nginx配置。

    自动续订:Certbot会创建系统定时任务,定期检查并续订证书(有效期90天)。手动测试续订:sudo certbot renew --dry-run。

  2. 使用ZeroSSL在线工具

    访问ZeroSSL官网,填写域名并选择验证方式(如DNS验证)。

    按提示添加DNS记录或上传文件,生成证书后下载.crt(证书)和.key(私钥)文件。

四、配置服务器
  1. 上传证书文件

    将下载的证书(如fullchain.pem)和私钥(如privkey.pem)上传到服务器指定目录(如/etc/ssl/)。

  2. 修改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>

  3. 强制HTTPS跳转

    在Nginx中添加:server { listen 80; server_name example.com; return 301 https://$host$request_uri;}

    在Apache中添加:RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$

    https://%
    {HTTP_HOST}%{REQUEST_URI} [L,R=301]

五、更新网站内部链接
  • 检查HTML、CSS、JavaScript中的资源链接,确保全部使用https://协议。混合内容(HTTP资源)会导致浏览器显示“不安全”警告。
六、排查常见问题
  1. “too many certificates already issued”错误

    原因:Let's Encrypt对每个域名(含子域名)的证书颁发数量有限制。

    解决方法

    使用crt.sh工具检查已颁发的证书,吊销不再使用的旧证书。

    合并子域名证书为一个多域名证书。

    等待配额重置(通常每周重置)。

    改用ZeroSSL或Cloudflare等其他提供商。

  2. Nginx配置后仍显示“不安全”

    混合内容:使用浏览器开发者工具检查并更新所有HTTP资源为HTTPS。

    证书链不完整:确保证书文件中包含根证书和中间证书(通常由提供商提供完整链文件)。

    证书过期或无效:使用SSL Labs工具验证证书有效期。

    OCSP Stapling配置错误:检查Nginx配置中是否启用了ssl_stapling on。

    HTTPS跳转错误:确保80端口配置正确重定向到443端口。

  3. 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)。

七、定期维护
  • 自动续订:Certbot会自动处理,但需定期检查定时任务是否正常运行(如sudo systemctl list-timers)。
  • 监控证书有效期:使用sudo certbot certificates查看当前证书的到期时间。

通过以上步骤,你可以高效地申请、绑定并维护免费SSL证书,实现全站HTTPS加密,确保网站数据传输安全。