Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:130:10)
时间: 2025-07-05 07:54:35 浏览: 11
### Node.js 中出现 `error:0308010C:digital envelope routines::unsupported` 的原因与解决方案
在使用 Node.js 进行加密操作时,用户可能会遇到 `error:0308010C:digital envelope routines::unsupported` 错误。该错误通常出现在 Node.js v17 及以上版本中,主要原因是这些版本默认使用 OpenSSL 3.0,而 OpenSSL 3.0 对某些旧的加密算法和密钥大小实施了更严格的限制,导致部分原本兼容的代码无法正常运行[^4]。
---
### 常见解决方法
#### 方法一:设置环境变量启用旧版 OpenSSL 提供商
可以通过设置 `NODE_OPTIONS` 环境变量来启用 OpenSSL 的 Legacy Provider,从而支持旧的加密算法:
```bash
SET NODE_OPTIONS=--openssl-legacy-provider
```
在 `package.json` 文件的脚本中添加此设置可以避免每次手动输入命令,例如:
```json
"scripts": {
"dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
}
```
这种方法适用于 Windows 和类 Unix 系统(Linux/macOS),只需根据系统调整环境变量的设置方式即可[^2][^5]。
#### 方法二:降级 Node.js 版本
如果项目对新版本的 Node.js 没有特殊需求,可以选择将 Node.js 降级到 v16 或更低版本。这些版本默认使用 OpenSSL 1.1,不会强制执行 OpenSSL 3.0 的严格限制。使用 `nvm` 工具可以轻松切换或卸载 Node.js 版本:
```bash
nvm install 16
nvm use 16
```
如需彻底删除某个版本:
```bash
nvm uninstall 18.10.0
```
这种方式适合需要快速解决问题且不依赖 Node.js 新特性的项目[^3]。
#### 方法三:更新依赖库以兼容 OpenSSL 3.0
检查项目中使用的第三方库是否已适配 OpenSSL 3.0,并尝试升级至最新版本。许多主流库已经通过更新其内部加密逻辑来支持新的 OpenSSL 特性。确保所有依赖项都保持最新状态,有助于减少此类问题的发生[^2]。
#### 方法四:修改代码以符合 OpenSSL 3.0 要求
对于自定义的加密逻辑,检查所使用的算法和密钥长度是否符合 OpenSSL 3.0 的要求。例如,某些弱加密算法(如 MD2、MD5)可能已被弃用,建议改用更强的算法(如 SHA-256)。此外,确保 RSA 密钥长度至少为 2048 位,以满足安全性和兼容性要求[^4]。
---
### 总结
`error:0308010C:digital envelope routines::unsupported` 主要源于 Node.js v17+ 使用 OpenSSL 3.0 后对加密算法的限制增强。解决方法包括启用 Legacy Provider、降级 Node.js 版本、更新依赖库以及优化代码中的加密实现。选择合适的方法取决于项目的具体需求和技术栈。
---
阅读全文
相关推荐


















