使用acme.sh配置SSL证书
第一次使用 acme.sh 的时候,各种教程翻来覆去,总给我一个看懂了但有没啥用的感觉
(脑子:我会了;手:不,你没有!)
PS:这篇博客没啥用,acme.sh的官方WiKi更详细
安装acme.sh
curl https://get.acme.sh | sh -s email=输入自己的邮箱
手搓代码,一键将 acme.sh 安装在当前用户的家目录下,即~/.acme.sh
安装完成后添加环境变量:
1 | vim ~/.bashrc |
设置默认CA
acme.sh 在 v3.0 以上的版本使用 ZeroSSL 作为默认CA,如果需要更改,使用以下命令:
1 | # 改为Let's Encrypt |
颁发SSL证书
acme.sh 有两种方式,可细分为三种,请按照需要直接跳转到需要到方式查看对应的文字
1. HTTP方式
该方式只需指定域名和域名所在的网站根目录,并且需要开启80端口,保证端口空闲即可,然后使用以下命令颁发证书:
1 | acme.sh --issue -d 域名 --webroot 域名根目录 |
2. 手动DNS方式
手动DNS即手动添加一条TXT解析记录
,该方式无法自动更新证书
- 生成TXT解析记录
1 | acme.sh --issue --dns -d 域名 \ |
输出如下:
1 | <省略> |
-
向DNS解析添加TXT记录
按照其输出,在名称填入_acme-challenge.mydomain.com
,值填入uWWS6tp3g8vusnS5P5HaMr5w4He6mXroDDkofALCCpU
-
验证DNS记录并颁发证书
1 | acme.sh --issue --dns -d 域名 \ |
3. 自动DNS方式
即使用DNS API自动添加TXT记录并完成验证
注:Freenom注册的 tk / ml / ga / cf / gq 等免费域名无法使用API验证
- 获取域名提供商API的
ID
与KEY
,以CloudFlare为例
Cloudflare有全局API密钥和API令牌之分,安全起见,推荐使用API令牌
点击进入我的个人资料 ⇒ API令牌 ⇒ 创建令牌
创建自定义令牌,权限为区域,DNS的读取和编辑权限
显示摘要,确认创建
复制API令牌,该令牌只显示一次
- 将API令牌写入环境变量
1 | export CF_Token="API令牌" |
- 颁发证书
1 | acme.sh --issue --dns dns_cf -d 域名 |
不同的DNS解析商的环境变量不同,下表列出几个常用DNS解析商,具体访问acme.sh WIKI
DNS | 环境变量名 | –dns |
---|---|---|
CloudFlare | CF_Token; CF_Account_ID | dns_cf |
DNSPod.cn | DP_Id; DP_Key | dns_dp |
Aliyun | Ali_Key; Ali_Secret | dns_ali |
Amazon Route53 | AWS_ACCESS_KEY_ID; AWS_SECRET_ACCESS_KEY | dns_aws |
安装证书
1 | acme.sh --install-cert -d 域名 \ |
更新证书
除手动添加DNS生成证书之外,acme.sh会自动更新证书,仅需保证定时程序cron/crontab等安装正确即可
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我的测试!
评论