Node.js中0A00018E:SSL routines::ca md too weak错误解决求助
解决SSL错误:0A00018E:SSL routines::ca md too weak
这个错误是因为你的证书使用了MD5、SHA-1这类弱哈希算法,新版Node.js默认会拒绝这类不安全的证书签名机制。以下是具体解决方式:
优先解决方案(推荐生产/长期使用)
如果有权限重新生成证书,直接更换为使用SHA-256及以上哈希算法的证书,从根源解决安全问题,避免后续的兼容性和安全风险。
临时绕过方案(仅本地测试使用)
方法1:修改HTTPS Agent配置,允许弱签名连接
在你的agentOptions中添加secureOptions配置,指定允许旧版连接规则:
const agentOptions = { cert: fs.readFileSync(certFile), key: fs.readFileSync(keyFile), rejectUnauthorized: false, minVersion: 'TLSv1', // 允许连接使用弱签名算法的服务器 secureOptions: require('constants').SSL_OP_LEGACY_SERVER_CONNECT };
方法2:启用OpenSSL旧版提供器
启动Node服务时通过环境变量指定:
NODE_OPTIONS="--openssl-legacy-provider" node your-app.js
或者在代码开头全局设置:
process.env.NODE_OPTIONS = '--openssl-legacy-provider';
重要注意事项
- 生产环境禁止使用
rejectUnauthorized: false和任何弱算法绕过配置,必须使用合规的强哈希证书。 - 可以用以下命令检查当前证书的签名算法:
如果输出包含openssl x509 -in create.crt -text -noout | grep "Signature Algorithm"MD5或SHA1,说明证书确实使用了弱算法,优先更换。
内容的提问来源于stack exchange,提问作者kasfik
相关产品推荐
相关产品推荐

