acme.sh安装与使用
一、前言
acme.sh 是一款基于 ACME 协议的开源免费SSL证书申请工具,支持Let’s Encrypt、ZeroSSL等多个CA机构,无需依赖复杂依赖库,操作简单且支持自动续期,是个人开发者和中小企业获取免费SSL证书的首选工具。本文将详细讲解其完整安装、配置及证书申请、部署流程,重点覆盖Cloudflare DNS验证方式(适配无公网IP或不想开放80/443端口的场景)。
二、安装 acme.sh
acme.sh 安装过程简洁,仅需依赖基础工具,支持主流Linux发行版(Ubuntu、CentOS、Debian等)。
2.1 安装前置依赖
acme.sh 依赖 curl(用于下载安装脚本)和 socat(用于部分验证模式),先执行以下命令安装:
1 | apt-get install curl socat -y # Debian/Ubuntu系列 |
2.2 安装 acme.sh 核心工具
使用官方提供的一键安装脚本,自动完成安装及环境变量配置:
1 | curl https://get.acme.sh | sh |
2.3 解决「命令未找到」问题
安装完成后,若直接执行 acme.sh 提示“命令未找到”,原因是环境变量配置未即时生效。需根据当前使用的Shell类型执行对应命令:
1 | source ~/.bashrc # Bash Shell(大部分系统默认) |
若仍无法识别,可手动创建软链接(需替换实际安装路径,默认路径通常为 ~/.acme.sh/acme.sh):
1 | ln -s ~/.acme.sh/acme.sh /usr/local/bin/acme.sh |
验证安装成功:执行 acme.sh --version,若输出版本信息则说明安装正常。
三、核心配置
申请证书前需完成两项关键配置:DNS API授权(本文以Cloudflare为例)、指定CA机构(适配acme.sh V3版本默认CA变更)。
3.1 配置Cloudflare DNS API(推荐)
采用DNS验证模式无需开放服务器80/443端口,适合内网服务器或端口被占用的场景。若域名DNS由Cloudflare托管,需配置其API密钥授权acme.sh自动添加解析记录。
步骤:
登录Cloudflare账户,进入「我的个人资料」→「API令牌」,创建一个具备「Zone.DNS」编辑权限的令牌(或直接使用「全局API密钥」,安全性略低);
在服务器中执行以下命令,设置环境变量(替换为实际的API密钥和邮箱):
1 | export CF_Key="你的Cloudflare API令牌/全局密钥" |
注:该环境变量仅在当前终端会话有效,若需永久生效,可将上述命令添加到 ~/.bashrc 或对应Shell的配置文件中。
3.2 配置CA机构(acme.sh V3版本必看)
acme.sh V3版本后,默认CA机构从Let’s Encrypt切换为ZeroSSL。若需使用Let’s Encrypt(兼容性更广),需手动切换,两种方式可选:
方式1:设置默认CA为Let’s Encrypt(全局生效)
1 | acme.sh --set-default-ca --server letsencrypt |
方式2:申请证书时临时指定CA(单次生效)
在后续--issue 命令后添加 --server letsencrypt 参数即可。
参考链接:
四、获取SSL证书
核心流程:先通过 --issue 命令验证域名所有权并申请证书,再通过 --install-cert 命令将证书部署到目标服务(Nginx/Apache等)。
4.1 验证域名并申请证书(Cloudflare DNS模式)
执行以下命令,使用Cloudflare DNS验证方式申请ECC类型证书(ECC证书体积小、加密效率高,推荐优先使用):
acme.sh –issue –dns dns_cf -d yourdomain.com -k ec-256
参数详解:
--issue:核心参数,表示申请证书-d yourdomain.com:指定要申请证书的域名,多域名可叠加-d www.yourdomain.com -d api.yourdomain.com--dns dns_cf:指定使用Cloudflare DNS验证模式(其他DNS服务商可参考 官方dnsapi文档)-k ec-256:指定证书密钥算法为ECC,密钥长度256位;若需RSA证书,可改为-k 2048(2048位足够安全,4096位兼容性略差)
执行成功后,证书文件会默认保存在~/.acme.sh/yourdomain.com/ 目录下。
4.2 安装证书到目标服务
申请到证书后,需将证书文件复制到服务的指定目录(如Nginx的 /etc/nginx/ssl/),并配置服务加载证书。acme.sh 提供 –install-cert 命令一键完成复制,并支持续期后自动重载服务。
1 | acme.sh --install-cert -d yourdomain.com \ |
参数详解:
--install-cert:核心参数,表示安装/部署证书-d yourdomain.com:指定对应域名(需与申请时一致)--fullchain-file:指定全链证书(包含服务器证书和中间证书)的目标路径,服务端需加载该文件--key-file:指定证书私钥的目标路径--ecc:声明当前安装的是ECC证书(若申请的是RSA证书,需删除该参数)--reloadcmd:证书续期后自动执行的命令(此处为重启Nginx,Apache可改为 “systemctl restart apache2”)
五、证书自动续期与管理
5.1 自动续期(默认开启)
acme.sh 安装时会自动添加crontab定时任务,默认每60天检查一次证书有效期,若剩余有效期小于30天则自动续期。可通过以下命令查看定时任务:
1 | crontab -l |
典型的定时任务内容:
1 | 0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null |
5.2 手动续期(测试用)
若需测试续期功能,可执行以下命令手动触发续期:
1 | acme.sh --renew -d yourdomain.com --ecc # ECC证书 |
5.3 查看已申请的证书
1 | acme.sh --list |
5.4 revoke(吊销)证书
1 | acme.sh --revoke -d yourdomain.com --ecc # ECC证书 |
六、常见问题与注意事项
权限问题:证书安装路径(如
/etc/nginx/ssl/)需确保acme.sh有写入权限,建议提前创建目录并设置权限:mkdir -p /etc/nginx/ssl && chmod 755 /etc/nginx/ssl。DNS验证失败:检查Cloudflare API密钥是否正确、域名是否托管在Cloudflare,若提示“解析记录添加失败”,可等待1-2分钟后重试(DNS缓存问题)。
CA机构切换后生效:切换CA机构后,首次申请新证书时生效,已申请的证书续期时需指定对应CA(或重新设置默认CA)。
避免直接修改证书文件:acme.sh 续期后会自动覆盖
--install-cert指定的路径文件,无需手动修改。
七、总结
acme.sh 凭借轻量化、自动化的优势,极大降低了免费SSL证书的申请和管理门槛。本文通过Cloudflare DNS验证方式,实现了无端口依赖的证书申请,适配多数场景;同时补充了自动续期、服务重载等关键配置,确保证书长期有效。若使用其他DNS服务商,可参考官方dnsapi文档替换对应验证方式,核心流程保持一致。