V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yongSir
V2EX  ›  程序员

请教一个可能是 ssl 证书的相关问题,但更像是网络基础的问题

  •  
  •   yongSir · 2022-08-26 09:59:03 +08:00 · 2306 次点击
    这是一个创建于 822 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目的

    最近想做一个 iOS 团队的自动测试的分发网站,核心功能是完成测试团队人员管理和 app 信息等的展示,这涉及到苹果的 App Store Connect API 的调用

    过程

    已知 apple 的 api 访问使用 jwt 认证 也通过在本地分别通过 ruby 脚本+curl 和 postman 都完成了 token 和 api 的验证,都能顺利拿到自己想要的数据

    于是我认为问题不大了,就开始在本地起了一个 node 的 express 做 web 服务。先在自己电脑上试试,把网站布到本地的 node 上,但问题出现了,具体是 当通过使用 jsonwebtoken + axois 对 apple 相关 api 的调用总是 401

    分析

    开始猜测是 token 不对,但通过将 token 复制到 postman 发现 token 是对的,使用同样的 token 在 postman 是能够跑通的 api 的 后来思考是忽略了 apple 的 api 都需要 https ,而我本地起的 express 只是 http 的,所以卡在了这里

    疑问🤔️

    基本问题算是清楚了,但为啥呢?

    当使用 curl 或者 postman 都能正常成功,也没提示我 ssl 证书问题啊? 现在当本地起了一个 exepress 就开始不通过,我自己理解应该是这样的:

    2 过程应该可以跟 33 一致,express 服务在我理解中就是一个 node 版的 postman ,但很事实证明我是不对的,所以想象诸位请教一下:

    • 第一,使用 express 该如何能达到的目的呢?
    • 第二,已知 apple 的访问肯定是要 https 的,那我本地使用 postman/curl (实际上我们使用 curl 这样的命令行,也没有指明证书)等工具能通的话,默认使用的证书是什么?可以肯定的是有的,我理解对吗?

    拟解决方案

    我自己也找了一些,现在的拟解决方式有

    让网管给我个可以公网访问的正确的 https 证书的服务器,我将 exprss 布置到该服务器上,这样肯定是可以解决 但是,我还是觉得应该有其他的方案,特别是在测试的时候,比如有没有能实现上述 2 的过程 像大家请教 谢谢

    (原本发在问答节点,但好像大家更喜欢在这个节点讨论,就挪过来了,如果不合适请 Livid 处理)

    15 条回复    2022-08-26 17:03:01 +08:00
    Rache1
        1
    Rache1  
       2022-08-26 10:03:47 +08:00
    电脑装个 fiddler 之类的抓包工具(还需启用 https ),express 设置个代理到 fiddler 的端口,查看实际发出的包和 curl 、postman 发出的包有什么区别。
    yongSir
        2
    yongSir  
    OP
       2022-08-26 10:06:59 +08:00
    @Rache1 好的 我正在做,猜测肯定还是有区别的,否则没道理不一样
    kaedeair
        3
    kaedeair  
       2022-08-26 10:40:47 +08:00
    可能是 header 不一样?
    默认的证书一般是系统自带的,我只知道 curl 取决于编译期有没有用到 openssl 的依赖
    Daiwf
        4
    Daiwf  
       2022-08-26 11:09:05 +08:00
    如果你的猜想是对的,那么可能是因为你的程序不支持 TLS 。 你用 curl 和 postman 自带了支持。但是 401 我总觉得是格式问题,不太像是 tls 报错。
    Daiwf
        5
    Daiwf  
       2022-08-26 11:10:50 +08:00
    抓包的话 wireshark 直接能看到握手过程。fiddler 好像看不到。
    zhuisui
        6
    zhuisui  
       2022-08-26 11:24:49 +08:00
    是我搞错什么了吗,express 不是用来当作 web 服务器,而 curl 和 postman 是 web 请求客户端?
    你请求苹果的 api ,使用 node http 或某个客户端请求库做的吧,跟 express 无关
    zhuisui
        7
    zhuisui  
       2022-08-26 11:27:14 +08:00
    你如果是用 node http 模块发的请求,请改成用 https ,要么你就用第三方库 axois 、request 什么的
    chenjiangui998
        8
    chenjiangui998  
       2022-08-26 13:08:26 +08:00
    401 不是 ssl 问题, 直接用 postman 导出 axios 的代码到你的服务器试一下, 基本是参数问题
    wjfz
        9
    wjfz  
       2022-08-26 13:49:53 +08:00
    这么多天了还没解决?

    复制一下上一个帖子别人的评论:
    说明你调用的不对呗,express 发出的有问题,抓它的包跟 postman 发出的对照一下
    SanjinGG
        10
    SanjinGG  
       2022-08-26 13:57:58 +08:00
    401 不是没有授权吗?看后端日志是不是没拿到 token
    okakuyang
        11
    okakuyang  
       2022-08-26 14:03:16 +08:00
    与 expres 无关,你这个应该就是简单的请求头没写对。
    okakuyang
        12
    okakuyang  
       2022-08-26 14:07:21 +08:00
    如果你是从浏览器发出 token ,你需要检查是否有跨域。某些情况下浏览器不会发送 Authorization 头
    king888
        13
    king888  
       2022-08-26 14:16:01 +08:00
    No code says a maoxian \doge
    redford42
        14
    redford42  
       2022-08-26 15:10:58 +08:00
    检查一下证书的中间链,看是不是中间链缺失
    Distand
        15
    Distand  
       2022-08-26 17:03:01 +08:00
    既然 postman 能请求成功,那就点 postman 右边的代码图标,复制出对应的 node 代码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:28 · PVG 05:28 · LAX 13:28 · JFK 16:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.