Nodejs 中的 HTTPS - 错误:06065064 数字信封例程 evp_decryptfinal_ex 解密错误

Cro*_*ber 6 https openssl node.js cryptojs hapi.js

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

错误:06065064:数字信封例程:EVP_Decryptfinal_ex:解密错误

他们的证书和密钥是使用 Venafi 在线门户生成的。它给了他们一个crt和钥匙。crt使用的签名算法为:sha256RSA,签名哈希算法为sha256,指纹算法为:sha1。

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

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

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

请帮忙。

dav*_*085 8

06065064:digital envelope routines:EVP_Decryptfinal_ex:bad decrypt当私钥被加密(使用密码)并且未提供正确的密码来解密时,使用 OpenSSL(这是 tls 和 https 等 Nodejs 模块实际使用的)的 SSL/TLS 连接中会发生指定的错误。所描述的文件格式以一行开头,-----BEGIN RSA PRIVATE KEY-----后接几行Proc-Type:DEK-Info:确实是 OpenSSL 使用的加密格式之一。具体来说,这是加密的“传统”或“遗留”格式;PKSC8 格式添加了大约 2000 个,但仍然被认为是新的(!)用途-----BEGIN ENCRYPTED PRIVATE KEY-----,并且没有 822 样式标头,只有 base64(PKCS8 定义的加密结构);请参阅ursinely-verbose https://security.stackexchange.com/questions/39279/stronger-encryption-for-ssh-keys/#52564,与nodejs的使用基本相同。

tls模块和基于其构建的其他模块包括最终读取成员中接受的https密钥和证书,或者如果您需要使用多个密钥(和证书),您可以为每个密钥提供一个密码,如下所述在链接的文档中。tls.createSecureContextoptionspassphrase

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

openssl rsa -in oldfile -out newfile 
# and give the passphrase when prompted, or see the man page about -passin
Run Code Online (Sandbox Code Playgroud)

或者您可以使用“新”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
Run Code Online (Sandbox Code Playgroud)