评论

微信小程序开发坑之——SSL证书坑

微信小程序开发,当涉及到上传、下载文件时,使用一般的免费SSL证书就可以吗?

小程序必须使用 HTTPS/WSS 发起网络请求。请求时系统会对服务器域名使用的 HTTPS 证书进行校验,如果校验失败,则请求不能成功发起。由于系统限制,不同平台对于证书要求的严格程度不同。为了保证小程序的兼容性,建议开发者按照最高标准进行证书配置,并使用相关工具检查现有证书是否符合要求。

对证书要求如下:

  • HTTPS 证书必须有效;
  • 证书必须被系统信任,即根证书被已系统内置
  • 部署 SSL 证书的网站域名必须与证书颁发的域名一致
  • 证书必须在有效期内
  • 证书的信任链必需完整(需要服务器配置)
  • iOS 不支持自签名证书;
  • iOS 下证书必须满足苹果 App Transport Security (ATS) 的要求;
  • TLS 必须支持 1.2 及以上版本。部分旧 Android 机型还未支持 TLS 1.2,请确保 HTTPS 服务器的 TLS 版本支持
    1.2 及以下版本;
  • 部分 CA 可能不被操作系统信任,请开发者在选择证书时注意小程序和各系统的相关通告。 Chrome 56/57 内核对 WoSign、StartCom 证书限制周知

证书有效性可以使用 openssl s_client -connect example.com:443 命令验证,也可以使用其他在线工具

除了网络请求 API 外,小程序中其他 HTTPS 请求如果出现异常,也请按上述流程进行检查。如 https 的图片无法加载、音视频无法播放等。


一般来说,普通的免费SSL证书可以满足一般的微信小程序开发。

笔者前段时间在开发一个微信小程序项目,涉及到文件的下载读取显示,所以需要调用微信小程序的官方API:wx.downloadFile(Object object),官方的用法示例如下:

wx.downloadFile({
  url: 'https://example.com/audio/123', //仅为示例,并非真实的资源
  success (res) {
    // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
    if (res.statusCode === 200) {
      wx.playVoice({
        filePath: res.tempFilePath
      })
    }
  }
})

在申请了免费SSL证书之后,将证书部署到服务器上,在浏览器输入网址,也看到了如下所示小锁的图标,也就是说,SSL证书部署完成了。


于是,笔者就去微信web开发者工具上调试程序,结果发现开发者工具报错如下所示,大意是:无法验证第一个证书。

downloadFile:fail Error: unable to verify the first certificate

难道是免费的SSL证书有问题,不适合用于微信小程序开发?于是,笔者就打开亚数信息的网站(网址:https://myssl.com/ ),在线检测了用于微信小程序开发的网站的SSL证书,结果显示“证书链信息不完整”,评级为F级。

然后,笔者就连续换了好几个品牌的免费SSL证书,包括阿里云、腾讯云的免费SSL证书,结果依旧报错。

最后,笔者使用景安“一键开启SSL”功能安装了一个SSL证书,部署好后证书信息如下所示。

再次开亚数信息的网站(网址:https://myssl.com/ ),在线检测了用于微信小程序开发的网站的SSL证书,结果显示“合格”,评级为A+级,检测结果如下图所示。


然后,笔者再次到微信web开发者工具调试程序,发现报错没有了,功能可以正常使用。

综上所述,申请并部署SSL证书之后,最好使用SSL检测工具检测是否正常,以免影响后续的使用。


电子邮箱:daixiangcn@outlook.com
简介:中华人民共和国公民,中国共青团员,CSDN博客专家,秦淮区疾控中心托管社会公益组织指南针工作室志愿者,在校大学生,参与过微信小程序《约车吗》、《指南针微公益》、《智慧庆云禅寺》的开发。
个人博客:https://daixiang.blog.csdn.net/


推荐文章:《当驾校学员遇上微信小程序》

最后一次编辑于  08-02  (未经腾讯允许,不得转载)
点赞 1
收藏
评论