为什么我在查询 LinkedIn 个人资料 API 时收到 500 条错误?

Why am I getting 500 errors when making a query to the LinkedIn Profile API?

我正在尝试调试 12 月 9 日出现的问题。我们将 LinkedIn 个人资料 API 用于我们平台上的 login/register 用户,并且还可以选择允许他们将数据从他们的 LinkedIn 个人资料同步到他们在我们平台上的个人资料。然而,从 9 日开始,登录和注册都被破坏了。在错误开始出现之前,我们没有更改与此相关的代码。

现在,当我们试图让某人登录到我们的平台时,我们没有收到基本的用户个人资料数据,而是从 LinkedIn API 收到错误。这些来自 Node.js 服务器,该服务器使用现已弃用的 request 包,但已移至 axios 并且仍在产生错误,尽管更详细,这很有帮助。从axios收到的错误如下:

{
  "message": "write EPROTO 140075354449792:error:140920E3:SSL routines:ssl3_get_server_hello:parse tlsext:../deps/openssl/openssl/ssl/s3_clnt.c:1157:\n",
  "name": "Error",
  "stack": "Error: write EPROTO 140075354449792:error:140920E3:SSL routines:ssl3_get_server_hello:parse tlsext:../deps/openssl/openssl/ssl/s3_clnt.c:1157:\n\n    at WriteWrap.afterWrite [as oncomplete] (net.js:868:14)",
  "config": {
    "transitional": {
      "silentJSONParsing": true,
      "forcedJSONParsing": true,
      "clarifyTimeoutError": false
    },
    "transformRequest": [
      null
    ],
    "transformResponse": [
      null
    ],
    "timeout": 0,
    "xsrfCookieName": "XSRF-TOKEN",
    "xsrfHeaderName": "X-XSRF-TOKEN",
    "maxContentLength": -1,
    "maxBodyLength": -1,
    "headers": {
      "Accept": "application/json, text/plain, */*",
      "User-Agent": "axios/0.24.0"
    },
    "method": "get",
    "url": "https://api.linkedin.com/v2/me?oauth2_access_token=access-token-goes-here&projection=(id,firstName,lastName,maidenName,headline,summary,educations,skills,industryName,positions,vanityName,profilePicture(displayImage~:playableStreams))"
  },
  "code": "EPROTO",
  "status": null
}

我多次读到这是一个 SSL 错误,它可能与将 HTTPS 用于不安全的端点有关(绝对不是这种情况)或者所使用的 TLS 版本可能不匹配,这我也不认为是问题。

但是,我还决定使用 URL 并使用 REST 客户端手动查询它,但得到了这个错误:

{
  "serviceErrorCode": 0,
  "message": "java.lang.StringIndexOutOfBoundsException: String index out of range: 147",
  "status": 500
}

这表明 LinkedIn API 某处存在错误。我还验证了从 Qualys SSL Labs and Digicert 查询 api.linkedin.com 时也会发生类似的错误也无法连接到该域。

我这里有什么问题吗? LinkedIn API 目前有问题吗?这是对 log4j 缓解措施的回应吗?

好吧,到处找,问题出在nodejs版本上。

我尝试了很多东西,更改请求库、升级 nginx 和使用 TLS 1.3 版本...等等

但解决方案是使用节点 10+,我使用的是节点 9.8(我已经测试过 8.11、10.24 和 14.18)

简历:

  • 8.11 -> ssl 错误
  • 9.8 -> ssl 错误
  • 10.24 -> 好
  • 14.18 -> 好

这很烦人,因为更改节点版本可能意味着破坏性更改...