ACME通过dns验证申请Let’s Encrypt免费ssl证书

2024-03-02 11:13:12 浏览数 (2)

这么多年来我还是第一次用Let’s Encrypt的证书呢,以前买过2年,后面就一直在腾讯云和阿里云申请免费的ssl证书。

今天是搭建新服务器环境,就趁机试下,刚好我也想测试下cloudns家的api,这不就巧了,查了下资料就顺手记录一下,由于我也是刚用,所以3个月会不会自动更新,我暂时也不知道,反正按照文档操作的。

1、安装Acme脚本

代码语言:javascript复制
curl https://get.acme.sh | sh
#或者
curl  https://get.acme.sh | sh -s email=my@example.com
#my@example.com (你自己的邮箱)

安装之后会在你服务器的root文件夹里面出现一个文件夹: .acme.sh (看你自己服务器环境配置)

2、更改默认证书机构

代码语言:javascript复制
acme.sh --set-default-ca  --server  letsencrypt

acme现在默认申请的是ZeroSSL,但是ZeroSSL不太稳定,所以换成letsencrypt家的。

3.1、申请ssl证书(http网站目录验证方式)

需要你把域名先解析到你服务器的网站上,然后用这个网站目录去申请。

比如:网站目录是jingxialaiweb,先把jingxialai.com域名直接解析到服务器的ip上,访问jingxialai.com是出现jingxialaiweb目录里面的网站内容才行,

代码语言:javascript复制
acme.sh --issue -d jingxialai.com -d www.jingxialai.com --webroot /data/wwwroot/jingxialaiweb

申请成功之后在 .acme.sh文件夹里面就有对应jingxialai.com_ecc的文件夹,里面有几个文件,我们只需要用到jingxialai.com.cer和jingxialai.com.key就行。

3.2、申请ssl证书(dns域名验证方式)

这个就是我想要的,我域名在cloudns,所以需要先去添加一个api和密码,然后拿到api和密码之后再操作。

代码语言:javascript复制
export CLOUDNS_AUTH_ID=1
export CLOUDNS_AUTH_PASSWORD="11111"

CLOUDNS_AUTH_ID就是auth-id,CLOUDNS_AUTH_PASSWORD就是对应设置的密码,然后再执行申请命令:

代码语言:javascript复制
acme.sh --issue --dns dns_cloudns -d jingxialai.com -d www.jingxialai.com
#或者
acme.sh --issue --dns dns_cloudns -d jingxialai.com -d *.jingxialai.com
#通过api的方式支持通配符

如果api和密码正确,就等个几分钟,成功之后会显示Cert success,然后你在.acme.sh文件夹里面也能看见对应ssl证书的文件夹。

因为自动生成的证书都在~/.acme.sh/文件夹里面,我们需要把证书移动到你环境里面的ssl文件夹去,但是不能手动移动,需要用acme.sh自己的命令才行,手动移动就不能自动更新了,用到的命令:

代码语言:javascript复制
acme.sh --install-cert -d jingxialai.com 
		--key-file   /usr/local/nginx/conf/ssl/jingxialai.com.key  
		--fullchain-file /usr/local/nginx/conf/ssl/jingxialai.com.cer 
		--reloadcmd     "service nginx force-reload"

这个/usr/local/nginx/conf/ssl/文件夹路径,是根据你自己的来,nginx具体怎么配置ssl证书就不说了,我网站以前发过,不过很多年了,我们旗下有个教程网站,后期会更新相关教程。

4、自动更新ssl证书

我们可以先看定时任务:crontab -l

里面会有相关的命令,比如我今天测试这个是:

代码语言:javascript复制
52 13 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

再设置一下acme.sh更新,因为经常变协议,所以还是设置下自动更新比较好。

代码语言:javascript复制
acme.sh --upgrade --auto-upgrade
#自动更新
acme.sh --upgrade
#手动更新

查看证书列表:

代码语言:javascript复制
source ~/.bashrc
acme.sh --list

删除域名:

代码语言:javascript复制
acme.sh --remove -d jingxialai.com 

如果在用的时候出现什么错误,可以开启debug模式

代码语言:javascript复制
acme.sh --issue  .....  --debug 2

我是看了文档,也看了其他人的教程,综合了一下,会不会自动更新,我暂时也不知道,3个月后看吧。

参考:

https://github.com/acmesh-official/acme.sh/wiki/dnsapi

https://www.cloudns.net/wiki/article/186

0 人点赞