Cómo crear archivos .pem para el servidor web https


90

Estoy usando el marco Express en Node.js para crear un servidor web. Quiero que el transporte se base en SSL.

El código para crear el servidor web https es el siguiente.

var app = express.createServer({
  key: fs.readFileSync('./conf/key.pem'),
  cert: fs.readFileSync('./conf/cert.pem')
});
module.exports = app;

Pregunta: ¿Cómo crear el key.pem y cert.pem requeridos por express?

Respuestas:


200

Los dos archivos que necesita son un certificado SSL codificado en PEM y una clave privada. Los certificados y claves codificados en PEM son texto codificado en Base64 con delimitadores de inicio / fin que se parecen -----BEGIN RSA PRIVATE KEY-----o similares.

Para crear un certificado SSL, primero debe generar una clave privada y una solicitud de firma de certificado, o CSR (que también contiene su clave pública). Puede hacerlo de varias formas, pero así es como se hace en OpenSSL.

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

Esto hará que ingrese un mensaje interactivo para generar una clave privada RSA de 2048 bits y un CSR que tenga toda la información que elija ingresar en los mensajes. ( Nota: Common Name es donde querrá poner el nombre de dominio que usará para acceder a su sitio ) . Una vez que haya hecho esto, normalmente enviará esta CSR a una autoridad certificadora de confianza y una vez que hayan validado su solicitud recibirá un certificado.

Si no le importa que su certificado sea confiable (generalmente el caso para fines de desarrollo), puede simplemente crear un certificado autofirmado. Para hacer esto, podemos usar casi la misma línea, pero pasaremos dos parámetros adicionales.

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

Esto le dará un certificado (válido por 10 años) y un par de claves que puede usar en el fragmento de código que publicó.


2
¿Qué pasa con el certificado y la clave del cliente?
nkint

1
Esta publicación está completa, ejecute los dos comandos que pegó para ganar las claves + certificado. El cliente no establece confianza, solo el servidor.
Ninjaxor

@paul ¿Puede decirme dónde se generan estas claves .pem y certificados? ¿Me refiero a qué directorio? Estoy usando Ubuntu 14
StormTrooper

2
Escribirán en el directorio de trabajo actual de su shell.
Paul Kehrer

1
Tenga en cuenta que el certificado autofirmado generado de esta manera es la versión 1, que contiene CN, pero no SAN. "Desde la versión 58, Chrome requiere que los certificados SSL utilicen SAN (nombre alternativo del sujeto) en lugar del conocido nombre común (CN), por lo que se ha eliminado la compatibilidad con CN". [Arreglando Chrome 58+ [missing_subjectAltName] con openssl al usar certificados autofirmados] ( alexanderzeitler.com/articles/… )
Zhiyong

12

Simplemente siga este procedimiento:

  1. cree la carpeta donde desea almacenar su clave y certificado:

    mkdir conf


  1. ve a ese directorio:

    cd conf


  1. tome este ca.cnfarchivo para usarlo como acceso directo de configuración:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


  1. cree una nueva autoridad de certificación usando esta configuración:

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


  1. ahora que tenemos nuestra autoridad de certificación en ca-key.pemy ca-cert.pem, generemos una clave privada para el servidor:

    openssl genrsa -out key.pem 4096


  1. tome este server.cnfarchivo para usarlo como acceso directo de configuración:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


  1. genere la solicitud de firma de certificado usando esta configuración:

    openssl req -new -config server.cnf -key key.pem -out csr.pem


  1. firmar la solicitud:

    openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem

Encontré este procedimiento aquí , junto con más información sobre cómo usar estos certificados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.