acme.sh入门教程
acme.sh域名鉴权方式
由项目的wiki可知:acme.sh内置两种鉴权方式:http 和 dns 验证
- http验证(webroot模式):有些地方会称为“文件验证”,验证方式是在你的网站根目录下放置一个文件, 来验证你的域名所有权。
- dns验证(dnsapi模式):验证方式是去你域名解析接入商那里添加一条TXT的记录指向指定的值。
两种验证的使用方式
http验证一般比较便利,不需要你去acme里配置任何东西,所以一般都是使用这个去进行证书申请鉴权的。
⚠️ 大陆的网络环境下往往会报验证错误而无法成功申请证书。因为acme会使用cloudflare或google的dns服务器去验证解析是否生效,而google和cloudflare的dns服务在大陆往往不能访问会造成申请失败。但是这个功能在acme的执行过程中不是必要的,所以这时需要我们手动增加一个配置项来跳过public dns check即可。(官方文档中说的是In dns mode会有public dns check,但是我实际使用中http验证过程中也会有public dns check)
🌰 具体做法为:在
.acme.sh/account.conf
配置文件末尾增加Le_DNSSleep='30'
官方的说法为Then acme.sh will wait for 300 seconds instead of checking through the public dns.
在我实际测试中没必要一定设置为300。推荐使用修改配置文件的方式使全局生效
dns验证稍微麻烦一点,它需要你去配置域名解析服务商的api操作的密钥。目前支持的厂商有
cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商
具体支持的厂商和用法请查看 wiki 。(申请泛域名证书时必须使用该方式)🌰 他的原理其实就是拿到你解析服务商的操作密钥去调用API自动添加TXT解析记录来验证域名的所属权。
我的建议是:除非你需要使用泛域名证书,否则没必要使用dns方式,配置复杂是次要的,主要还是怕API密钥在不经意间被泄漏而造成不必要的麻烦。(这里不是指acme泄露密钥,主要是说你自己不经意间的泄漏)