一、 Let’s Encrypt 简介
Let's Encrypt是由网际网路安全研究小组(ISRG)运营的非营利性证书颁发机构,免费提供传输层安全性协定(TLS)加密的X.509证书。它是世界上最大的证书颁发机构,[3]超过3亿个网站使用其服务,[4]其目标是确保所有网站的安全并使用HTTPS。提供该服务的网际网路安全研究小组(ISRG)是一个公益组织,[5]主要赞助商包括电子前哨基金会(EFF)、Mozilla基金会、OVH、思科系统、Facebook、Google Chrome, 互联网协会、AWS、Nginx和比尔及梅琳达·盖茨基金会。[6]其他合作伙伴包括证书颁发机构IdenTrust、[7]密西根大学[8]以及Linux基金会。 [9]
二、 Certbot 简介
Certbot 为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书,并且 Certbot 是支持所有 Unix 内核的操作系统。
三、 安装 Certbot 客户端
$ yum install certbot # centos
$ apt install certbot # ubuntu
四、 Certbot 的两种使用方式
1. webroot 方式: certbot 会利用既有的 web server,在其 web root 目录下创建隐藏文件,Let’s Encrypt 服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权。
2. standalone 方式: Certbot 会自己运行一个 web server 来进行验证。如果我们自己的服务器上已经有 web server 正在运行 (比如 Nginx 或 Apache ),用 standalone 方式的话需要先关掉它,以免冲突。
五、 获取证书
webroot 模式
使用这种模式会在 web root 中创建 .well-known 文件夹,这个文件夹里面包含了一些验证文件,Certbot 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器,所以需要编辑 nginx 配置文件确保可以访问刚刚创建的 .well-known 文件夹及里边存放的验证文件,以便在生成证书时进行验证:
访问日志如下所示:
{"@timestamp":"2024-05-20T16:00:16+08:00","server_addr":"172.30.170.184","remote_addr":"-","scheme":"http","request_method":"GET","request_uri": "/.well-known/acme-challenge/XBFdrmwxwuZKU1VdE7UrHLsPDiZghBdSzVLSqqrzLc","request_length": "266","uri": "/.well-known/acme-challenge/XBFdrmwxwuZKU1VdE7UrHLsPDiZghBdSzVLSqqrzLc", "request_time":0.000,"body_bytes_sent":87,"bytes_sent":364,"status":"200","upstream_time":"-","upstream_host":"-","upstream_status":"-","domain":"[email protected]","http_referer":"-","http_user_agent":"Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"}
使用以下命令查看 nginx 配置文件地址:
$ nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful
编辑 /usr/local/nginx/nginx.conf 配置
server {
...
location /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/example;
}
...
}
重启 nginx 服务
nginx -s reload
获取证书,
--email 为申请者邮箱,--webroot 为 webroot 方式,-w 为站点目录,-d 为要加 https 的域名,以下命令会为 example.com 和 www.example.com 这两个域名生成一个证书:
certbot certonly --email [email protected] --webroot -w /var/www/example -d example.com -d www.example.com
执行完命令后,https证书就会生成在/etc/letsencrypt/live目录下
standalone模式获取证书
但是有些时候我们的一些服务并没有根目录,例如一些微服务,这时候使用 webroot 模式就走不通了。这时可以使用模式 standalone 模式,这种模式不需要指定网站根目录,他会自动启用服务器的443端口,来验证域名的归属。我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后,再启用。
certbot certonly --email [email protected] --webroot -w /var/www/example -d example.com -d www.example.com
六、 自动续期
Let’s Encrypt 提供的证书只有90天的有效期,所以我们要在在证书到期之前重新获取这些证书,Certbot 提供了一个方便的命令 certbot renew,我们可以先使用 --dry-run 测试是否可用:
certbot renew --dry-run
linux 系统上有 cron 可以来搞定这件事情,使用以下命令新建任务:
crontab -e
写入以下任务内容。这段内容的意思就是 每隔 两个月的 凌晨 3:00 执行 更新操作
00 3 * */2 * certbot renew --quiet --renew-hook "nginx -t && nginx -s reload"
注:crontab 中有六个字段,其含义如下:
第1个字段:分钟 (0-59)
第2个字段:小时 (0-23)
第3个字段:日期 (1-31)
第4个字段:月份 (1-12 [12 代表 December])
第5个字段:一周当中的某天 (0-7 [7 或 0 代表星期天])
/path/to/command – 计划执行的脚本或命令的名称
certbot参数说明:
参数 | 表述 |
–quiet | 执行时屏蔽错误以外的所有输出,也可以使用 -q |
–pre-hook | 执行更新操作之前要做的事情 |
–pre-hook | 执行更新操作之前要做的事情 |
–post-hook | 执行更新操作完成后要做的事情 |
指定域名证书续期
certbot renew --cert-name www.example.com --webroot -w /home/app/web/www.example.com-ssl
查询证书有效期
openssl x509 -in /etc/letsencrypt/live/www.example.com/fullchain.pem -noout -dates
七、 取消证书
可以使用以下命令取消刚刚生成的密匙,也就是以上的反操作:
$ certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
$ certbot delete --cert-name example.com
至此,整个网站升级到 HTTPS 就完成了。
八、 小结
如果加上 HTTPS 之后
标签:Encrypt,nginx,--,证书,SSL,Let,com,example,certbot From: https://blog.csdn.net/huchao_lingo/article/details/141260309