HTTPS in Nodejs - error:06065064 digital envelope routines evp_decryptfinal_ex bad decrypt

HTTPS in Nodejs - error:06065064 digital envelope routines evp_decryptfinal_ex bad decrypt

我们尝试在客户的服务器上安装我们的 Hapis(Nodejs 版本 14)Web 服务。它在 HTTP 下 运行 几个月了,但是当我们使用证书和密钥的适当路径启用 HTTPS 时,它在服务启动时失败:

错误:06065064:数字信封routines:EVP_Decryptfinal_ex:bad解密

他们的证书和密钥是使用 Venafi 在线门户生成的。它给了他们一个 crt 和密钥。 crt使用Signature算法:sha256RSA,Signature hash算法为sha256,Thumbprint算法:sha1.

此外,私钥是一个 RSA 私钥,Proc-Type:4,ENCRYPTED 和 DEK-Info:DES-EDE3-CBC。

我不确定发生了什么,因为 HTTPS 在我们的开发服务器上运行良好。

  1. 是HapiJS的问题吗?
  2. 证书或密钥本身有问题吗?
  3. 创建服务时是否需要传入节点option

请帮忙。

指定的错误 06065064:digital envelope routines:EVP_Decryptfinal_ex:bad decrypt 发生在使用 OpenSSL 的 SSL/TLS 连接中(这是像 tls 和 https 这样的 nodejs 模块实际使用的)当私钥被加密(使用密码)和正确的没有提供密码来解密它。所描述的文件格式,以 -----BEGIN RSA PRIVATE KEY----- 行开头,然后是 Proc-Type: 行和 DEK-Info: 行,确实是 OpenSSL 使用的加密格式之一。具体来说,这是加密的 'traditional' 或 'legacy' 格式; PKSC8 格式增加了大约 2000,但仍然被认为是新的(!)使用 -----BEGIN ENCRYPTED PRIVATE KEY----- 并且没有 822 样式 headers,只有 base64(由 PKCS8 定义的加密结构); OpenSSH对OpenSSL的使用见ursinely-verbosehttps://security.stackexchange.com/questions/39279/stronger-encryption-for-ssh-keys/#52564,和nodejs的使用基本一致

tls 模块和其他构建在它之上的模块,包括 https 最终使用 tls.createSecureContext 读取密钥和证书,在 options 中接受成员 passphrase,或者如果您需要使用 多个 密钥(和证书),您可以按照链接文档中的描述为每个密钥提供密码。

或者,如果适用的安全政策和法规可以接受,您可以通过将密钥转换为未加密的文件来避免使用密码。 (好的政策可能会禁止这样做,但它们通常也禁止从任何其他系统获取私钥或将其提供给任何其他系统,尤其是 'online' 某处,而您的客户正在这样做。)要保留传统格式,请执行

openssl rsa -in oldfile -out newfile 
# and give the passphrase when prompted, or see the man page about -passin

或者您可以使用 'new' PKCS8 格式

openssl pkey -in oldfile -out newfile
# technically only in release 1.0.0 up, but pretty much everyone is there now
#
# or in all versions back to about 2000
openssl pkcs8 -topk8 -nocrypt -in oldfile -out newfile

对我来说,这个错误发生在将一些旧代码拉到新系统后,我使用的节点版本太新了,我从 17 降级到 16,这解决了我的问题。

尝试检查与 TLS、握手和版本相关的 github 问题。但是找不到任何。 最后的修复是@Greggory Wiley 建议的。

已安装 nvm - 降级了节点和 npm 版本。重新编译了代码。它奏效了。