Skip to content

Let's Encrypt获取免费证书

一、Let's Encrypt介绍

Let's Encrypt 是一个证书颁发机构,提供免费的 SSL/TLS 证书,用于在网站上启用加密的 HTTPS 连接。这些证书被大多数网页浏览器信任,因此成为网站安全的流行选择。 Let's Encrypt 自动化了获取和更新证书的过程,使其即使对于技术经验有限的用户也易于操作。它在推动互联网上 HTTPS 的采用方面发挥了重要作用,为用户提供了更高的安全性和隐私保护。

二、安装环境

2.1 Centos7

基于centos7环境安装

2.2 安装Certbot客户端

Certbot 是一个由 EFF(电子前哨基金会)支持的开源工具,用于自动化 Let's Encrypt SSL/TLS 证书的获取和安装。它是一个命令行工具,可在各种操作系统上运行, 包括 Linux、macOS 和 Windows。Certbot 可以轻松地为网站配置 HTTPS,提供了简单而强大的功能,使网站管理员能够方便地管理 SSL/TLS 证书。Certbot 还提供了自动续订证书的功能, 使得证书的更新变得简单而自动化。

安装命令:

yum install -y certbot

三、获取证书

3.1 获取证书说明

certbot提供了几种获取ssl证书的方式,下面只介绍其中两种:

  1. Standalone 模式: Certbot 会在本地启动一个临时的 web 服务器,从而验证域名所有权并获取证书。这种模式适用于没有现有 web 服务器(如 Apache 或 Nginx)的情况。

  2. Webroot 模式: Certbot 通过在现有的 web 服务器(如 Apache 或 Nginx)的根目录下创建临时文件的方式来验证域名所有权。这种模式适用于你已经运行着 web 服务器的情况。

  3. Standalone-Hook 模式: 与 Standalone 模式类似,但 Certbot 支持运行自定义命令(称为 Hook)来在证书获取前后执行特定操作。

  4. Manual 模式: 在这种模式下,Certbot 提供了手动指导,要求你手动验证域名所有权。这种模式适用于无法自动验证域名所有权的情况,例如 DNS 验证。

  5. DNS 插件: Certbot 还提供了与多种 DNS 提供商(如 Cloudflare、Amazon Route 53 等)集成的插件,以实现自动的 DNS 验证。这些插件允许你通过修改 DNS 记录来验证域名所有权。

3.2 Standalone

在 Certbot 使用 Standalone 模式时,通常不需要与域名解析的运营商直接配合。Standalone 模式是在本地启动一个临时的 Web 服务器来处理验证请求,并不涉及到域名解析的修改或配置。

在 Standalone 模式下,Certbot会在你的服务器上监听指定的端口(通常是80或443端口),并在该端口上提供临时的验证页面。Let's Encrypt 服务器会尝试访问这个端口上的验证页面来确认域名的所有权。

因此,在使用 Standalone 模式时,你只需要确保你的服务器可以通过指定的端口提供服务,并且没有其他程序占用了该端口。如果你的服务器有防火墙或网络安全设备,你可能需要相应地配置以允许 Let's Encrypt 服务器访问你的服务器的指定端口。

**注意:**如果443端口被占用,需要先关闭该应用,申请签名以后再重新启动(对于应用的稳定性要求高的不太建议)

运行 Certbot:

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

3.3 Webroot

运行 Certbot,并选择 Webroot 模式

sudo certbot certonly --webroot -w /path/to/your/webroot -d example.com -d www.example.com

其中:

  • --webroot:指定 Certbot 使用 Webroot 模式。

  • -w /path/to/your/webroot:指定你网站的根目录路径,这是 Certbot 在验证域名所有权时使用的目录。

  • -d example.com -d www.example.com:指定需要生成 SSL 证书的域名。你可以添加多个 -d 参数来包含多个域名。

Certbot 将会尝试在你指定的 Webroot 目录下创建临时文件,然后通过访问这些临时文件来验证域名所有权。

即:在 Certbot 使用 Webroot 模式验证域名所有权时,会在指定的 Webroot 目录下创建特定的临时文件,通常是一个随机生成的字符串或者哈希值,例如

/.well-known/acme-challenge/{random_string}

certbot 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。这个命令在大多数情况下都可以满足需求

四、证书路径

证书生成完毕后,我们可以在 /etc/letsencrypt/live/ 目录下看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。实际的路径会指向/etc/letsencrypt/archive/

  • 证书文件:/etc/letsencrypt/live/example.com.com/fullchain.pem

  • 私钥文件:/etc/letsencrypt/live/example.com.com/privkey.pem

五、自动续签证书

申请的证书是90天过期,所以每个月申请一次也是可以的,或者可以延后为2个月一次。

续签命令:

#--dry-run是测试
certbot renew --dry-run
#真正续签命令
certbot renew

使用crontab定时任务更新。

  1. 编辑 crontab 文件: 打开终端并输入以下命令以编辑 crontab 文件:

    crontab -e

如果是第一次编辑,系统会要求你选择一个文本编辑器。选择后,系统会打开 crontab 文件进行编辑。

  1. 添加定时任务: 在 crontab 文件中,每一行代表一个定时任务。格式为m h dom mon dow command:

    #正常情况
    10 1 * */2 * certbot renew
    #服务依赖的情况
    10 1 * */2 * certbot renew "systemctl stop nginx" --post-hook "systemctl start nginx"
  2. 查看定时任务:

    crontab -l