踩坑---微信小程序中用Caddy实现TLS

踩坑---微信小程序中用Caddy实现TLS

一、背景

最近在开发一个小程序,用于上报药品不良反应案例信息,==计划项目完成后将其开源==。当与后端做数据交互时,避免不了要用到https,这些都是很常规的操作,把证书申请好(不管是收费或者是免费都行),然后在nginx或caddy里做反代。

本项目用的是caddy,配置很简单(证书申请过程略,网上有大把教程),如下:

{
  ......
  tls cert.pem privkey.pem
  handle_path /test {
    respond 'test ok'
  }
}

浏览器测试 https://xxxx.com/test,能正常打开,而且页面上证书显示也没问题。但是,当小程序里用wx.request请求数据时,直接返回600001(request:fail -2:net::ERR_FAILED)错误,caddy上查看logs,只看到hello 之类的tls握手消息 ,没看到具体请求的信息,说明证书可能有问题?

二、 排查解决

可是caddy日志也没具体报错信息,微信小程序那边调试也没发现问题,showrequestinfo()可以看到securityState为空,也就是证书不正常,实在不知哪里出问题了,毕竟证书没过程。这里热腾了很久...

image-20240301001842367

到了下午,决定先看下官方文档,微信小程序开发文档上有告知建议用==完整的证书链==,然后又看了下Caddyfile配置文件,才晃然想起证书中还有个fullchain.pem没用到。于是兴冲冲的用fullchain.pem替换cert.pem,重新启动caddy,直接报错。不至于啊,之前在某个项目(nginx)上也有直接用fullchain.pem才解决证书问题,到这里就不行了? 百度、google找了很久,都没找到解决方法。

后来直接按600001,xxx错误搜索,果然别人也遇到了,是中间证书的问题。测试网址:https://www.myssl.cn/tools/check-server-cert.html,我这里也是同样的问题。

image-20240301002335614

虽然知道了问题所在,但此时怎么去解决还是茫然的,因为我的fullchain.pem用不了(==网上大神的帖子中fullchain是两段,要改成三段,但我的默认就是三段了==),caddy官网也没介绍怎么用fullchian.pem。

又过了几个小时,突然想起现有的证书fullchain会不会有问题? 于是重新申请证书,直接用fullchain.pem,竟然成功启动caddy服务了!测试网页和小程序都能正常显示,好开森!

非80端口的更新证书需用DNS方式,certbot certonly --preferred-challenges dns --manual -d xxx.com

详见我之前一篇文章certbot certonly 自动获取证书非80端口的坑

评论已关闭