【开发日记】利用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. 自动化续期证书

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

### 使用 acme.sh 在 Linux 上生成适合中国环境的 SSL/TLS 证书 #### 安装 acme.sh 为了在 Linux 环境中使用 `acme.sh` 来获取 SSL/TLS 证书,首先需要安装该工具。可以通过以下命令来完成安装: ```bash curl https://get.acme.sh | sh ``` 这会自动下载并配置好 `acme.sh` 工具。 #### 配置 DNS API 接口 对于中国大陆用户而言,通常会选择阿里云作为域名服务提供商。因此,在申请证书前需先设置好相应的 DNS API 接口以便验证域名所有权。具体操作如下所示: ```bash export Ali_Key="your_ali_key" export Ali_Secret="your_ali_secret" ``` 这里的 `Ali_Key` 和 `Ali_Secret` 是指从阿里云账户获得的访问密钥信息。 #### 请求新的 SSL 证书 当完成了上述准备工作之后就可以正式向 Let's Encrypt 发起请求以获取所需的 SSL 证书了。下面是一个简单的例子展示如何为单个域名申请通配符类型的证书: ```bash acme.sh --issue --dns dns_ali -d *.example.com ``` 此命令将会通过阿里云提供的 DNS 解析接口来进行域名验证,并最终得到一张有效期为90天的标准 X.509 数字证书[^1]。 #### 自动化续期机制 考虑到所颁发出来的每张证书都有固定的生命周期(通常是三个月),所以建议开启自动化更新功能以免过期造成不必要的麻烦。可以利用系统的定时任务计划程序 Cron 实现这一目标: ```bash sudo crontab -e ``` 接着加入一行类似于这样的条目用于每天凌晨两点钟执行一次检查工作: ```cron 0 2 * * * "/home/user/.acme.sh/acme.sh" --cron --home "/home/user/.acme.sh" > /dev/null ``` 这样就能确保即使管理员忘记手动处理也能保持网站始终处于安全连接状态之下[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

二饭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值