Intentamos instalar nuestro servicio web Hapis (Nodejs versión 14) en el servidor de nuestro cliente. Se ejecutó bajo HTTP durante meses, pero cuando habilitamos HTTPS con las rutas adecuadas al certificado y la clave, falla cuando el servicio se inicia con:
error:06065064:rutinas de sobres digitales:EVP_Decryptfinal_ex:mal descifrado
Su certificado y clave se generan utilizando el portal en línea de Venafi. Les dio un crt y clave. El crt utiliza un algoritmo de firma: sha256RSA, algoritmo hash de firma de sha256 y algoritmo de huella digital: sha1.
Además, la clave privada es una CLAVE PRIVADA RSA con Proc-Type: 4,ENCRYPTED y DEK-Info: DES-EDE3-CBC.
No estoy seguro de lo que está pasando, porque HTTPS funciona bien en nuestros servidores de desarrollo.
Por favor ayuda.
El error especificado 06065064:digital envelope routines:EVP_Decryptfinal_ex:bad decrypt ocurre en una conexión SSL/TLS usando OpenSSL (que es lo que realmente usan los módulos nodejs como tls y https) cuando la clave privada está cifrada (con una frase de contraseña) y la frase de contraseña correcta es no se proporciona para descifrarlo. El formato de archivo descrito, que comienza con una línea -----BEGIN RSA PRIVATE KEY----- seguida de las líneas Proc-Type: y DEK-Info: es, de hecho, uno de los formatos cifrados utilizados por OpenSSL. Específicamente, este es el formato encriptado 'tradicional' o 'heredado'; el formato PKSC8 se agregó alrededor de 2000 pero todavía se considera nuevo (!) usa -----BEGIN ENCRYPTED PRIVATE KEY----- y no encabezados de estilo 822, solo base64 (de la estructura cifrada definida por PKCS8); consulte ursinely-verbose https://security.stackexchange.com/questions/39279/stronger-encryption-for-ssh-keys/#52564 sobre el uso de OpenSSL por parte de OpenSSH, que es básicamente el mismo que el uso de nodejs.
El módulo tls y otros que se basan en él, incluido https , finalmente leen la(s) clave(s) y el(los) certificado(s) usando tls.createSecureContext que acepta en options una frase de passphrase de miembro, o si necesita usar varias claves (y certificados) puede proporcionar una frase de contraseña para cada clave como se describe en el documento vinculado.
Como alternativa, puede evitar la necesidad de una frase de contraseña convirtiendo la clave en un archivo sin cifrar, si es aceptable según las políticas y regulaciones de seguridad aplicables. (Las buenas políticas pueden prohibir esto, pero generalmente también prohíben obtener la clave privada o proporcionarla a cualquier otro sistema, especialmente uno 'en línea' en algún lugar, y su cliente está haciendo lo último). Para conservar el formato tradicional, haga
openssl rsa -in oldfile -out newfile # and give the passphrase when prompted, or see the man page about -passino puede usar el 'nuevo' formato PKCS8 con
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 newfilePara mí, este error ocurrió después de extraer un código antiguo que funcionaba en un sistema nuevo, estaba usando una versión de nodo demasiado actual, bajé de 17 a 16 y eso resolvió mi problema.
Intenté verificar los problemas de github relacionados con TLS, protocolo de enlace y versiones. Pero no pude encontrar ninguno. La solución final fue la sugerida por @Greggory Wiley.
Nvm instalado: se degradaron las versiones de nodo y npm. Vuelva a compilar el código. Y funcionó.