最近在开发一个小程序,用于上报药品不良反应案例信息,计划项目完成后将其开源。当与后端做数据交互时,避免不了要用到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
为空,也就是证书不正常,实在不知哪里出问题了,毕竟证书没过程。这里热腾了很久...
到了下午,决定先看下官方文档,微信小程序开发文档上有告知建议用完整的证书链,然后又看了下Caddyfile配置文件,才恍然想起证书中还有个fullchain.pem
没用到。于是兴冲冲的用fullchain.pem
替换cert.pem
,重新启动caddy,直接报错。不至于啊,之前在某个项目(nginx)上也有直接用fullchain.pem
才解决证书问题,到这里就不行了?百度、google找了很久,都没找到解决方法。
后来直接按600001,xxx错误
搜索,果然别人也遇到了,是中间证书的问题。测试网址:https://www.myssl.cn/tools/check-server-cert.html,我这里也是同样的问题。
虽然知道了问题所在,但此时怎么去解决还是茫然的,因为我的fullchain.pem
用不了(网上大神的帖子中fullchain是两段,要改成三段,但我的默认就是三段了),caddy官网也没介绍怎么用fullchain.pem
。
又过了几个小时,突然想起现有的证书fullchain
会不会有问题?于是重新申请证书,直接用fullchain.pem
,竟然成功启动caddy服务了!测试网页和小程序都能正常显示,好开森!
certbot certonly --preferred-challenges dns --manual -d xxx.com