【开发日记】利用acme.sh获取免费泛域名SSL证书


acme.sh是一个利用 ZeroSSL Let's Encrypt等受信任证书颁发机构(CA)自动化提供免费 SSL/TLS 证书的工具,可以用来部署 HTTPS,比 certbot还要好用。

单域名SSL证书只能对指定的域名部署HTTPS,比如你对域名example.com部署了单域名SSL证书,test.example.com还得再申请一个新的单域名SSL证书来部署HTTPS。

泛域名证书可以对*.example.com的所有子域名提供部署HTTPS,只需要一个SSL证书就可覆盖所有example.com下的子域名,如:test.example.comabc.example.com等。

1. 下载acme.sh

① 命令方式下载:

最方便的方式是使用以下命令安装

curl https://get.acme.sh | sh

但该方式使用的源是Github,没有科学上网可能会导致无法下载,可以通过访问国内的Gitee下载。

② 国内源Gitee手动下载:

Gitee地址:https://gitee.com/neilpang/acme.sh

使用Git克隆仓库文件到本地,或直接下载zip到本地后上传到你的服务器,反正最终的效果就是你要把这个仓库里的每一个文件都要弄到你的服务器中去。

2. 安装cron和socat

这两个应用是acme.sh依赖的,如果没有的话安装acme.sh时会警告。

apt update && apt install cron -y && apt install socat -y

3. 安装acme.sh

进入下载下来的acme.sh文件夹根目录执行以下命令:

./acme.sh --install

4. 重新加载环境变量

重新加载环境变量(或重新登录),不重新加载的话无法使用acme.sh命令。

下面的命令只需要执行其一即可,根据自己的情况:

source ~/.bashrc  # 适用于 bash
source ~/.zshrc   # 适用于 zsh

5. 注册ZeroSSL或切换默认CA为Let’s Encrypt

acme.sh3.0版本之后默认的CA是ZeroSSL,首次使用需要进行注册。

acme.sh --register-account -m 这里写你的邮箱

② 或者也可以切换默认CA为Let’s Encrypt。

acme.sh --set-default-ca --server letsencrypt

6. 设置DNS API配置到环境变量

根据不同的DNS服务商有不同的环境变量配置要求,acme.sh 目前支持超过一百家的 DNS API,访问以下链接可以查看你的域名托管服务商的相关配置:

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

这里以腾讯云和华为云举两个例子:

① 腾讯云,需要依次执行以下命令

export Tencent_SecretId="<Your SecretId>"
export Tencent_SecretKey="<Your SecretKey>"

登录腾讯云控制台,进入访问管理页面,进入访问密钥菜单栏下的API密钥管理可新建密钥,将对应的SecretIdSecretKey替换到上面命令中。

② 华为云,需要依次执行以下命令

这里以华为云为例,依次执行以下命令添加临时环境变量:

export HUAWEICLOUD_Username="<Your IAM Username>"
export HUAWEICLOUD_Password="<Your Password>"
export HUAWEICLOUD_DomainName="<Your DomainName>"

HUAWEICLOUD_Username是你的账户名称,如果是子账号则填写子账号。

HUAWEICLOUD_Password是账号的登录密码,可以尝试去华为云官网登录一下。

HUAWEICLOUD_DomainName也是账号名称。

可通过华为云提供的参数说明文档找到这些参数:https://support.huaweicloud.com/api-iam/iam_01_0006.html

7. 生成SSL证书

这里以example.com为例生成SSL证书,这里生成的是泛域名证书,但必须同时有example.com*.example.com。并且example.com必须在前,否则你会发现即使签发成功了也没有任何文件输出。

./acme.sh --issue --dns dns_huaweicloud -d example.com -d *.example.com

8. 手动配置证书

生成SSL证书后在/root/.acme.sh/你的域名_ecc/目录下可以看到证书等文件。

将其中的证书、私钥复制到你Nginx配置证书的目录下,下面是复制命令示例:

cp fullchain.cer /docker/nginx/work/crt/
cp 域名.key /docker/nginx/work/crt/

Nginx中配置证书:

http {
  # ... 这里省略...
  server {
    listen 443 ssl;
    server_name  域名;
    # ... 这里省略...

    # SSL证书配置
    ssl_certificate /work/crt/fullchain.cer;
    ssl_certificate_key /work/crt/域名.key;

    # ... 这里省略...
  }
  # ... 这里省略...
}

9. 自动化部署证书

执行以下命令自动化部署证书:

acme.sh --install-cert -d "example.com" --ecc \
  --cert-file /docker/nginx/work/crt/cert.pem \
  --key-file /docker/nginx/work/crt/key.pem \
  --fullchain-file /docker/nginx/work/crt/fullchain.pem \
  --reloadcmd "docker restart nginx"

参数解释:

/docker/nginx/work/crt/cert.pem是部署后的域名证书地址。

/docker/nginx/work/crt/key.pem是部署后的私钥地址。

/docker/nginx/work/crt/fullchain.pem是部署后的域名证书及中间证书地址。

cert.pemfullchain.pem的区别是如果你的域名证书是某个中间CA签发的,而这个中间CA又是受信任的根 CA 签发或信任的,fullchain.pem把这些拼接起来,让客户端可以一步搞定信任验证。

执行后如果提示:It seems that tworice.cn is an IDN( Internationalized Domain Names), please install 'idn' command first.

执行以下命令安装idn即可:

apt install -y idn

10. 自动化续期证书

这个放在下一期文章讲,文章太长了,不利于阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值