免费 SSL 证书申请配置|网站强制 HTTPS 部署完整教学

发布时间:2026-07-16 23:33

前言介绍

随着互联网安全意识的提升,HTTPS 已经成为网站运营的标配。HTTPS 不仅能够加密用户与服务器之间的数据传输,防止中间人攻击和窃听,还能提升搜索引擎排名,增强用户对网站的信任感。过去,SSL 证书通常需要付费购买,但现在通过 Let's Encrypt 等免费证书颁发机构,我们可以轻松获取并自动续期免费 SSL 证书。本教程将手把手带你完成从申请免费 SSL 证书到配置网站强制跳转 HTTPS 的完整流程,适用于 Nginx 和 Apache 两种主流 Web 服务器环境。

前置准备

1. 一台已安装 Linux 操作系统的服务器(本教程以 Ubuntu 20.04/22.04 为例,CentOS 7/8 操作类似)

2. 拥有服务器 root 权限或 sudo 权限

3. 一个已解析到该服务器 IP 的域名(例如 example.com 和 www.example.com)

4. 服务器已安装 Nginx 或 Apache Web 服务器,并且网站已正常通过 HTTP 访问

5. 确保服务器 80 和 443 端口在防火墙中开放(80 用于 HTTP 验证,443 用于 HTTPS)

6. 建议先备份现有配置文件,防止操作失误

分步操作步骤

1. 安装 Certbot 工具

Certbot 是 Let's Encrypt 官方推荐的客户端工具,用于自动化申请和续期 SSL 证书。

- 更新系统软件包列表:

```

sudo apt update

```

- 安装 Certbot 和对应 Web 服务器的插件:

- 如果使用 Nginx:

```

sudo apt install certbot python3-certbot-nginx -y

```

- 如果使用 Apache:

```

sudo apt install certbot python3-certbot-apache -y

```

- 如果使用其他 Web 服务器或不确定,可安装通用版本:

```

sudo apt install certbot -y

```

- 验证安装是否成功:

```

certbot --version

```

如果显示版本号(例如 certbot 1.21.0),说明安装成功。

2. 申请免费 SSL 证书

Certbot 提供两种主流申请方式:自动模式(推荐)和手动模式。自动模式会帮你修改 Web 服务器配置,手动模式只获取证书文件。

- 自动模式(以 Nginx 为例):

```

sudo certbot --nginx -d example.com -d www.example.com

```

其中 -d 参数指定域名,可以一次申请多个域名(最多 100 个)。系统会自动检测 Nginx 配置文件,并在验证通过后自动配置 HTTPS。

- 自动模式(以 Apache 为例):

```

sudo certbot --apache -d example.com -d www.example.com

```

- 手动模式(仅获取证书,不自动修改配置):

```

sudo certbot certonly --standalone -d example.com -d www.example.com

```

注意:使用 standalone 模式时,需要先停止 Web 服务器(sudo systemctl stop nginx 或 sudo systemctl stop apache2),因为该模式会占用 80 端口进行验证。验证完成后记得重启 Web 服务器。

- 申请过程中,Certbot 会询问几个问题:

- 输入邮箱地址(用于紧急联系和证书续期提醒)

- 同意服务条款(输入 A 同意)

- 是否分享邮箱(可选,建议选 N)

- 选择是否将 HTTP 自动重定向到 HTTPS(建议选 2,后面会详细配置)

- 申请成功后,终端会显示“Congratulations!”字样,并告知证书存放位置。默认路径为:

- 证书文件:/etc/letsencrypt/live/你的域名/fullchain.pem

- 私钥文件:/etc/letsencrypt/live/你的域名/privkey.pem

3. 配置 Web 服务器使用 SSL 证书

如果上一步使用了自动模式,Certbot 已经帮你修改了配置文件。但为了确保配置完整且符合最佳实践,建议手动检查并调整。

- 对于 Nginx 用户:

- 编辑你的站点配置文件(通常位于 /etc/nginx/sites-available/ 或 /etc/nginx/conf.d/):

```

sudo nano /etc/nginx/sites-available/example.com

```

- 确保 server block 中包含以下配置(如果 Certbot 已自动添加,可跳过):

```

server {

listen 443 ssl http2;

server_name example.com www.example.com;

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;

ssl_ciphers HIGH:!aNULL:!MD5;

# 其他配置(如 root、index 等)

root /var/www/example.com;

index index.html index.htm;

}

```

- 检查配置语法:

```

sudo nginx -t

```

- 重新加载 Nginx 使配置生效:

```

sudo systemctl reload nginx

```

- 对于 Apache 用户:

- 编辑站点配置文件(通常位于 /etc/apache2/sites-available/):

```

sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf

```

- 确保包含以下配置:

```

ServerName example.com

ServerAlias www.example.com

SSLEngine on

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem

SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

# 其他配置

DocumentRoot /var/www/example.com

```

- 启用 SSL 模块和站点:

```

sudo a2enmod ssl

sudo a2ensite example.com-le-ssl

```

- 重启 Apache:

```

sudo systemctl restart apache2

```

4. 配置强制 HTTPS 跳转

为了让所有访问 HTTP 的请求自动跳转到 HTTPS,需要配置 301 重定向。

- Nginx 配置方法:

- 在同一个站点配置文件中,添加一个监听 80 端口的 server block,将所有请求重定向到 HTTPS:

```

server {

listen 80;

server_name example.com www.example.com;

return 301 https://$server_name$request_uri;

}

```

- 如果你希望保留 www 到非 www 的跳转逻辑,可以更精确地写:

```

server {

listen 80;

server_name example.com www.example.com;

if ($host = www.example.com) {

return 301 https://example.com$request_uri;

}

return 301 https://example.com$request_uri;

}

```

- 保存文件后,再次检查配置并重载:

```

sudo nginx -t

sudo systemctl reload nginx

```

- Apache 配置方法:

- 编辑 HTTP 站点的配置文件(通常位于 /etc/apache2/sites-available/000-default.conf 或 example.com.conf):

```

ServerName example.com

ServerAlias www.example.com

Redirect permanent / https://example.com/

```

- 或者使用 Rewrite 规则(需要启用 mod_rewrite):

```

ServerName example.com

ServerAlias www.example.com

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

```

- 启用 Rewrite 模块并重启 Apache:

```

sudo a2enmod rewrite

sudo systemctl restart apache2

```

5. 测试 HTTPS 配置

- 打开浏览器,访问 https://example.com,检查是否显示绿色锁标志。

- 访问 http://example.com,确认是否自动跳转到 https://example.com。

- 使用在线 SSL 检测工具(如 SSL Labs)测试证书配置是否完整:

- 访问 https://www.ssllabs.com/ssltest/analyze.html?d=example.com

- 等待检测完成,评分应达到 A 或以上。

- 在服务器本地测试:

```

curl -I https://example.com

```

返回状态码应为 200,且包含 Strict-Transport-Security 等安全头信息(可选配置)。

6. 配置自动续期

Let's Encrypt 证书有效期为 90 天,Certbot 会自动添加续期定时任务,但需要确认其正常运行。

- 检查续期定时任务是否存在:

```

sudo systemctl list-timers | grep certbot

```

或者查看 crontab:

```

sudo crontab -l

```

通常 Certbot 会在安装时自动添加一个 systemd timer 或 crontab 条目,每天执行两次续期检查。

- 手动测试续期是否正常工作:

```

sudo certbot renew --dry-run

```

如果显示“Congratulations, all renewals succeeded”,说明自动续期配置正确。

- 如果使用手动模式申请证书,需要自己编写续期脚本并添加到 crontab:

```

0 3 * * * /usr/bin/certbot renew --quiet && systemctl reload nginx

```

这表示每天凌晨 3 点检查续期,成功后自动重载 Web 服务器。

常见问题

1. 申请证书时提示“Domain not found”或“DNS problem”

- 原因:域名未正确解析到服务器 IP,或 DNS 记录未生效。

- 解决:使用 dig 或 nslookup 命令检查域名解析:

```

dig example.com

```

确保 A 记录指向你的服务器 IP。如果刚修改 DNS,等待几分钟到几小时生效。

2. 申请证书时提示“Failed to connect to host”或“Connection refused”

- 原因:服务器 80 端口未开放,或 Web 服务器未运行。

- 解决:检查防火墙规则(iptables、ufw 或云平台安全组),确保 80 端口允许访问。同时确认 Web 服务器正在运行:

```

sudo systemctl status nginx

```

3. 配置完成后浏览器提示“您的连接不是私密连接”或“NET::ERR_CERT_COMMON_NAME_INVALID”

- 原因:证书域名与访问的域名不匹配。

- 解决:检查证书包含的域名:

```

sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -text -noout | grep DNS

```

确保你访问的域名在证书的 Subject Alternative Name (SAN) 列表中。如果缺少,需要重新申请证书并包含正确域名。

4. 强制 HTTPS 跳转后出现无限重定向循环

- 原因:Nginx 或 Apache 配置中,HTTPS 的 server block 也监听了 80 端口,或者反向代理配置导致。

- 解决:检查配置文件,确保 443 的 server block 没有 listen 80。如果使用反向代理,需要在代理配置中添加:

```

proxy_set_header X-Forwarded-Proto $scheme;

```

并确保后端应用正确识别 HTTPS 协议。

5. 证书自动续期失败

- 原因:Certbot 定时任务未运行,或续期时 80 端口被占用。

- 解决:检查系统日志:

```

sudo journalctl -u certbot.timer

```

如果使用 standalone 模式续期,需要确保 Web 服务器在续期时临时停止,或改用 webroot 模式(推荐)。

收尾总结

通过本教程,你已经完成了从零开始申请免费 SSL 证书到配置网站强制 HTTPS 跳转的完整流程。核心步骤包括安装 Certbot、申请证书、配置 Web 服务器、设置 301 重定向以及验证自动续期。现在你的网站已经具备 HTTPS 加密能力,用户访问时数据安全得到保障,同时搜索引擎也会给予更好的排名权重。

最后提醒几点:定期检查证书有效期(虽然自动续期,但建议每月手动检查一次);保持 Certbot 和 Web 服务器版本更新;如果网站使用了 CDN,需要在 CDN 控制台也配置 SSL 证书。如果你在操作过程中遇到任何问题,建议查阅 Let's Encrypt 官方文档或 Certbot 社区支持。安全无小事,HTTPS 是互联网的基础设施,值得每一位站长认真对待。