Come creare file .pem per il server web https


90

Sto usando il framework Express in Node.js per creare un server web. Voglio che il trasporto sia basato su SSL.

Il codice per creare il server web https è il seguente.

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

Domanda: come creare key.pem e cert.pem richiesti da express?

Risposte:


200

I due file necessari sono un certificato SSL con codifica PEM e una chiave privata. I certificati e le chiavi con codifica PEM sono testo con codifica Base64 con delimitatori di inizio / fine simili -----BEGIN RSA PRIVATE KEY-----o simili.

Per creare un certificato SSL devi prima generare una chiave privata e una richiesta di firma del certificato, o CSR (che contiene anche la tua chiave pubblica). Puoi farlo in vari modi, ma ecco come in OpenSSL.

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

Ciò ti farà inserire un prompt interattivo per generare una chiave privata RSA a 2048 bit e un CSR che contiene tutte le informazioni che scegli di inserire nei prompt. ( Nota: il nome comune è dove vorrai inserire il nome di dominio che utilizzerai per accedere al tuo sito. ) Dopo averlo fatto, normalmente invierai questo CSR a un'autorità di certificazione attendibile e una volta che hanno convalidato la tua richiesta riceverai un certificato.

Se non ti interessa che il tuo certificato sia attendibile (di solito il caso per scopi di sviluppo) puoi semplicemente creare un certificato autofirmato. Per fare ciò, possiamo usare quasi la stessa riga, ma passeremo due parametri extra.

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

Questo ti darà un certificato (valido per 10 anni) e una coppia di chiavi che puoi usare nello snippet di codice che hai pubblicato.


2
che dire del certificato e della chiave del client?
nkint

1
Questo post è completo, esegui entrambi i due comandi che ha incollato per vincere i tasti + certificato. Il client non stabilisce la fiducia, solo il server.
Ninjaxor

@paul Puoi dirmi dove sono stati generati la chiave .pem e il certificato? Voglio dire quale directory? Sto usando Ubuntu 14
StormTrooper

2
Scriveranno nella directory di lavoro corrente della tua shell.
Paul Kehrer

1
Si noti che il certificato autofirmato generato in questo modo è la versione 1, contenente CN, ma non SAN. "Dalla versione 58, Chrome richiede che i certificati SSL utilizzino SAN (Subject Alternative Name) invece del popolare Common Name (CN), quindi il supporto CN è stato rimosso". [Correzione di Chrome 58+ [missing_subjectAltName] con openssl quando si utilizzano certificati autofirmati] ( alexanderzeitler.com/articles/… )
Zhiyong

12

Segui questa procedura:

  1. crea la cartella in cui desideri memorizzare la chiave e il certificato:

    mkdir conf


  1. vai a quella directory:

    cd conf


  1. prendi questo ca.cnffile da usare come scorciatoia di configurazione:

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


  1. creare una nuova autorità di certificazione utilizzando questa configurazione:

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


  1. ora che abbiamo la nostra autorità di certificazione ca-key.peme ca-cert.pem, generiamo una chiave privata per il server:

    openssl genrsa -out key.pem 4096


  1. prendi questo server.cnffile da usare come scorciatoia di configurazione:

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


  1. generare la richiesta di firma del certificato utilizzando questa configurazione:

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


  1. firmare la richiesta:

    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

Ho trovato questa procedura qui , insieme a ulteriori informazioni su come utilizzare questi certificati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.