Let's Encrypt免费申请SSL证书,自动续订证书永久使用https
证书不仅是免费的,而且支持通配符证书,通配符证书指的是一个可以被多个子域名使用的公钥证书,多个子域名使用起来十分方便。申请和配置的流程都非常简单,虽然每次的有效期为90天,但可以通过脚本去更新证书,只要配置好了,几乎可以一劳永逸。
而市场上其他的通配符证书都比较昂贵,个人开发者平时做个小东西玩玩, 应该是最好的选择了。
如何让自己的网站从HTTP升级为HTTPS加密传输?使用Let’s Encrypt的免费ssl证书再加上web服务器上一些简单的设置,就可以拥有一个https的加密传输的网站!
Let’s Encrypt是谁?
Let’s Encrypt官方网站
Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。
目前Let's Encrypt已经为1.8亿个网站提供TLS证书。Let's Encrypt是一个非盈利性证书颁发机构。
要启用HTTPS,我们就需要从证书授权机构(以下简称CA) 处获取一个证书,Let’s Encrypt 就是一个 CA。我们可以从 Let’s Encrypt 获得网站域名的免费的证书。这篇文章也主要讲的是通过 Let’s Encrypt + Nginx 来让网站升级到HTTPS。
通过安装Certbot来从Let’s Encrypt免费获取证书。Certbot是Let’s Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let’s Encrypt证书。
下面让我们通过安装Certbot来获取免费的ssl证书:
安装Certbot客户端

1
2
dnf install certbot
certbot --version

安装成功后查看一下certbot软件的版本,确认安装成功,如果数据源上找不到certbot软件,请更新你的系统数据源。需要安装epel-release数据源。
获取SSL证书
Certbot需要验证Let's Encrypt API发出的加密信息,以证明域名的所有权。它使用端口80(HTTP)或443(HTTPS)来完成此操作。如果你的防火墙屏蔽了端口,请立即打开相应的端口。如果此时80端口被web服务器占用,请先停止web服务器!
运行Certbot来获取域名的证书。使用--standalone选项告诉Certbot使用服务器的内置Web服务器来验证。--preferred-challenges是选择验证端口,选择Certbot使用80端口或443端口。如果使用80端口验证,--preferred-challenges http。如果使用443端口,则是--preferred-challenges tls-sni。最后,用-d指定申请证书的域名。可以添加多个-d选项以在一个证书中涵盖多个域名。

1
certbot certonly --standalone --preferred-challenges http -d uzbox.com -d www.uzbox.com

运行该命令时,将提示您输入电子邮件地址并同意服务条款。这样做之后,您应该看到一条消息,告诉您该过程已成功完成,并且证书的存储位置:
Let's Encrypt免费申请SSL证书,自动续订证书永久使用https
证书已经申请成功了,有效期是90天,三个月后SSL证书需要续签。
申请通配符域名证书:

1
certbot certonly --manual --preferred-challenges dns-01 -d *.uzbox.com -d uzbox.com

Let's Encrypt免费申请SSL证书,自动续订证书永久使用https
按照上面提示,将你的域名增加一个txt的解析,主机名填写_acme-challenge 类型选择TXT 填写IP地址的地方,复制上面的代码iXIMhWMvdOzTE23LChl7Q4V_eCRESTTCLwHzJ9jkvBo
在windows上测试解析是否生效,在CMD命令提示符的窗口里,输入:“nslookup -q=txt _acme-challenge.uzbox.com” 回车确认查看是否生效!
在Centos8上测试可以安装一个用于验证TXT解析是否生效的工具。

1
2
yum install bind-utils
dig -t txt _acme-challenge.uzbox.com @8.8.8.8

恭喜你,证书已经注册成功了!
Let's Encrypt免费申请SSL证书,自动续订证书永久使用https
现在看一下证书目录下都有哪些文件?

1
cd /etc/letsencrypt/live/uzbox.com

privkey.pem:这是证书的私钥。这需要保持安全和保密,这就是为什么大多数/etc/letsencrypt目录具有非常严格的权限并且只能由root用户访问的原因。大多数软件配置都将其称为ssl-certificate-key或ssl-certificate-key-file。
fullchain.pem:这是我们的证书,与所有中间证书捆绑在一起。大多数软件都会将此文件用作实际的证书,并且会在其配置中使用“ ssl-certificate”之类的名称进行引用。
有关存在的其他文件的更多信息,请参考Certbot文档的“我的证书在哪里”部分。
以上是两种申请方式,一种是单个域名的ssl证书,另外一种是泛域名SSL证书。也就是以后不必再为二级域名申请ssl证书了。
启用自动证书续签
加密的证书仅有效九十天。这是为了鼓励用户自动执行证书更新过程。certbot我们安装的软件包包括一个systemd计时器,该计时器每天检查两次续订,但是默认情况下它是禁用的。通过运行以下命令来启用计时器:
设置计时器开机启动,然后查看一下计时器的当前状态。

1
2
systemctl enable --now certbot-renew.timer
systemctl status certbot-renew.timer

计时器应处于活动状态。Certbot现在将自动续订此服务器上的所有证书。
通过certbot renew命令,自动检查系统内的证书,并且自动更新这些证书。 我们可以运行这个命令测试一下

1
certbot renew --dry-run

Let's Encrypt免费申请SSL证书,自动续订证书永久使用https
生成证书的时候有的使用的是--standalone模式,验证域名的时候需要启用web端口验证。导致更新证书时候产生错误,无法绑定web端口,因为nginx在使用web端口,需要先关闭nginx,更新之后再打开nginx。可以这样操作:

1
2
crontab -u www -e
15 2 * */2 * certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"

--pre-hook这个参数表示执行更新操作之前要做的事情,因为我有--standalone模式的证书,所以需要停止nginx服务,解除端口占用。 --post-hook这个参数表示执行更新操作完成后要做的事情,这里就恢复nginx服务的启用。
创建一个定时任务,15 2 * */2 * 的意思就是 每隔两个月的凌晨2:15执行更新操作。
有关更多信息,请参考Certbot的文档。

配置Https访问
nginx的配置方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name uzbox.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443;
server_name uzbox.com;

ssl on;
ssl_certificate /etc/letsencrypt/live/uzbox.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/uzbox.com/privkey.pem;
}

当您的证书需要续订或不起作用时,LetsMonitor.org会提醒您:它是免费的。你可以使用LetsMonitor.org来监测你网站ssl证书的到期时间!到这里整个网站升级到HTTPS就完成了。有问题可以在下面评论区讨论!

订阅
提醒
guest
0 评论
内联反馈
查看所有评论