gpt4 book ai didi

node.js - 使用 Axios 发出请求时 Node TLS 错误 : ca md too weak,

转载 作者:行者123 更新时间:2023-12-04 22:39:32 33 4
gpt4 key购买 nike

当我在 Node 中向 Axios 发出请求时遇到问题:错误:ca md 太弱。
我正在发送 pfx 证书文件的 .pfx 文件和密码。
我可以使用 Postman 轻松访问 API 并发送 pfx 证书和密码,但是在 Node js (v. 18.0) 中使用 Axios 发出请求时出现错误:ca md 太弱。
我不想降级 Node 版本并使用: process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;也无济于事。
另外要连接到服务器,我必须使用 VPN,即使我没有打开 VPN,也会弹出这个错误。
是否可以绕过此检查,所以我可以像在 postman 中一样发送请求?
这是一个代码示例:

agent = new https.Agent({
pfx: fs.readFileSync((process.cwd() + "\\src\\sources\\KIISWSClient.pfx")),
passphrase: 'password',
rejectUnauthorized: false,
});

userKiisData = axios.post('https://ws-kiis.hlk.hr/AdeoMembersPublicService.svc/WSPublic/BasicData', {
Username: "myusername",
Role: "role"
}, {
auth: {
username: "user",
password: "mypassword"
},
httpsAgent: agent
}
return userKiisData
这是错误:
Error: ca md too weak
at configSecureContext (node:internal/tls/secure-context:278:15)
at Object.createSecureContext (node:_tls_common:113:3)
at Object.connect (node:_tls_wrap:1622:48)
at Agent.createConnection (node:https:142:22)
at Agent.createSocket (node:_http_agent:343:26)
at Agent.addRequest (node:_http_agent:294:10)
at new ClientRequest (node:_http_client:311:16)
at Object.request (node:https:352:10)

最佳答案

TLDR:如果您不关心理解,请跳到结尾rejectUnauthorized指示 nodejs 接受服务器使用的(某些)无效证书而不是中止连接,但此错误发生在您自己的客户端证书/链上,而不是服务器的。 (这就是为什么即使没有实际连接所需的 VPN 也会发生这种情况。)“CA_MD_TOO_WEAK”检查发生在现代版本的 OpenSSL(1.1.0 以上)中,但可能会根据 OpenSSL 的构建方式而有所不同,因此对于 nodejs 它还取决于您的 nodejs 是使用其自己的嵌入式 OpenSSL(通常在 Windows 上)还是已经在安装它的系统上提供的(通常在 Linux 上)。
如果您在这台机器上拥有(或获得)它,或者您(可能、可以并且确实)将 pfx 复制到同上的机器上,则可以使用 openssl 查看证书链中使用的签名算法。先做

openssl pkcs12 -in yourpfxfile -nokeys >temp0
看看 temp0 ;它应该包含一个或多个 block ,每个 block 由 subject= 组成。行, issuer=行,一个 -----BEGIN CERTIFICATE-----行、几行 base64 和一个 -----END CERTIFICATE-----线。 (可能还有 Bag Attributes: 行可选地后跟缩进行;忽略这些。)
如果只有一个 block 并且 subject 具有相同的值和 issuer ,那么您的错误不应该发生,因为证书是自签名的,OpenSSL 不应该检查自签名证书的签名强度。否则,做
openssl x509 -in temp0 -noout -text -certopt no_pubkey,no_sigdump,no_extensions
你应该得到几行输出,其中包括 signatureAlgorithm: x在哪里 x格式为 {hash}withRSAEncryption ecdsa_with_{hash} dsa-with-{hash} or dsaWith{hash} .如果 {hash}是 MD5,您的证书上的签名很弱并且不提供它声称的安全性 - 尽管在您的情况下,如果服务器接受它,尽管有这个弱点,这可能不是您的问题。
如果第一个(叶)证书不是自签名的( subjectissuer 不同)并且其签名算法也不使用 MD5,
  • 您的 nodejs 使用的 OpenSSL 设置为高于通常的“安全级别”——这对于嵌入了 OpenSSL 的 nodejs 不太可能,但对于系统提供的 nodejs 来说更合理,尤其是在像 RedHat 8 这样以安全为重点的系统上;或者
  • 问题出在第一个证书以外的证书(即 CA 证书)上,但如果您的证书来自正常运行的 CA,则不会发生这种情况,因为这样的 CA 永远不应该有更高的 CA 证书签名比叶子证书更弱的 key 或签名算法,除了签名无关紧要的自签名根,并且不检查因此不会导致您的错误。但是,如果您愿意,可以将除第一个以外的每个 block 分成单独的文件,然后重复 openssl x509除了最后一个有 subjectissuer同样不要检查它,因为它是自签名的根证书。

  • 无论如何, 解决方法:添加到您的 https 代理选项 ciphers: "DEFAULT:@SECLEVEL=0" .这应该会关闭几项旨在防止不安全 SSL/TLS 连接的检查,包括此处相关的一项;因此,如果您使用此代码处理任何重要的数据,则可能会面临更高的风险,具体取决于服务器的工作。

    关于node.js - 使用 Axios 发出请求时 Node TLS 错误 : ca md too weak,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72655706/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com