Angular 7使用Let's Encrypt证书出现bad decrypt错误的解决办法
解决Angular 7启动SSL时
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt错误 我之前在配置Angular项目用Let's Encrypt证书启动开发服务器时,也碰到过一模一样的问题!咱们从几个最常见的原因入手解决:
1. 确认证书与密钥的格式及正确性
Let's Encrypt的证书文件和密钥有特定要求,很容易在这里踩坑:
- 证书文件要使用完整链:别直接用Let's Encrypt生成的
cert.pem,改用fullchain.pem(你可以把它重命名为certificate.crt)。Angular的开发服务器需要完整的证书链才能正确验证证书,单独的证书文件可能会导致解析失败。 - 密钥不能有密码保护:如果你的
certificate.key设置了密码(Let's Encrypt默认生成的密钥是无密码的,但如果是你自己加密过的),Node.js的SSL模块无法自动解密,就会抛出这个错误。你可以用OpenSSL去掉密码:
之后启动命令换成用解密后的密钥:openssl rsa -in ./ssl/certificate.key -out ./ssl/decrypted.keyng serve --host 0.0.0.0 --disable-host-check --ssl true --ssl-cert ./ssl/fullchain.crt --ssl-key ./ssl/decrypted.key
2. 解决Node.js版本兼容性问题
Angular 7对应的Node.js官方推荐版本是8.x或10.x,如果你用的是Node.js 12+(尤其是17及以上版本),默认的加密算法套件会和旧版Angular的开发服务器不兼容。这时候需要设置环境变量启用旧的加密提供者:
- Windows(命令提示符):
set NODE_OPTIONS=--openssl-legacy-provider ng serve --host 0.0.0.0 --disable-host-check --ssl true --ssl-cert ./ssl/certificate.crt --ssl-key ./ssl/certificate.key - Linux/macOS:
export NODE_OPTIONS=--openssl-legacy-provider ng serve --host 0.0.0.0 --disable-host-check --ssl true --ssl-cert ./ssl/certificate.crt --ssl-key ./ssl/certificate.key
3. 检查文件路径与权限
- 确保证书和密钥的路径没有拼写错误,Linux/macOS系统要注意大小写敏感,比如
./SSL和./ssl是不同的路径。 - 确认当前用户有读取证书和密钥文件的权限,必要时可以用
chmod 644 ./ssl/certificate.crt ./ssl/certificate.key调整权限。
一般按照这几步操作,这个错误就能解决啦!
内容的提问来源于stack exchange,提问作者Cris
相关产品推荐
相关产品推荐

