node.js - 在 Kubernetes 集群上对 AutoDesk-Forge 进行身份验证时出现 SSL 证书错误
问题描述
我们有一个使用 kubernetes 部署的 Web 应用程序,最近(21 年 8 月 9 日这一周)我们突然开始使用 forge API 出现错误。在我们的开发环境中一切都按预期工作(仅使用 Docker 容器,没有 kubernetes)。
我们正在使用较旧的 forge api(forge-apis npm 包;我们计划升级到 autodesk.forge.designautomation,但现在根本没有时间/资源)。
我们主要使用模型派生 API,但问题可能都与身份验证步骤有关:
const oAuth = new ForgeSDK.AuthClientTwoLegged(config.forgeClientId, config.forgeClientSecret, [
'data:read',
'data:write',
'data:create',
'bucket:read',
'bucket:create'],
true)
token = await oAuth.authenticate()
很多时候,这将失败并出现以下错误:
错误 [ERR_TLS_CERT_ALTNAME_INVALID]:主机名/IP 与证书的替代名称不匹配:主机:developer.api.autodesk.com。不在证书的替代名称中:DNS: .beta.doxo.com, DNS:beta.doxo.com at Object.checkServerIdentity (tls.js:288:12) at TLSSocket.onConnectSecure (_tls_wrap.js:1485:27) at TLSSocket.emit (events.js:321:20) 在 TLSSocket._finishInit (_tls_wrap.js:918:8) 在 TLSWrap.ssl.onhandshakedone (_tls_wrap.js:688:12) {原因:“主机:developer.api。 autodesk.com. 不在证书的 altnames 中:DNS: .beta.doxo.com, DNS:beta.doxo.com", host: 'developer.api.autodesk.com', cert: { subject: [Object: null原型] { CN: ' .beta.doxo.com' }, 发行者: [Object: null 原型] { C: 'US', O: 'Amazon', OU: 'Server CA 1B', CN: 'Amazon' } ,.beta.doxo.com, DNS:beta.doxo.com', infoAccess: [Object: null prototype] { 'OCSP - URI': [Array], 'CA Issuers - URI': [Array] }
然而,并非总是如此。有时它会执行到后面的各个步骤(例如,通过 BucketsAPI 创建存储桶、上传到存储桶或将文件转换为 SVF)。它会走多远似乎完全随机,并且通常挂在这些步骤之一并停止接收响应,直到我们的连接超时错误抛出。
有时当它进入 SVF 转换步骤时,它会抛出一个不同的证书相关错误:
错误:SSL 证书错误:NavigatorWatcher.waitForNavigation 的 ERR_CERT_COMMON_NAME_INVALID (/opt/model_service/node_modules/puppeteer/lib/NavigatorWatcher.js:76:20) 在 processTicksAndRejections (internal/process/task_queues.js:97:5) 在异步页面。转到(/opt/model_service/node_modules/puppeteer/lib/Page.js:465:19)
其他时候,在 SVG 转换过程中,它会抛出一个 JSON 循环引用错误,同样与证书有关:
TypeError: Converting circular structure to JSON --> 从带有构造函数'Object'的对象开始---属性'issuerCertificate'在JSON.stringify()处关闭循环
到目前为止,我最好的评估是 kubernetes DNS 存在问题 - 但我无法弄清楚为什么 1)这会突然开始发生(这已经稳定了好几年)和 2)为什么这种行为似乎有些随机。
非常感谢任何输入,谢谢。
解决方案
我们确实在 2018 年 12 月迁移到 TLS 1.2(在此处查看更多信息),您能否确认您的应用程序和环境已为此设置?
此外,有时我们必须更新认证,您的环境是否有可能将旧证书保留在缓存中?
推荐阅读
- java - 当我在可绘制文件夹上导入图像并尝试使用图像视图上的图像时,应用程序崩溃。但是,当我设置图像时,该应用程序运行良好
- javascript - 如何使输入中的文本在按钮单击时进入段落
- javascript - 使用箭头键更改图像的 onkeydown 事件
- r - 如何根据另一个值对值进行分箱
- ruby-on-rails - 更新验证失败,表单继续创建方法?
- angular - 自动设置焦点到按钮
- python - 如何通过 Python 使用 Selenium 单击此按钮
- python - argparse:需要一个标志或 2+ 个位置参数
- html - 如何将内联块包装文本(换行后)推到右边?
- regex - 尝试从文本字段中提取数字