ACME(自动证书管理环境)协议是一种用于自动化证书颁发和管理的协议,它最常用于Let’s Encrypt证书颁发机构(CA)来获取免费的SSL/TLS证书。以下是使用ACME协议通过Let’s Encrypt申请SSL证书的一般步骤:
准备工作
1、拥有域名控制权:确保你有权为申请证书的域名配置DNS记录。
2、服务器访问权限:需要有访问你服务器的能力,以便安装证书和配置Web服务器。
选择ACME客户端
选择一个ACME客户端,以下是一些流行的客户端:
Certbot
acme.sh
lego
traefik(适用于容器化环境)
本文以 acme.sh为例进行实现 acme.sh 是一个用 Shell 编写的 ACME 客户端,支持 ACME 协议,可以用来从 Let’s Encrypt 等证书颁发机构获取免费的 SSL/TLS 证书。以下是通过 acme.sh 申请 SSL 证书的步骤:
安装 acme.sh
首先,需要安装 acme.sh。这可以通过运行以下命令来完成:
bash
curl https://get.acme.sh | sh
or
wget -O - https://get.acme.sh | sh
这个命令会自动安装 acme.sh 到你的主目录下的 root/.acme.sh 目录中,并且会自动创建一个别名 acme.sh 到你的 .bashrc 或 .zshrc。
完成以上步骤后使用 acme.sh 申请证书
获取域名证书
使用 --issue 参数来申请证书。
以下是一个基本的例子,使用DNS 验证:
首先,你需要选择一个 DNS 提供商。acme.sh 支持多种 DNS 提供商,例如 Cloudflare、DNSPod、阿里云等。以下是通用的步骤,假设使用的是 阿里云:
在使用 acme.sh 与阿里云进行 DNS 验证时,需要提供阿里云的 API 密钥和密钥秘钥。以下是配置阿里云 API 密钥和密钥秘钥以及申请证书的步骤:
- 获取阿里云 API 密钥 首先,你需要在阿里云控制台创建一个具有 DNS 管理权限的 RAM 用户,并获取 AccessKey(访问密钥)和 AccessKeySecret(访问密钥秘钥),这些信息非常敏感,不要将其泄露给他人。。
- 设置环境变量 在命令行中设置以下环境变量,将 <AccessKey> 和 <AccessKeySecret> 替换为你从阿里云获取的值: Bash
export Aliyun_Api_Key="your-access-key"
export Aliyun_Api_Secret="your-access-key-secret"
- 申请证书
使用以下命令来申请证书:
Bash
acme.sh --issue --dns dns_ali -d example.com -d www.example.com
这里的 dns_ali 是 acme.sh 为阿里云提供的 DNS 插件名称。
- 安装证书
申请成功后,使用以下命令将证书安装到你的服务器上:
Bash
acme.sh --install-cert -d example.com \
--cert-file /path/to/cert.cer \
--key-file /path/to/key.key\
--fullchain-file /path/to/fullchain.cer\
--reloadcmd "service nginx force-reload"
确保将 /path/to/ 替换为你的实际路径,并根据你的服务器配置调整 --reloadcmd。
5. 自动续期
如前所述,设置一个定时任务来自动续期证书:
acme.sh --cron --home /root/.acme.sh
并将此命令添加到 crontab 中:
Bash
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
**注意事项**
不要在公共场合或可分享的脚本中直接使用 API 密钥和密钥秘钥,因为这可能会导致安全问题。
如果你想要避免在命令行中直接输入敏感信息,你可以选择设置环境变量,但这需要确保环境变量只在安全的环境中设置,并且不会被泄露。
确保你的阿里云 RAM 用户有足够的权限来管理 DNS 记录。
请按照这些步骤操作,如果还有问题,请检查 acme.sh 的官方文档或阿里云的相关文档以获取更详细的信息。








