已经2023年了,SSL证书对于网站是标配,而免费申请续期的申请方式受大家喜爱。近日,遇到了些许问题,记录如下。
业务是做物联网平台和模组的,从软件、硬件、APP都是公司定制开发。今年以来,国家陆续出台了关于APP备案要求,而该要求需要进行域名备案,且调用API的时候需要使用这些域名,且配置SSL证书。按照惯例,需要为用户申请papi、newapi、appstatic等一些列域名,这三个二级域名需要SSL证书。

按照经验,申请SSL证书只需要如下几个步骤:

  1. 用户拥有域名a.cn
  2. 将papi、newapi、appstatic三个域名分别以CNAME的形式指向已有域名(假设b.cn)。
  3. 增加_acme-challenge二级域名也以CNAME的形式指向(_acme-challenge.b.cn)。
  4. 登录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
最后修改:2023 年 11 月 07 日
如果觉得我的文章对你有用,请随意赞赏