Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

156
Vistas
Acceda a una clave pública .pem desde un archivo .env

Estoy almacenando una clave pública en una variable env como una cadena. Esta clave pública es de un archivo .pem. Cuando trato de usarlo en mi código, aparece el siguiente error

 error:0909006C:PEM routines:get_name:no start line

Probé lo que otros usuarios sugirieron, convirtiéndolo a base64 y luego usando la clave, pero sigo teniendo el mismo error.

variable env para la clave pública

 PUB_KEY='-----BEGIN PUBLIC KEY-----randomgibberish-----END PUBLIC KEY-----'

Código para convertirlo a base64

 const pubKey = process.env.PUB_KEY const buff = Buffer.from(pubKey).toString('base64'); console.log(buff)

Usándolo en el método createPublicKey aquí

 crypto.createPublicKey({ key: buff, format: 'pem', });

¿Alguna idea de lo que podría estar saliendo mal? AIT

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Su código se está rompiendo debido a un salto de línea en las claves públicas.

No es necesario usar base64, le sugiero que use saltos de línea (\n) en el archivo env para almacenar la clave así:

Si suponiendo que su clave es algo como esto:

 -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlkH/R64I0H1awndlU1w6BseS9 5ygy2v6rwV7BA/xlNGCtWfsQ8UlbJl7fawZ1hgL7H8FcUkGk/RsWB7xRpUeHypnE 8UU2bbhaS+X8Bze2kdoayerb5+YK6kZlyPvmI+WVxksKUEChcKE+t83mqVpnQnO9 TkTXhzvual4cG+WatwIDAQAB -----END PUBLIC KEY-----

luego guárdelo así (\n al final de la línea y convirtiéndolo en una cadena completa, puede ver cómo lo he almacenado)

 export publicKey = '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlkH/R64I0H1awndlU1w6BseS9\n5ygy2v6rwV7BA/xlNGCtWfsQ8UlbJl7fawZ1hgL7H8FcUkGk/RsWB7xRpUeHypnE\n8UU2bbhaS+X8Bze2kdoayerb5+YK6kZlyPvmI+WVxksKUEChcKE+t83mqVpnQnO9\nTkTXhzvual4cG+WatwIDAQAB\n-----END PUBLIC KEY-----'

Y en el uso del código:

 const { publicKey } = process.env const originalPublicKey = publicKey.replace(/\\n/g, '\n')

Esto hará el trabajo, generará sus claves originales.

 const publicKey = '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlkH/R64I0H1awndlU1w6BseS9\n5ygy2v6rwV7BA/xlNGCtWfsQ8UlbJl7fawZ1hgL7H8FcUkGk/RsWB7xRpUeHypnE\n8UU2bbhaS+X8Bze2kdoayerb5+YK6kZlyPvmI+WVxksKUEChcKE+t83mqVpnQnO9\nTkTXhzvual4cG+WatwIDAQAB\n-----END PUBLIC KEY-----' const originalPublicKey = publicKey.replace(/\\n/g, '\n') console.log(originalPublicKey)

entonces simplemente puede usar esto en su código.

 crypto.createPublicKey({ key: originalPublicKey, format: 'pem', });

Avíseme en los comentarios, si tiene algún problema después de esto también.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Su clave parece ser una clave pública codificada con PEM en formato X.509/SPKI. Sin embargo, faltan los saltos de línea. Estos deben configurarse de modo que el encabezado y el pie de página estén en una sola línea. En el cuerpo hay un salto de línea cada 64 caracteres.

Una clave PEM con el formato correcto puede ser procesada directamente por createPublicKey() . La clave se aceptará incluso si faltan los saltos de línea en el cuerpo, pero el encabezado y el pie de página deben estar en líneas diferentes; de lo contrario, se mostrará el mensaje de error publicado: error:0909006C:PEM rutines:get_name:no start line .

Ejemplo:

 var crypto = require('crypto') var x509 = `-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAunF5aDa6HCfLMMI/MZLT 5hDk304CU+ypFMFiBjowQdUMQKYHZ+fklB7GpLxCatxYJ/hZ7rjfHH3Klq20/Y1E bYDRopyTSfkrTzPzwsX4Ur/l25CtdQldhHCTMgwf/Ev/buBNobfzdZE+Dhdv5lQw KtjI43lDKvAi5kEet2TFwfJcJrBiRJeEcLfVgWTXGRQn7gngWKykUu5rS83eAU1x H9FLojQfyia89/EykiOO7/3UWwd+MATZ9HLjSx2/Lf3g2jr81eifEmYDlri/OZp4 OhZu+0Bo1LXloCTe+vmIQ2YCX7EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4i GwIDAQAB -----END PUBLIC KEY-----`; // Import var importedPubKey = crypto.createPublicKey({ key: x509, format: 'pem' // default, can also be omitted }); // Export console.log(importedPubKey.export({type: 'spki', format: 'pem'}))

La clave también se puede escribir como una sola línea con saltos de línea como secuencias de escape ( \n ), por ejemplo, para encabezado y pie de página en líneas individuales:

 var x509 = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAunF5aDa6HCfLMMI/MZLT5hDk304CU+ypFMFiBjowQdUMQKYHZ+fklB7GpLxCatxYJ/hZ7rjfHH3Klq20/Y1EbYDRopyTSfkrTzPzwsX4Ur/l25CtdQldhHCTMgwf/Ev/buBNobfzdZE+Dhdv5lQwKtjI43lDKvAi5kEet2TFwfJcJrBiRJeEcLfVgWTXGRQn7gngWKykUu5rS83eAU1xH9FLojQfyia89/EykiOO7/3UWwd+MATZ9HLjSx2/Lf3g2jr81eifEmYDlri/OZp4OhZu+0Bo1LXloCTe+vmIQ2YCX7EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4iGwIDAQAB\n-----END PUBLIC KEY-----"

Todo esto también funciona si la clave se almacena en una variable de entorno (por ejemplo X509ENV ) y se recupera (a través de process.env.X509ENV ) siempre que los saltos de línea se tengan en cuenta correctamente.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda