Nodejs14 HapiJS服务启用HTTPS报error:06065064坏解密错误问询
错误根因说明
你遇到的error:06065064:digital envelope routines:EVP_Decryptfinal_ex:bad decrypt错误是Node.js内置OpenSSL模块抛出的加密私钥解密失败错误,和上层服务逻辑无关,以下对应你的三个问题逐一解答:
1. 该问题是否是HapiJS本身的问题?
不是。
HapiJS的TLS/HTTPS配置直接复用Node.js标准https模块的入参规则,这个错误是底层加密依赖抛出的,和HapiJS的上层封装没有关联。你可以直接用Node.js原生https模块加载同一份证书密钥测试,如果抛出相同错误即可完全排除HapiJS的问题。
2. 问题是否出在证书或密钥本身?
大概率不是密钥本身损坏,而是加密私钥的解密参数适配问题,你可以先通过以下步骤验证密钥有效性:
- 执行OpenSSL命令校验密钥:
openssl rsa -in 你的私钥文件路径.key -check,输入密钥加密密码后如果能正常输出RSA密钥参数,即可确认密钥本身没有损坏 - 核对客户服务器上使用的私钥密码和Venafi生成密钥时设置的密码是否完全一致,排查空格、大小写、特殊字符编码等问题
- 确认客户服务器系统的OpenSSL版本没有被裁剪,Node.js 14自带的OpenSSL版本原生支持DES-EDE3-CBC加密的私钥,不存在兼容性问题
3. 我们创建服务时是否需要传入特定的Node https配置项?
需要。
你拿到的私钥是密码加密的类型,必须在TLS配置中额外传入passphrase参数填写私钥加密密码,该参数会直接透传给Node.js的https模块用于私钥解密,HapiJS的配置示例如下:
const fs = require('fs'); const Hapi = require('@hapi/hapi'); const init = async () => { const server = Hapi.server({ port: 443, host: '0.0.0.0', tls: { key: fs.readFileSync('./private.key'), cert: fs.readFileSync('./cert.crt'), // 新增该行,填写Venafi生成密钥时设置的加密密码 passphrase: '你的私钥加密密码' } }); await server.start(); }; process.on('unhandledRejection', (err) => { console.log(err); process.exit(1); }); init();
如果确认密码正确仍报错,可以先通过OpenSSL命令解密私钥后再加载,无需再传passphrase参数:openssl rsa -in 加密私钥.key -out 解密后私钥.key
内容的提问来源于stack exchange,提问作者Croeber
相关产品推荐
相关产品推荐

