Lego使用HTTP或DNS生成SSL通配符证书
简介
Lego 实现 Let‘s Encrypt HTTPS 通配符证书。
Lego官方仓库地址
官方文档地址
下载安装
前往官方仓库Release页面下载,本文以lego v4.8.0
版本为例
1 | cd /usr/local/lego |
获取证书
获取证书有两种方式,一种HTTP和一种DNS。我更倾向于与DNS,因人而异。
HTTP方式
此方式为在服务器运行一个http服务后完成挑战进行获取证书,需服务器运行lego。
1 | 此命令会占用80端口 |
如果80端口被nginx占用了,可以在nginx.conf配置文件中的http块的server块中添加如下配置。
1 | location /.well-known/acme-challenge { |
执行完成后会在目录下生成一个.lego
文件夹,证书在其certificates
文件夹下,进入此文件夹找到证书example.com.crt
和example.com.key
后cp或者mv到需要的目录即可。比如/usr/local/nginx/conf/ssl/
下。
DNS方式
此方式为使用DNS TXT记录完成挑战获取证书
需要准备对应令牌,这里以腾讯云和Godaddy为例,其他服务商可参考官方文档配置。
1 | 令牌格式 |
1 | 令牌KEY |
如果有多个--domains
域名会将多个域名签进一个证书文件中。比如--domains="example.com"
和--domains="*.example.com"
获取的证书会是一个example.com.crt
证书,这个证书可以绑定其顶级域名和所有二级域名上,都可以用。
腾讯云使用--dns="dnspod"
,Godaddy使用--dns="godaddy"
,其他可以参考官方文档。
颁发证书
1 | lego --path="/usr/local/lego/.lego" -email="替换自己email地址" --domains="example.com" --domains="*.example.com" --accept-tos --dns="自己的域名服务商名" new |
续签证书,就是颁发命令后的new
替换为renew
1 | lego --path="/usr/local/lego/.lego" -email="替换自己email地址" --domains="example.com" --domains="*.example.com" --accept-tos --dns="自己的域名服务商名" renew --reuse-key |
编写脚本并定时检查续签
简单脚本
有时间添加,其实很简单,就是写个续签命令执行以下,然后通过cp命令将/usr/local/lego/.lego/certificates
下的证书拷贝至需要证书的目录即可,如nginx的配置目录。
定时
执行crontab -e
后再最后一行添加如下脚本。
每天0点自动执行
1 | 0 0 * * * /usr/local/lego/auto.sh > /usr/local/lego/auto.log 2>&1 |