本文介绍如何使用certbot工具来申请免费的 SSL 证书;SSL 证书是一种数字证书,用于在网站和用户浏览器之间建立加密连接,确保数据传输安全。

网站启用 HTTPS 必须要有 SSL 证书;

开始前须知

  • 需要为域名添加 DNS TXT 记录来验证域名所有权;
  • 申请的证书为 Let's Encrypt DV 证书;
  • 证书有效期三个月;
  • 支持通配符证书;

什么是 Let's Encrypt

Let's Encrypt 是一个免费、自动化、开放的证书颁发机构(CA),由非营利组织 互联网安全研究组(ISRG) 运营。在 Let's Encrypt 出现之前,SSL证书很贵(每年几百到几千元),很多小网站用不起,只能使用不安全的 HTTP。Let's Encrypt 的目标就是让加密普及化,让互联网更安全。它是目前全球最流行、最普及的免费证书颁发机构,让 HTTPS 从"奢侈品"变成了"必需品",极大推动了互联网安全的发展。

申请证书流程

安装certbot

certbot 是一个免费、开源的工具,用于自动获取和续期 Let's Encrypt 证书;更详细的用法参考 certbot 官方网址:

查看是否安装成功:

certbot --version

显示certbot版本信息则表示已成功安装;

运行以下命令申请证书:

sudo certbot certonly --manual --preferred-challenges dns -d example.com -d *.example.com

这条命令申请一个通配符 SSL 证书;通配符证书必须使用 DNS 验证。

命令参数解释:

  • certonly:仅获取证书,不安装到 Web 服务器;
  • --manual:手动模式,需要人工操作DNS验证;
  • --preferred-challenges dns:使用DNS方式进行域名所有权验证;
  • -d example.com:主域名;通配符域名 *.example.com 不包含example.com,这里需单独添加;
  • -d *.example.com:通配符域名;

运行命令后等待一会,会询问你是否同意 IP 被公开记录:

申请Let's Encrypt证书
你的 IP 将被记录
注意:这台机器的 IP 地址将会被公开记录,作为请求此证书的凭证。
如果你是在非服务器设备上以手动模式运行 certbot,请确保你能接受这一点。

你同意你的 IP 被记录吗?
(Y)es/(N)o:

Let's Encrypt 会公开申请证书的 IP 地址,申请的时间;证书颁发后,任何人都可以通过某些网站查询到;如果你不希望服务器 IP 暴漏,不要在服务器上进行申请证书的操作。

输入 Y 继续,你的 IP 地址会被记录并公开;输入 N 会退出申请;

接下来会要求你添加 DNS TXT 记录来验证域名所有权:

申请Let's Encrypt证书
验证域名所有权

进入你的域名服务商域名解析设置页面,添加一个_acme-challenge的 TXT 记录,记录值为certbot要求你添加的值。

可以等待一会,确保域名解析记录生效,然后按回车继续并等待(有可能会需要再次验证);当看到类似这个信息时,表示申请成功:

申请Let's Encrypt证书
证书申请成功

证书有效期 3 个月,证书保存位置为:

/etc/letsencrypt/archive/***  #证书文件实际位置
/etc/letsencrypt/live/***     #证书的软连接

证书包含 4 个文件:

  • cert1.pem:域名的公钥证书;
  • chain1.pem:Let's Encrypt 的中间证书;
  • fullchain1.pem:完整的证书链;
  • privkey1.pem:私钥文件,保密!

数字 1 表示版本号,每次续期会递增;

Nginx 使用 live 目录的软连接配置证书路径示例:

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

证书续期

本文中的手动 DNS 验证方式无法自动续期,建议重新申请。