So erstellen Sie PEM-Dateien für den https-Webserver

90

Ich verwende das Express-Framework in Node.js, um einen Webserver zu erstellen. Ich möchte, dass der Transport auf SSL basiert.

Der Code zum Erstellen des https-Webservers lautet wie folgt.

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

Frage: Wie erstelle ich die für Express erforderlichen key.pem und cert.pem?

Jeffrey
quelle

Antworten:

200

Die beiden benötigten Dateien sind ein PEM-codiertes SSL-Zertifikat und ein privater Schlüssel. PEM-codierte Zertifikate und Schlüssel sind Base64-codierter Text mit Start- / Endbegrenzern, die ähnlich -----BEGIN RSA PRIVATE KEY-----oder ähnlich aussehen .

Um ein SSL-Zertifikat zu erstellen, müssen Sie zuerst einen privaten Schlüssel und eine Zertifikatsignierungsanforderung oder CSR (die auch Ihren öffentlichen Schlüssel enthält) generieren. Sie können dies auf verschiedene Arten tun, aber hier ist, wie in OpenSSL.

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

Dies führt dazu, dass Sie eine interaktive Eingabeaufforderung eingeben, um einen privaten 2048-Bit-RSA-Schlüssel und einen CSR zu generieren, der alle Informationen enthält, die Sie bei den Eingabeaufforderungen eingeben. ( Hinweis: Unter Common Name möchten Sie den Domainnamen eingeben, mit dem Sie auf Ihre Site zugreifen. ) Sobald Sie dies getan haben, senden Sie diese CSR normalerweise an eine vertrauenswürdige Zertifizierungsstelle und sobald diese validiert ist Ihre Anfrage würden Sie ein Zertifikat erhalten.

Wenn Sie nicht möchten, dass Ihr Zertifikat vertrauenswürdig ist (normalerweise zu Entwicklungszwecken), können Sie einfach ein selbstsigniertes Zertifikat erstellen. Dazu können wir fast dieselbe Zeile verwenden, aber wir werden zwei zusätzliche Parameter übergeben.

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

Dadurch erhalten Sie ein Zertifikat (gültig für 10 Jahre) und ein Schlüsselpaar, die Sie in dem von Ihnen veröffentlichten Codefragment verwenden können.

Paul Kehrer
quelle
2
Was ist mit Client-Zertifikat und Schlüssel?
Nkint
1
Dieser Beitrag ist abgeschlossen. Führen Sie beide Befehle aus, die er eingefügt hat, um die Schlüssel + Zertifikat zu gewinnen. Der Client stellt kein Vertrauen her, nur der Server.
Ninjaxor
@paul Kannst du mir bitte sagen, wohin diese .pem-Schlüssel und Zertifikate generiert werden? Ich meine welches Verzeichnis? Ich benutze Ubuntu 14
StormTrooper
2
Sie schreiben in das aktuelle Arbeitsverzeichnis Ihrer Shell.
Paul Kehrer
1
Beachten Sie, dass das auf diese Weise generierte selbstsignierte Zertifikat Version 1 ist, die CN, aber kein SAN enthält. "Seit Version 58 benötigt Chrome SSL-Zertifikate, um SAN (Subject Alternative Name) anstelle des beliebten Common Name (CN) zu verwenden. Daher wurde die CN-Unterstützung entfernt." [Reparieren von Chrome 58+ [missing_subjectAltName] mit openssl bei Verwendung von selbstsignierten Zertifikaten] ( alexanderzeitler.com/articles/… )
Zhiyong
12

Folgen Sie einfach diesem Verfahren:

  1. Erstellen Sie den Ordner, in dem Sie Ihren Schlüssel und Ihr Zertifikat speichern möchten:

    mkdir conf


  1. gehe in dieses Verzeichnis:

    cd conf


  1. Holen Sie sich diese ca.cnfDatei, um sie als Konfigurationsverknüpfung zu verwenden:

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


  1. Erstellen Sie mit dieser Konfiguration eine neue Zertifizierungsstelle:

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


  1. Nachdem wir unsere Zertifizierungsstelle in ca-key.pemund haben ca-cert.pem, generieren wir einen privaten Schlüssel für den Server:

    openssl genrsa -out key.pem 4096


  1. Holen Sie sich diese server.cnfDatei, um sie als Konfigurationsverknüpfung zu verwenden:

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


  1. Generieren Sie die Zertifikatsignierungsanforderung mit dieser Konfiguration:

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


  1. Unterschreiben Sie die Anfrage:

    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

Ich habe dieses Verfahren hier zusammen mit weiteren Informationen zur Verwendung dieser Zertifikate gefunden.

John Slegers
quelle