Let’s Encrypt
Let’s Encrypt是一个提供免费TLS认证的网站,超过2600w的网站都在使用。其可以配合nginx,为网站生成ssl证书,提供https访问。Let’s Encrypt的证书有效期为90天,可以搭配systemd定时任务,定时更新证书。
PS:本操作基于Centos8和python3
证书申请
- 安装epel源
$ sudo dnf install epel-release
- 安装certbot
$ sudo dnf install certbot python3-certbot-nginx
因为我用的nginx作为http服务器,如果是apache,安装apache的插件,如下:
$ sudo dnf install certbot python3-certbot-apache
- 申请证书
$ sudo certbot --nginx --nginx-server-root=/home/farm/nginx/conf certonly
PS:我安装的nginx目录在用户家目录下,需要将nginx放入环境变量,或者是建立一个软链接,保证nginx命令可以正常执行,我用的是建立软链接的方案
$ sudo ln -s /home/farm/nginx/sbin/nginx /usr/bin/nginx
- 证书生成
证书申请过程中,需要填写邮箱,和确认条款。就是上图标注1,2,3处。最后选择需要申请证书的域名,如果全部都生成,直接回车即可。
- 配置证书
#生成的证书都在/etc/letsencrypt/live/<domain>目录下,<domain>为申请的域名
在nginx.conf文件中添加以下配置
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
proxy_pass http://127.0.0.1:8080 # 仅做示例
}
- 证书自动更新
更新证书脚本
$ vim renew_ssl.sh
#写入以下内容
$ certbot renew
创建systemd定时任务
a. 创建Service单元
$ cd /etc/systemd/system
$ sudo vim renew_ssl.service
写入以下内容:
[Unit]
Description=certbot renew
[Service]
ExecStart=/bin/bash /home/farm/nginx/sh/renew_ssl.sh
启动Service单元
$ sudo systemctl start renew_ssl.service
b. 创建Timer单元
$ cd /etc/systemd/system
$ sudo vim renew_ssl.timer
写入以下内容:
[Unit]
Description=run renew_ssl.sh every 12 hours
[Timer]
OnUnitActiveSec=43200s
Unit=renew_ssl.service
[Install]
WantedBy=multi-user.target
启动Timer单元
$ sudo systemctl daemon-reload
$ sudo systemctl enable renew_ssl.timer
$ sudo systemctl start renew_ssl.timer
|