如何配置LetsEncrypt并且自动更新证书
在使用服务器搭建网站时,需要给网站域名设置安全证书,来进行https
加密传输,保证网站安全
但是我们获取证书一般是在买域名的地方去获取,像我的域名是在阿里云买的,但是他提供的域名证书只有三个月的有效期,需要下载到主机然后手动部署,非常麻烦,我目前的解决方案是通过 Let's Encrypt
定期自动生成和更新证书,然后实现自动部署
首先回到机器,下载完成这些动作的客户端,网页在这
Let's Encrypt
推荐的是Cerbot
客户端,他还推荐了许多其他的
我用的比较多的是Bash
下的 acme.sh
脚本,脚本使用说明见这里 ,总共分三步:
1. 安装客户端
1 | #1. 下载自动安装客户端 |
2. 生成证书
生成证书需要先验证来验证你的域名所有权,方法有很多
DNS记录验证
添加特定的TXT记录到域名的DNS解析中,有时也要求添加CNAME记录或者A记录。验证时,系统会查询域名的DNS记录,确认是否存在指定的值。
优点:不需要访问服务器,只需要域名管理权限
缺点:DNS生效时间可能较长(通常几分钟到48小时)
文件验证
在域名关联的网站的根目录下上传一个指定名称的文件,文件内容由验证服务提供。验证时,系统访问文件的URL(例如
http://example.com/.well-known/acme-challenge/
)并检查内容。优点:简单快速,适合拥有服务器文件访问权限的用户。
缺点:需要对域名对应的网站具有管理权限。邮箱验证
向域名注册人邮箱发送一封验证邮件,要求点击其中的链接确认。
通常使用的邮箱包括
admin@domain.com
、hostmaster@domain.com
等。优点:适用于无法修改DNS或服务器配置的情况。
缺点:需要有权访问特定邮箱。…
这里我选择的是,DNS记录验证,acme.sh
首选的是文件验证,但是总会出先一些失败,所以干脆就用过程相对透明可控的 DNS记录验证,dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.
我在阿里云买的域名,这个是如何添加阿里云的API的方法
1 | export Ali_Key="<key>" |
3. 拷贝证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/
, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --install-cert
命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:
Nginx example :
1 | acme.sh --install-cert -d example.com \ |
4. 其他
其他更多操作见 https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E