明月发现最近在著名生产环境军哥 LNMP 一键安装包的论坛上看到很多站长们都在反映 LNMP 下使用 acme.sh 申请 Let's Encrypt 证书失败的提问帖子,自从 LNMP1.5 测试版发布后将 1.4 的 certbot 申请 Let's Encrypt 证书更换为 acme.sh 后,这类问题才突然增多了起来。certbot 是早期 Let's Encrypt 官方推荐的在服务器上在线申请管理 Let's Encrypt 证书方式,随着 GitHub 上的 acme.sh 脚本越来越完善,越来越多的受到了使用者们的追捧,因为 acme.sh 将在线申请管理维护绿色证书变的异常的简单高效了,最重要的是 acme.sh 脚本几乎不依赖服务器系统环境,完全独立运行,这点儿相对于 certbot 是最大的进步和变化了。
明月也一直非常喜欢使用 acme.sh 来申请管理 Let's Encrypt 证书,虽然 Let's Encrypt 仅有 90 天的有效期,但是借助 acme.sh 和 Linux 下的定时任务 crontab 基本上就是部署一次终身自动续期了。至于 acme.sh 的具体使用方法请参考【Linux 下使用 acme.sh 申请和管理 Let’s Encrypt 证书】一文即可,今天明月要给大家讲的是在使用 acme.sh 过程中比较常见的出错原因和解决方法,以便可以帮助到大家。
首先,明月早期都是自己安装 acme.sh 到 LNMP 环境里使用的,随着 LNMP 1.5 测试版发布上线,明月第一次使用 LNMP 里集成的 acme.sh 的时候也是出错,每次申请的时候都是提示“invalid domain”错误,可以说是百思不得其解,后来还是在军哥的提醒下想起来问题可能是出在 acme.sh 的 DNS 方式上,特别是使用了不同的云主机通过一个 DNS 解析 API 接口申请证书就会出现这个问题,问题的原因就是没有将云主机的 IP 地址加入到 DNS 解析 API 的白名单里,以明月使用的 CloudXNS 为例,设置 API 的 IP 白名单如下截图:
如果是多个云主机使用的是同一个 DNS 解析服务的话,就需要将多个云主机的公网 IP 加入到 DNS API 的白名单里,否则使用 acme.sh 的 DNS 方式申请就会出现“invalid domain”的提示。当然不同的 DNS 解析服务设定这个 IP 白名单的地方肯定也不一样的,大家可以参考 DNS 服务商的官方文档来了解具体的方法。
明月发现上述这个问题是个不小的“坑”,很多站长们都是栽倒在这个“坑”里了。
其它的常见问题一般也就是 acme.sh 脚本的升级和更新了,有时候某个版本会因为服务器网络环境造成一些请求失败,所以保证当前使用的 acme.sh 脚本是最新版的尤为重要,至于如何更新 acme.sh 脚本?大家自行百度、谷歌吧。
基本上上述两个常见问题解决掉也就可以顺利的申请获取到 Let's Encrypt 的 SSL 证书了,如果是比较另类的云主机或者云主机操作系统,建议大家到 acme.sh 脚本的 GitHub 上多看看,或者也可以到 LNMP 的官方论坛上传详细日志发帖求助。