weixin_39829166
weixin_39829166
2020-12-06 19:23

客户端程序无法通过HTTPS访问自建服务的API

客户端: - Windows 10 64位 LTSB 2016 - leanote-desktop-windows-x64-v2.1 (这个版本运行了几次,后来无法启动了,exe在任务管理器中露个头就退了,包括v2.0版本也如此,这个问题不是此issue讨论的话题。) - leanote-desktop-windows-x64-v1.0.7

服务端: - VPS: Ubuntu 16.04 x64 - leanote-linux-amd64 v2.0 二进制版 - MongoDB v3.2.10 - nginx/1.10.0 (Ubuntu) - 强制HTTPS - 自签名SSL证书

现象: - http和https的网页均正常,但是客户端无法通过https登录。 - 如果设置了http强制重定向到https,那么客户端也无法通过http登录。 - 如果没有将http强制重定向到https,则客户端可以通过http登录。

进一步实验发现: - 无连接,或者关闭服务端端口后,客户端程序显示的也是“用户名或密码错”。因此初步判断,凡是访问失败都会显示这个消息。 - 查看nginx日志,发现客户端似乎完全依靠API(路径均为“/api/...”的形式)访问leanote服务。 - 如果让客户端通过https访问自建服务,则始终提示“用户名或密码错误”,且相关的nginx日志毫无动静(相对得,如果通过https访问网页,可以在nginx日志中看到记录)。 - 如果让客户端通过http访问自建服务,则可以正常登录,相关的nginx日志中也留有访问记录。 - 从nginx日志中复制客户端访问的API地址,粘贴到浏览器中,并改为通过https访问,可以得到JSON,而且从内容来看也是正常的。

根据这些现象来看,似乎是这么回事: - 网页都可以正常访问,无论http还是https,包括API部分; - 浏览器显然是可以正常访问上述资源的; - 客户端可以正常访问http的api,也可以访问官网的https的api; - 客户端无法正常访问我的自建服务的https的api,而且似乎它压根就没有去访问(nginx日志中没有客户端访问https的记录,一片空白); - 我的自建服务用的是自签名的SSL证书,这可能是原因。

于是开始怀疑是不是因为自签名证书?可能leanote的桌面客户端无法正常处理自签名证书?虽然总觉得不太可能……

该提问来源于开源项目:leanote/desktop-app

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • weixin_39945178 weixin_39945178 4月前

    我也遇到相同的情况,也是自签名证书,客户端也登不上

    点赞 评论 复制链接分享
  • weixin_39922004 weixin_39922004 4月前

    leanote-desktop-windows-x64-v2.3 的客户端,也是这个问题,也是自签名证书

    点赞 评论 复制链接分享
  • weixin_39890289 weixin_39890289 4月前

    同有这个问题

    点赞 评论 复制链接分享
  • weixin_39719077 weixin_39719077 4月前

    没错就是证书的问题。你可以通过电子邮件将你的客户端证书.crt发送到你的iphone上,(以附件的方式,在其他的安全站点托管也可以)。然后在手机上点击附件安装证书到ios系统,接下来就能顺利登录了。 ×注意× 不能直接用浏览器访问受保护资源的方式来安装服务器证书。这样只将证书导入到浏览器空间,而不是导入到设备系统信任库。

    点赞 评论 复制链接分享