使用acme.sh自动部署Let’s Encrypt证书
TLS-SNI-01已经deprecated,但certbot尚不支持tls-alpn-01验证方法,因此可以使用dehydrated或者acme.sh通过https来获取Let’s Encrypt证书。
下面使用acme.sh,由于使用80,443端口的权限,拷贝证书文件的权限以及reload nginx的权限等问题,使用acme.sh正确的姿势应该是使用root账户来运行。
安装
1 | # curl https://get.acme.sh sh |
如果使用acme.sh standalone方式来获取证书,还需要安装socat
1 | $ sudo apt install socat |
http方式获取证书
http验证支持standalone、webroot或webserver(apache,nginx)方式获取证书,获取证书的过程不会破坏系统环境。
standalone方式,acme.sh会启动一个使用80端口的web server
1 | # acme.sh --issue -d mydomain.com --standalone |
80端口需要特权用户才能监听
webroot方式,指定正在运行的网站的root目录
1 | # acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/ |
webserver方式,指定使用的web server,目前支持apache和nginx
1 | # acme.sh --issue -d mydomain.com --apache |
默认申请的是RSA证书,acme.sh同样支持申请ECC证书,只要添加额外的--keylength
参数即可,支持申请256和384位的ECC证书
1 | # acme.sh --issue -d mydomain.com --standalone --keylength ec-256 |
安装证书
1 | # acme.sh --installcert -d mydomain.com \\ |
自动更新证书
acme.sh自动安装了crontab入口,acme.sh会自动记录下申请证书和安装证书的命令,所以会在设定的周期内自动自行这些指令。
手动更新证书
1 | # acme.sh --renew -d example.com --force |
或者ECC证书
1 | # acme.sh --renew -d example.com --force --ecc |
acme.sh自动更新
1 | # acme.sh --upgrade --auto-upgrade |
关闭自动更新
1 | # acme.sh --upgrade --auto-upgrade 0 |
手动更新
1 | # acme.sh --upgrade |
卸载
1 | # acme.sh --uninstall |
References:
[1]Deploying Let’s Encrypt certificates using tls-alpn-01 (https)
[2]使用TLS-ALPN-01验证签发证书
[3]dehydrated
[4]acme.sh
[5]TLS ALPN without downtime
[6]acme.sh中文说明