已经2023年了,SSL证书对于网站是标配,而免费申请续期的申请方式受大家喜爱。近日,遇到了些许问题,记录如下。
业务是做物联网平台和模组的,从软件、硬件、APP都是公司定制开发。今年以来,国家陆续出台了关于APP备案要求,而该要求需要进行域名备案,且调用API的时候需要使用这些域名,且配置SSL证书。按照惯例,需要为用户申请papi、newapi、appstatic等一些列域名,这三个二级域名需要SSL证书。
按照经验,申请SSL证书只需要如下几个步骤:
- 用户拥有域名a.cn
- 将papi、newapi、appstatic三个域名分别以CNAME的形式指向已有域名(假设b.cn)。
- 增加_acme-challenge二级域名也以CNAME的形式指向(_acme-challenge.b.cn)。
- 登录hk服务器,使用acme.sh脚本进行申请。
docker run --rm -it -v "$(pwd)/out":/acme.sh --net=host -e Ali_Key="xxx" -e Ali_Secret="xxx" neilpang/acme.sh:latest --issue -d a.cn --challenge-alias b.cn --dns dns_ali --server https://acme-v02.api.letsencrypt.org/directory --ecc --dnssleep 20
本来以为很简单的例行工作,实际上上面的第4步会报错。
Invalid status, a.cn: Verify error detail:No TXT record found at_acme-challenge.a.cn
从11月6日至7日,试验了多次,依旧是这个报错。但是使用同样的方法用于别的域名确是可以的。
既然不行,那就先用别的方法进行。
上面采用的是acme协议中的dns验证方式,且是challenge-alias的形式,那么我们可以尝试使用http的方式(三个二级域名已经进行了解析)。
进行这个配置业务难,而且还使用了bt面板进行图形化部署。
首先我们在国内API服务器里面,配置虚拟主机,并在server字段增加如下内容,用于acme http模式验证
location /.well-known {
proxy_pass http://$hk_vm_ip_address;
proxy_set_header Host $host;
}
然后,我们在hk云主机的bt面板里面,增加1个网站,配置域名appstatic.a.cn papi.a.cn newapi.a.cn。然后切换到SSL配置页面->Letsencrypt页面,选中要为三个域名申请1张证书,点击申请。
等待一会儿后,就拿到了证书。
在bt面板网站管理页面,通过查看配置,可以看到申请到的证书的具体路径。登录国内Nginx服务器,将申请好的远端证书下载过来,然后就完成了。
nginx -t
nginx -s reload