配置 ACME.sh 实现证书自动化签发封面图

配置 ACME.sh 实现证书自动化签发

由于我平时运维服务器经常会遇到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 keyAccount 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会自动续签证书并重载服务,不再需要人为干预证书相关的更新问题了。

评论区 (0)