Let's Encrypt 证书申请及配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Let's Encrypt 证书申请及配置相关的知识,希望对你有一定的参考价值。
参考技术ALet\'s Encrypt —— 是一个由非营利性组织 互联网安全研究小组 (ISRG)提供的免费、自动化和开放的证书颁发机构(CA),简单的说,就是为网站提供免费的 SSL/TLS 证书。
Let\'s Encrypt 生成证书的 工具 很多, certbot 是官方推荐的签发工具,也可以通过在线服务申请,例如:
在线一站式服务管理方便,但可能需要绑定业务,个人用户还是推荐通过工具生成证书。
这里推荐 acme.sh ,它不仅有详细的 中文文档 ,操作更为方便,还支持 Docker 。
以 root 用户为例
安装过程:
自动更新: acme.sh --upgrade --auto-upgrade
手动更新: acme.sh --upgrade
关闭更新: acme.sh --upgrade --auto-upgrade 0
验证域名所有权验证方式:HTTP 和 DNS
acme.sh 会自动生成验证文件,并放到站点的根目录,然后自动完成验证,最后自动删除文件。
nginx:自动从配置中获取站点的根目录
注:根据中国大陆工信部的规定,所有托管在中国大陆服务器上的网站均需要备案。
—— 站点如未备案,80 端口处于禁用状态,acme.sh 无法使用 HTTP 验证域名所有权。
优势:不需要服务器与公网 ip,只要配置 DNS 解析即可。
不足:必须配置 Automatic DNS API 才可以自动续签。
根据域名服务商,选择对应的 DNS API 。
阿里云: 控制台
创建 Accesskey
DNSPod: 控制台 (注:非腾讯云控制台)
创建 API Token
Wildcard 证书,目前只支持 DNS-01 验证方式。
生成的证书都在 home 目录下: ~/.acme.sh/
使用 --install-cert 命令
重启 Nginx 服务:
https://myssl.com
定时任务会自动更新
强制续签证书: acme.sh --renew -d mydomain.com --force
Let‘s Encrypt申请ssl证书
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
以上是关于Let's Encrypt 证书申请及配置的主要内容,如果未能解决你的问题,请参考以下文章
免费 Https 证书(Let's Encrypt)申请与配置
实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题