配置 SSL(HTTPS) 证书

Ubuntu 22.04 + NGINX + Let's Encrypt + Certbot

181 次阅读

本文章目的是带您了解如何为线上项目配置 SSL 证书。我们将用 Certbot 工具来完成来自 Let's Encrypt 的证书签发,其中包括自动化获取、安装、更新 SSL 证书。希望对您有所帮助。

概要

Let's Encrypt 是一个免费、开放的证书颁发机构(CA),它可以为我们的网站提供免费的 TLS/SSL 证书,从而让我们可以在云服务器上启用加密的 HTTPS。官方推荐使用 Certbot 来简化签发流程,它可以为我们自动化获取、安装、更新证书。

本文假设您已经按照 《部署 Ruby On Rails》 完成了项目的部署。为了能够顺利完成 SSL 配置,请您至少满足以下几点:

  • 已拥有云服务器,且为 Ubuntu 系统,本文环境是 Ubuntu 22.04 系统
  • 已开通 HTTPS 的 443 端口(一般在云服务器控制台内的防火墙板块中查看)
  • 已拥有自己的域名,并完成 DNS 解析,可正常通过域名访问自己的网站
  • 使用 NGINX,并完成基本配置,内含 server_name example.com www.example.com;(修改 example.com 成您的域名) 这行配置代码

安装 Certbot

Certbot 官方推荐我们使用 Snap 包来进行安装,因此我们要先确保系统内已安装好 Snap。对于最新版本的 Ubuntu 系统,Snap 是默认预装并且启用了的。本文的 Ubuntu 22.04 就是如此。如果系统中没有 Snap 也不用担心,安装起来也是简单的。

# 首先登录云服务器(后简称:远程)
# 修改 deploy 成您的云服务器用户名, 1.2.3.4 改成您的云服务器公网IP(后同)
# 您也可以通过域名来登录云服务器,修改 1.2.3.4 成您的域名,例如 ssh deploy@example.com
ssh deploy@1.2.3.4

# 检查系统内是否已安装 Snap
snap version

# 如果系统没有 Snap,那么我们安装 Snap
sudo apt update
sudo apt install snapd

# 如果系统已有 Snap,或者已安装好 Snap,那么我们更新一下 Snap 核心,确保是最新的
sudo snap install core
sudo snap refresh core

准备好 Snap 后,我们来安装 Certbot:

# 远程
# 如果您之前安装了旧版本的 certbot,那请将其删除
sudo apt remove certbot

# 安装 Certbot
sudo snap install --classic certbot

# 启用 certbot 命令
sudo ln -s /snap/bin/certbot /usr/bin/certbot

至此,我们就安装完 Certbot 工具了。接下来,我们将使用它完成自动化获取、安装、更新 SSL 证书。

安装 SSL

有了 Certbot 工具,我们获取、安装和更新 SSL 证书,就是一行代码的事情:

# 远程
# -d 参数是用来指定我们希望证书起效的域名,修改 example.com 改成您的域名
sudo certbot --nginx -d example.com -d www.example.com

# 如果您只想安装 SSL 证书,有关 NGINX 的配置希望后续自己来完成,那么请使用以下命令
sudo certbot certonly --nginx

安装过程中,您需要提供自己的邮箱,并会阅读到一些相关条款和约定,您需要同意这些服务条款。

如果您只安装了 SSL 证书(使用上面第二段代码,而非第一段),请记得配置好自己的 NGINX,让它可以正确使用 SSL 证书。

至此,理论上,您已经完成了 SSL 证书的安装和配置。同时,您的 NGINX 配置现在将自动将所有 Web 请求重定向到 https://。请尝试重新输入域名来访问您的网站,并注意浏览器的安全指示,它应该表明该站点已得到适当保护(通常带有锁定图标)

由于 Let's Encrypt 的 SSL 证书具有有效期,一旦过期且我们又忘记更新的话,那么 SSL 证书将无法使用,这会影响到我们的网站。不过您不用担心,Certbot 工具已经自动为我们创建了定时任务,它会在我们的 SSL 证书过期之前完成自动化更新,从而保障我们网站的正常运作。我们可以手动测试它的自动化更新:

# 远程
# 测试 Certbot 自动化更新 SSL 证书
sudo certbot renew --dry-run

如果您测试过程中没有看到任何错误,那么说明一切运作正常。必要时,Certbot 将更新您的证书并重新加载 NGINX 以获取更改。如果自动化更新过程失败,Let's Encrypt 会向您的邮件发送一条消息,警告您的证书即将过期。

OK!您已经完成了 SSL 配置并且启用了 HTTPS 来保护自己的网站!恭喜!!!

参考文献

  1. Certbot Instructions with Nginx on Ubuntu 20. CERTBOT. https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal
  2. How To Secure Nginx with Let's Encrypt on Ubuntu 22.04. DIGITALOCEAN. https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-22-04
  3. Installing snap on Ubuntu. CANONICAL SNAPCRAFT. https://snapcraft.io/docs/installing-snap-on-ubuntu