在 CentOS 上配置 Nginx 使用免费的 HTTPS 证书,最常见的方法是通过 Let’s Encrypt 来申请和配置免费的 SSL/TLS 证书。Let’s Encrypt 提供了自动化的免费证书申请和管理方式,非常适合个人和小型网站使用。

步骤概览

  1. 安装 Certbot(Let’s Encrypt 客户端)
  2. 使用 Certbot 申请 SSL 证书
  3. 配置 Nginx 使用 HTTPS
  4. 自动化证书续期

详细步骤

1. 安装 Certbot(Let’s Encrypt 客户端)

Certbot 是一个自动化工具,可以帮你向 Let’s Encrypt 申请 SSL 证书,并自动配置 Web 服务器(如 Nginx 或 Apache)。

  1. 安装 EPEL 仓库:Certbot 在 CentOS 上通过 EPEL(Extra Packages for Enterprise Linux)仓库提供,因此需要先安装 EPEL 仓库。sudo yum install epel-release -y
  2. 安装 Certbot:安装 Certbot 和 Nginx 插件:sudo yum install certbot python3-certbot-nginx -y

2. 使用 Certbot 申请 SSL 证书

  1. 申请证书并自动配置 Nginx:如果你已经配置好了 Nginx,并且希望 Certbot 自动为你配置 SSL(即自动修改 Nginx 配置文件,添加 HTTPS),可以使用如下命令:sudo certbot --nginx 执行这个命令时,Certbot 会询问你一些问题,如:
    • 选择你要为其配置证书的域名。
    • 是否希望将 HTTP 流量自动重定向到 HTTPS(推荐选择“是”)。
    Certbot 会自动向 Let’s Encrypt 申请证书并修改你的 Nginx 配置,使其支持 HTTPS。
  2. 手动申请证书:如果你不希望自动修改 Nginx 配置,可以只申请证书,并稍后手动配置 Nginx:sudo certbot certonly --nginx 这会生成证书并保存在 /etc/letsencrypt/live/ 目录下。证书生成完成后,你需要手动修改 Nginx 配置来使用这些证书。

3. 配置 Nginx 使用 HTTPS

无论你是自动配置还是手动申请证书,Nginx 都需要修改配置以启用 HTTPS。

  1. 编辑 Nginx 配置文件:打开 Nginx 配置文件(通常是 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf,具体路径根据你的 Nginx 配置不同而不同)。sudo vi /etc/nginx/nginx.conf
  2. 修改 HTTP 配置部分:在你的 Nginx 配置中,找到 server 配置块(通常是 80 端口)。修改或添加如下配置以启用 HTTPS:server { listen 80; server_name your_domain.com www.your_domain.com; # 替换为你的域名 # 强制所有 HTTP 请求重定向到 HTTPS return 301 https://$host$request_uri; }
  3. 配置 HTTPS:在相同的 Nginx 配置文件中,添加一个监听 443 端口的 server 块,并指向 Let’s Encrypt 证书的位置。配置如下:server { listen 443 ssl; server_name your_domain.com www.your_domain.com; # 替换为你的域名 ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; # 强化 SSL 配置(可选) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE+AESGCM:ECDHE+CHACHA20:...'; ssl_prefer_server_ciphers on; location / { # 你的配置... } } 替换 your_domain.com 为你的实际域名,确保指向正确的证书路径。
  4. 重新加载 Nginx 配置:完成配置后,重新加载 Nginx 使配置生效:sudo systemctl reload nginx

4. 自动化证书续期

Let’s Encrypt 的证书有效期为 90 天,因此需要定期续期。幸运的是,Certbot 提供了自动续期的功能。

  1. 测试自动续期:Certbot 默认会在 /etc/cron.d 中创建一个定时任务来定期检查和续期证书。如果你想手动测试自动续期,可以运行以下命令:sudo certbot renew --dry-run 这会模拟续期过程,确保一切正常。
  2. 设置定时任务:如果你的系统没有自动设置,你可以通过 cron 设置一个定时任务来自动续期证书。编辑 cron 配置文件:sudo crontab -e 添加如下任务,每天运行一次续期检查:0 0,12 * * * certbot renew --quiet && systemctl reload nginx 这样,Certbot 将每天尝试续期证书并在成功续期后重载 Nginx。

总结

通过以上步骤,你可以在 CentOS 上使用 Let’s Encrypt 和 Certbot 来为 Nginx 配置免费的 HTTPS 证书。这个过程涉及到证书的申请、配置 Nginx 支持 SSL、以及自动续期证书等。Let’s Encrypt 提供的免费证书和自动化工具让你能够轻松实现安全的 HTTPS 网站。