Como criar arquivos .pem para o servidor da web https

90

Estou usando a estrutura Express em Node.js para criar um servidor web. Quero que o transporte seja baseado em SSL.

O código para criar o servidor da web https é o seguinte.

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

Pergunta: Como criar o key.pem e o cert.pem exigidos pelo express?

Jeffrey
fonte

Respostas:

200

Os dois arquivos de que você precisa são um certificado SSL codificado por PEM e uma chave privada. Certos e chaves codificados por PEM são texto codificado em Base64 com delimitadores de início / fim que parecem -----BEGIN RSA PRIVATE KEY-----ou semelhantes.

Para criar um certificado SSL, você primeiro precisa gerar uma chave privada e uma solicitação de assinatura de certificado, ou CSR (que também contém sua chave pública). Você pode fazer isso de várias maneiras, mas veja como em OpenSSL.

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

Isso fará com que você entre em um prompt interativo para gerar uma chave privada RSA de 2048 bits e um CSR que contém todas as informações que você escolher inserir nos prompts. ( Observação: o nome comum é onde você deseja colocar o nome de domínio que usará para acessar seu site. ) Depois de fazer isso, você normalmente enviaria este CSR a uma autoridade de certificação confiável e depois de validada seu pedido, você receberá um certificado.

Se você não se importa se o seu certificado é confiável (geralmente o caso para fins de desenvolvimento), você pode apenas criar um certificado autoassinado. Para fazer isso, podemos usar quase a mesma linha, mas vamos passar dois parâmetros extras.

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

Isso lhe dará um certificado (válido por 10 anos) e um par de chaves que você pode usar no trecho de código postado.

Paul Kehrer
fonte
2
e quanto ao certificado e chave do cliente?
nkint
1
Esta postagem está completa, execute os dois comandos que ele colou para ganhar as chaves + cert. O cliente não estabelece confiança, apenas o servidor.
Ninjaxor 01 de
@paul Você pode me dizer para onde essas chaves .pem e certificados são gerados? Quero dizer, qual diretório? Estou usando o Ubuntu 14
StormTrooper,
2
Eles escreverão no diretório de trabalho atual do seu shell.
Paul Kehrer de
1
Observe que o certificado autoassinado gerado dessa forma é a versão 1, contendo CN, mas sem SAN. "Desde a versão 58, o Chrome requer certificados SSL para usar SAN (nome alternativo do assunto) em vez do popular nome comum (CN), portanto, o suporte a CN foi removido." [Corrigindo Chrome 58+ [missing_subjectAltName] com openssl ao usar certificados autoassinados] ( alexanderzeitler.com/articles/… )
Zhiyong
12

Basta seguir este procedimento:

  1. crie a pasta onde deseja armazenar sua chave e certificado:

    mkdir conf


  1. vá para esse diretório:

    cd conf


  1. pegue este ca.cnfarquivo para usar como um atalho de configuração:

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


  1. crie uma nova autoridade de certificação usando esta configuração:

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


  1. agora que temos nossa autoridade de certificação em ca-key.peme ca-cert.pem, vamos gerar uma chave privada para o servidor:

    openssl genrsa -out key.pem 4096


  1. pegue este server.cnfarquivo para usar como um atalho de configuração:

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


  1. gere a solicitação de assinatura de certificado usando esta configuração:

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


  1. assine o pedido:

    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

Encontrei esse procedimento aqui , junto com mais informações sobre como usar esses certificados.

John Slegers
fonte