由于我平时运维服务器经常会遇到ACME.sh的证书签发和配置需求,每次去查资料,问AI并不是很方便,而且得到的信息也是零零散散,经常浪费无谓的时间,不够高效和优雅。所以,我决定写一篇文章来把常见的用法一次性全部记录,方便我后续快速查阅和使用。
安装ACME.sh
系统装上wget后,用下面的命令一键安装:
wget -O - https://get.acme.sh | sh -s email=chocola@nekopara.uk开启ACME.sh自动升级
/root/.acme.sh/acme.sh --upgrade --auto-upgrade配置Nginx
如果是需要签发IP证书或者使用HTTP验证的方式签发单域名证书,则需要配置Nginx。
修改的文件为默认的配置文件,对于Alpine Linux,配置文件位于/etc/nginx/http.d/default.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
# ACME 验证路径
location ~ ^/.well-known/acme-challenge/ {
root /data/www;
add_header Content-Type text/plain;
allow all;
}
# 其他请求跳转 HTTPS
location / {
return 302 https://$host$request_uri;
}
}别忘了创建用于HTTP验证的网站目录:
mkdir -p /data/www签发IP证书
对于需要签发IP证书的情况,使用下面的命令进行签发:
/root/.acme.sh/acme.sh --issue -d 119.8.185.128 --webroot /data/www --server letsencrypt --certificate-profile shortlived --days 5其中119.8.185.128是我的服务器IP,你需要根据实际情况换成你自己的服务器IP。
HTTP验证签发域名证书
对于需要用HTTP验证签发单域名证书的情况,使用下面的命令进行签发:
/root/.acme.sh/acme.sh --issue -d www.nekopara.uk -d nekopara.uk --webroot /data/www其中www.nekopara.uk是我的网站域名,你需要根据实际情况换成你自己的域名。
DNS验证签发域名证书
对于使用DNS验证签发域名证书的情况,不同的DNS服务商配置方法有所差异。
使用Cloudflare的情况
首先需要获取你的API key和Account ID,在命令行导入你的API信息:
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"然后签发证书:
/root/.acme.sh/acme.sh --issue --dns dns_cf -d nekopara.uk -d '*.nekopara.uk'使用HuaweiCloud的情况
首先需要获取你的IAM用户名和密码,在命令行导入你的IAM用户信息:
export HUAWEICLOUD_Username="<Your IAM Username>"
export HUAWEICLOUD_Password="<Your Password>"
export HUAWEICLOUD_DomainName="<Your DomainName>"然后签发证书:
/root/.acme.sh/acme.sh --issue --dns dns_huaweicloud -d nekopara.uk -d '*.nekopara.uk'安装证书
签发完成后,通过以下命令安装证书:
/root/.acme.sh/acme.sh --install-cert -d nekopara.uk -d "*.nekopara.uk" --key-file /data/certs/nekopara.uk.key --fullchain-file /data/certs/nekopara.uk.pem --reloadcmd "rc-service nginx restart"对于后面的重启命令,如果有多条,可以用;隔开,例如:--reloadcmd "rc-service nginx restart;rc-service apache restart"
至此,证书部署完成。后续ACME.sh会自动续签证书并重载服务,不再需要人为干预证书相关的更新问题了。