Let’s Encrypt SSL 证书的申请与使用

Let’s Encrypt 简介

Let’s Encrypt 是免费、开放和自动化的证书颁发机构。由非盈利组织互联网安全研究小组(ISRG)运营。
SSL应用开发者可以免费从 Let’s Encrypt 申请到有效期90天的SSL证书,当然在到期之前也可以更新证书,延长有效期。
Let’s Encrypt 支持 ACME 协议,可以自动化的完成SSL证书的申请、更新、吊销等操作。
有了正规的证书颁发机构签发的SSL证书,才能更好的使用SSL相关功能,例如:提供支持HTTPS的网站。尽管可以使用自签名的证书,但会在很多情况下收到安全警告或被禁止使用。

证书的申请与使用

Let’s Encrypt 支持 ACME2 开放协议,未提供WEB等申请途径,目前仅能通过ACME 客户端完成证书操作,官方推荐的 ACME 客户端是 certbot
最方便的方法是在WEB服务器上安装certbot工具,完成证书管理操作。

测试环境

  • 测试环境是 Ubuntu 20.04 + Apache2;
  • 域名服务商是阿里云;

certbot 安装

安装方法参考certbot官方指引:https://certbot.eff.org/instructions

选择WEB服务和操作系统后,会有两个选项:defaultwildcard;其中wildcard方式需要域名服务商有相应的 certbot DNS插件,查了一下certbot的官网文档,第三方插件dns-multi可以支持阿里云DNS,这里我们先看看default方式。

环境需求

  • 可以访问命令行,例如ssh
  • 有sudo权限
  • WEB服务器已经部署好,并且已经上线了80端口的WEB应用
  • 要申请证书的域名已经指向了WEB服务器

安装certbot

使用snap安装certbot(Ubuntu 20.04 已经自带snap,如果没有,可参考官方文档安装)

# 先删除系统自带的版本
sudo apt-get remove certbot
# 用snap安装最新版本
sudo snap install core; sudo snap refresh core
sudo ln -s /snap/bin/certbot /usr/bin/certbot

注册账号

在使用之前注册账号,否则在第一次交互式使用时会提示输入邮箱地址来注册账号

sudo certbot register -m 你的邮箱地址 --agree-tos

证书管理

申请证书

可以只申请证书,而不安装到WEB服务,证书也可以用于其他用途,例如自己的SSL应用。

sudo certbot certonly --apache

这里–apache指出如何验证域名所有权,单个域名使用HTTP验证,apache指出WEB服务器类型,程序据此确定具体的操作方法。如果还没有准备好WEB服务器,可以使用–standalone参数来运行一个WEB服务器。

这里没有加其他参数,命令将以交互式的方式提示用户输入域名等信息,获取证书将存储在 /etc/letsencrypt/archive/你的域名/ 目录下,最新的证书链接在 /etc/letsencrypt/live/你的域名/ 目录下。

也可以用参数提供全部信息,实现自动化操作

sudo certbot certonly --apache -d 你的域名,也可以有多个域名 -d 或者多次-d指定

常用子命令:

  • run 或 缺省:获取并安装证书到WEB服务器
  • certonly:获取但不安装到WEB服务器
  • renew:更新快要到期的证书(多长时间到期看配置文件/etc/letsencrypt/renewal/你的域名.conf,一般是到期前30天内)

证书管理子命令:

  • certificates:查看证书信息
  • revoke:吊销证书(需要指定–cert-name 或 --cert-path)
  • delete:删除证书(需要指定–cert-name)

常用选项:

  • 验证方式
    • –standalone:运行独立的web服务验证
    • –apache:用Apache验证
    • –nginx:用Nginx验证
    • –webroot:用webroot方式验证(例如tomcat)
    • –manual:手工验证
  • 交互选项
    • -n:以非交互方式运行
    • –expand:添加更多域名时覆盖旧证书
    • –keep-until-expiring, --keep, --reinstall:如果证书已存在,保留现有证书直到需要更新
    • –force-renewal, --renew-by-default:强制更新证书(隐含–expand)
    • –renew-with-new-domains:域名更新时强制更新证书
    • –allow-subset-of-names:允许部分域名验证失败
  • 安全选项
    • –redirect:自动将HTTP重定向到HTTPS
    • –no-redirect:不将HTTP重定向到HTTPS

申请并安装证书

sudo certbot run --apache -d 你的域名

安装证书会根据当前80端口的网站配置生成一个对应的HTTPS网站配置,并启用它。
不指定–no-redirect的情况下,安装证书时还对修改80端口的网站配置,将HTTP重定向到HTTPS。

更新证书

sudo certbot renew

可以把这个做成定时任务,实现证书的自动更新

注意:这只会更新证书,而不会重启web服务使证书生效,要想使证书生效,需要重启web服务或者使用certbot install命令安装证书以间接重启web服务。

使用certbot install命令在HTTPS端口不是默认的443端口时会有问题,命令会尝试添加443端口,这可能会导致web服务无法正常启动,所以建议使用重启web服务的方式使证书生效。

吊销证书

sudo certbot revoke --cert-name 你的域名

通配符证书

通配符证书是指域名为*.your.domain这样的证书,为了验证域名所有权,需要使用DNS验证方式,所有要么有相应的DNS插件支持,要么根据提示人工完成验证,由于证书的有效期只有90天,每次都要人工验证比较麻烦,最好还是通过插件自动完成验证,我的域名服务商是阿里云,查看文档后发现有第三方插件dns-multi可以支持,下面来看看如何自动完成证书申请。

certbot官方内置的DNS插件以及第三方插件可参考官方文档:https://eff-certbot.readthedocs.io/en/stable/using.html#dns-plugins

dns-multi官方网站:https://github.com/alexzorin/certbot-dns-multi

安装dns-multi

还是采用snap安装

sudo snap install certbot-dns-multi
sudo snap set certbot trust-plugin-with-root=ok
sudo snap connect certbot:plugin certbot-dns-multi

配置dns-multi

配置文件:/etc/letsencrypt/dns-multi.ini
根据域名服务商配置dns_multi_provider和其他参数。
dns_multi_provider 参考 https://go-acme.github.io/lego/dns/ 中 各DNS Provider的 CLI flag name ,其他参数可以参考 https://go-acme.github.io/lego/dns/ 中的各DNS Provider 链接的文档,即文档中的那些环境变量,将需要的环境变量值配置到 dns-multi.ini 文件中。

dns_multi_provider=alidns
ALICLOUD_ACCESS_KEY=your-access-key
ALICLOUD_SECRET_KEY=your-secret-key

为了保护ALICLOUD_SECRET_KEY,可以将dns-multi.ini的权限设置为只有本用户可以读写

chmod 0600 /etc/letsencrypt/dns-multi.ini

申请命令

申请并安装证书

sudo certbot -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名"

由于之前已经安装过一个证书,这一次下载到了 /etc/letsencrypt/archive/你的域名-0001 目录下,这个目录不一定是域名,而是证书名,可以用–cert-name选项指定证书名,不指定会用指定的域名自动生成。证书名会在install等其他命令里用到。

sudo certbot --cert-name "all.你的域名" -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名"

这样,证书会保存在 /etc/letsencrypt/archive/all.你的域名 目录下,当前版本链接在 /etc/letsencrypt/live/all.你的域名 目录下。

注意: 这里证书包含了 域名 “你的域名” 和 “*.你的域名” ,安装证书时会查找域名匹配的网站,“你的域名”会匹配ServerName为“你的域名”的网站,如果没有,会匹配到默认网站000-default;而 “*.你的域名” 匹配 www.你的域名,doc.你的域名等,如果没有会导致安装过程失败。可以简单的复制 000-default.conf,并修改其中的ServerName参数。

完整的自动申请命令

使用-n参数指定为非交互模式,会检查参数是否足够,如果参数不足命令会失败而不是在执行过程中提问,这样用-n参数测试过能保证申请安装和更新证书命令自动运行时不会因参数不足而报错。

  1. 申请安装证书
sudo certbot run -n --cert-name cert1 --apache -d "你的域名" -d "www.你的域名"

如果是通配符证书,由于在安装证书时需要知道那个网站对应通配符证书,所以无法一步到位,需要分为下载证书和安装证书两步操作,在安装时用-d指定域名

# 下载证书
sudo certbot certonly -n --cert-name cert1 -a dns-multi --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini -d "你的域名" -d "*.你的域名"
# 安装证书
sudo certbot install -n --cert-name cert1 -i apache -d 你的域名
sudo certbot install -n --cert-name cert1 -i apache -d www.你的域名
  1. 更新证书
sudo certbot renew -n

安装证书使证书生效

sudo certbot install -n --cert-name 证书名 -d 域名1 -d 域名2 --apache

重启服务使证书生效

sudo systemctl restart apache2

优化:通过crontab来定时检查更新证书,在证书没临近到期时不会更新证书,此时不应重启web服务,但是certbot并没有返回值检查这种情况,需要我们通过脚本和live目录下的证书链接是否变化来判断是否更新了证书,是否需要重启web服务。整个过程可以通过一个脚本实现,通过crontab来运行脚本。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
let's encrypt是一个非盈利性质的机构,致力于提供免费的SSL证书服务,以促进整个互联网的安全性。在官网上,他们提供了一键式免费申请SSL证书的脚本,使得用户可以快速而简便地获取自己网站的SSL证书。 这个一键式免费申请SSL证书脚本的使用非常简单。首先,用户需要在自己的网站服务器上安装并配置好Certbot工具。Certbot是一个由let's encrypt官方开发的自动化工具,用于申请和更新SSL证书。 在安装和配置好Certbot之后,用户只需要在命令行中输入一条简单的指令,就可以申请自己网站的SSL证书了。具体指令如下: $ sudo certbot certonly --standalone -d <your_domain> 其中,“<your_domain>”替换为用户自己的域名。这条指令的作用是告诉Certbot以standalone模式运行,并申请一个新的证书,该证书将与用户输入的域名关联。 Certbot会自动与let's encrypt的服务器进行通信,验证用户所拥有的域名和服务器的控制权。一旦验证通过,Certbot就会生成一个有效期为90天的SSL证书,并将其保存在用户指定的位置。 用户可以根据自己的需要选择将证书文件保存到哪个目录,以及将其用于哪个Web服务器(例如Apache或Nginx)。 值得一提的是,这个一键式免费申请SSL证书脚本还支持自动续订证书的功能。Certbot会在证书即将过期之前自动执行更新过程,以确保用户的网站能够持续使用最新的SSL证书。 总之,let's encrypt官网提供的一键式免费申请SSL证书脚本极大地简化了证书申请和管理的过程,让网站拥有更安全可靠的加密通信。用户只需几个简单的步骤,就能轻松获得免费的SSL证书,提升网站的安全性和可信度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞花丝雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值