Qt QWebsocket实现SSL后台服务程序 和微信小程序连接使用

Qt QWebsocket实现SSL后台服务程序 和微信小程序连接使用


——Qt QWebsocket SSL wss 微信小程序


前言

微信小程序是不支持https和wss以外的远程通信接口的,这给很多希望使用小程序实现与自建非web类服务后台程序通信的小伙伴带来很多不便,比如我们在云服务器端使用Qt开发了一个服务器应用,用来提供数据库服务和嵌入式终端控制等功能。
嵌入式终端由于性能受限,一般很少直接运行https或wss协议,往往采用外挂一个tcp或udp透传模块实现远程网络连接传递数据,当控制端使用app实现时就很容易了,直接tcp或udp搞定,但如果向通过微信小程序来做控制端,就必须得用https或wss,这是微信的强制要求,为了提供更安全的服务。

SSL配置

网络上对基于web服务器和小程序进行安全通信的例子很多,但基本都是基于这种B/S【browser/server】架构的,在服务器端进行IIS、Apache、Njinx等的配置就能实现。但对于刚才讲的C/S【client/server】架构的应用,该怎么实现呢/p>

  • 咱们对着微信官方的要求来捋捋:
  1. 首先

每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名进行网络通信。包括普通 HTTPS
请求(wx.request)、上传文件(wx.uploadFile)、下载文件(wx.downloadFile) 和 WebSocket
通信(wx.connectSocket)。

上面讲的通信域名在哪里设置呢下图,在小程序开发管理的开发设置中,注意填入的要是域名,不能是公网IP,虽然公网ip在调试时是可以的,但发布后就被限制使用了。还有,只允许443端口,不能改成其他的,设置框和js代码中的也要一致,要么都不带端口号,要么都带端口号443。

Qt QWebsocket实现SSL后台服务程序 和微信小程序连接使用
  • 顺带记录一下和证书相关的不同文件的区别:

.csr文件:证书签名请求文件。 .key文件是证书私钥文件,如果申请证书时没有选择系统创建CSR,则没有该文件。请您保存好该私钥文件。
.crt文件:证书文件,一般包含两段内容。如果是Apache服务器,会将证书文件拆分成_public.crt(证书文件)和_chain.crt(证书链或中间证书文件)。
.pem文件:证书文件,一般包含两段内容。Nginx证书会使用扩展名文件,在阿里云SSL证书中与.crt文件一样。说明:.crt扩展名的证书文件采用Base64-encoded的PEM格式文本文件,可根据需要,修改成.pem等扩展名。
.pfx文件:一般适合Tomcat/IIS服务器。每次下载都会产生新密码,该密码仅匹配本次下载的证书。如果需要更新证书文件,同时也要更新密码。

  1. 接下来,确认以下对证书要求:

HTTPS 证书必须有效;
证书必须被系统信任,即根证书被已系统内置
部署 SSL 证书的网站域名必须与证书颁发的域名一致
证书必须在有效期内
证书的信任链必需完整(需要服务器配置)
iOS 不支持自签名证书; iOS 下证书必须满足苹果 App Transport Security (ATS) 的要求;
TLS 必须支持 1.2 及以上版本。部分旧 Android 机型还未支持TLS 1.2,请确保 HTTPS 服务器的 TLS 版本支持 1.2 及以下版本;

上面的红色字体是关键,但和c++代码有关,所以放在后面一起说。
先来说说如何判断自己的证书文件是否配置的合乎要求,有这个一个网站https://myssl.com/,输入你的域名就可以自动检测给出报告。当然,在检测时,你的c++服务器程序要运行哦

  1. 重点来了,很多朋友在折腾完一圈操作后,在真机调试小程序是均以失败告终,常见的报错如下:

errMsg: “exception onOpen fail code:8, msg:TLS handshake failed”

握手失败!!! 官方给出的解答是因为证书有问题,要重新配置,然后就没有然后了。报这个错误的同时,上面讲的证书检测结果中也会有一条提示:“证书链不完整”!!!

  • 什么是证书链/strong>

  • 假设我的证书C是A机构颁发的,合法吗得看A机构是不是有合法的权限给我发证,有一个最高级别的签发人B,负责认证A机构身份的合法性,B说A合法,A说C合法,那才算合法,一条证明链。出现证书链不完整一般都是缺少中间证书导致的,为什么会少呢代码。

  • 相信第一次使用QWebsocket安全模式开发的兄弟们,都是看着官方里程照猫画虎的,我也不例外,最核心的几行代码就是下面的

发现没有,配置ssl时只有一个crt和一个key,然后setLocalCertificate。问题就出在这里,前面说的证书链可是三个文件,2个crt和1个key,怎么改呢/p>

然后,你再检测,证书链完整了。小程序能跑了!大功告成,欢喜ing…
来来来 看看效果

Qt QWebsocket实现SSL后台服务程序 和微信小程序连接使用

文章知识点与官方知识档案匹配,可进一步学习相关知识网络技能树首页概览22397 人正在系统学习中

来源:Fred.弓

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年11月2日
下一篇 2021年11月2日

相关推荐