425 Stimmen

Wie erstellt man einen HTTPS-Server in Node.js?

Wie erstellt man mit einem SSL-Schlüssel und einem Zertifikat einen HTTPS-Dienst?

2 Stimmen

Ich habe restify.js anstelle von express.js, aber die Idee ist die gleiche. So habe ich einen node.js-Server eingerichtet, der sowohl HTTP als auch HTTPS akzeptiert qugstart.com/blog/node-js/

2 Stimmen

Ohne Express und mit der neuesten Version von Node - siehe hier: stackoverflow.com/a/21809393/388026

1 Stimmen

Was ist aus dieser Frage geworden? Aus den Antworten geht hervor, dass es ursprünglich um express.js ging.

18voto

coolaj86 Punkte 69032

Update

Verwenden Sie Let's Encrypt über Greenlock.js

Original-Post

Mir ist aufgefallen, dass keine dieser Antworten zeigt, dass das Hinzufügen eines Zwischengeschaltete Root-CA zur Kette, hier sind einige Null-Konfigurationsbeispiele mit dem man spielen kann, um das zu sehen:

Schnipsel:

var options = {
  // this is the private key only
  key: fs.readFileSync(path.join('certs', 'my-server.key.pem'))

// this must be the fullchain (cert + intermediates)
, cert: fs.readFileSync(path.join('certs', 'my-server.crt.pem'))

// this stuff is generally only for peer certificates
//, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]
//, requestCert: false
};

var server = https.createServer(options);
var app = require('./my-express-or-connect-app').create(server);
server.on('request', app);
server.listen(443, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

var insecureServer = http.createServer();
server.listen(80, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

Dies ist eines der Dinge, die oft einfacher sind, wenn man nicht versuchen, es direkt über Connect oder Express zu tun, sondern lassen Sie die native https Modul und verwenden Sie dieses, um Ihre Connect/Express-App zu bedienen.

Auch wenn Sie server.on('request', app) statt die Anwendung bei der Erstellung des Servers zu übergeben, gibt es die Möglichkeit, die server Instanz an eine Initialisierungsfunktion übergeben, die die Connect-/Express-App erstellt (wenn Sie die Websockets über SSL auf demselben Server, zum Beispiel).

10voto

cmd Punkte 11226

Damit Ihre Anwendung auf beides hören kann http y https in den Häfen 80 y 443 jeweils Folgendes tun

Erstellen Sie eine Express-App:

var express = require('express');
var app = express();

Die App, die von express() ist eine JavaScript-Funktion. Sie kann an die HTTP-Server von Node als Callback übergeben werden, um Anfragen zu bearbeiten. Dies macht es einfach, sowohl HTTP- als auch HTTPS-Versionen Ihrer Anwendung mit der gleichen Codebasis bereitzustellen.

Sie können dies wie folgt tun:

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');
var app = express();

var options = {
  key: fs.readFileSync('/path/to/key.pem'),
  cert: fs.readFileSync('/path/to/cert.pem')
};

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

Alle Einzelheiten finden Sie in der doc

0voto

Manuel Spigolon Punkte 8922

Sie können diese auch mit dem Fastify-Framework archivieren:

const { readFileSync } = require('fs')
const Fastify = require('fastify')

const fastify = Fastify({
  https: {
    key: readFileSync('./test/asset/server.key'),
    cert: readFileSync('./test/asset/server.cert')
  },
  logger: { level: 'debug' }
})

fastify.listen(8080)

(und laufen openssl req -nodes -new -x509 -keyout server.key -out server.cert um die Dateien zu erstellen, wenn Sie Tests schreiben müssen)

-1voto

Adam Pietrasiak Punkte 11497

Wenn Sie es nur für die lokale Entwicklung benötigen, habe ich ein Dienstprogramm genau für diese Aufgabe erstellt - https://github.com/pie6k/easy-https

import { createHttpsDevServer } from 'easy-https';

async function start() {
  const server = await createHttpsDevServer(
    async (req, res) => {
      res.statusCode = 200;
      res.write('ok');
      res.end();
    },
    {
      domain: 'my-app.dev',
      port: 3000,
      subdomains: ['test'], // will add support for test.my-app.dev
      openBrowser: true,
    },
  );
}

start();

Es:

  • Fügt automatisch die richtigen Domäneneinträge zu /etc/hosts hinzu
  • Fragt Sie nur nach dem Admin-Passwort, wenn dies beim ersten Start / Domänenwechsel erforderlich ist
  • Bereitet https-Zertifikate für bestimmte Domains vor
  • wird diesen Zertifikaten auf Ihrem lokalen Rechner vertrauen
  • Öffnet den Browser beim Start und zeigt auf die https-URL Ihres lokalen Servers

-4voto

  1. Laden Sie die rar-Datei für die Einrichtung von openssl von hier herunter: https://indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip
  2. Kopieren Sie einfach Ihren Ordner auf Laufwerk C.
  3. Erstellen Sie die Datei openssl.cnf und laden Sie deren Inhalt von : http://web.mit.edu/crypto/openssl.cnf openssl.cnf kann an beliebiger Stelle abgelegt werden, aber der Pfad muss korrekt sein, wenn wir ihn in der Eingabeaufforderung angeben.
  4. Öffnen Sie die Befehlsprozedur und setzen Sie den Pfad für openssl.cnf C:\set OPENSSL_CONF=d:/openssl.cnf 5. führen Sie dies in cmd aus: C:\openssl -0.9.8r-i386-win32-rev2>openssl.exe
  5. Führen Sie dann OpenSSL> genrsa -des3 -out server.enc.key 1024
  6. Dann wird nach Passwörtern gefragt: Geben Sie 4 bis 11 Zeichen als Passwort für Ihr Zertifikat ein.
  7. Führen Sie dann Folgendes aus Openssl>req -new -key server.enc.key -out server.csr
  8. Dann werden einige Details abgefragt, wie z. B. die Landesvorwahl, der Name des Bundeslandes usw. Geben Sie diese frei ein. 10 . Führen Sie dann Openssl > rsa -in server.enc.key -out server.key
  9. Führen Sie diese OpenSSL> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt dann verwenden Sie früheren Code, der auf Stack Overflow sind Danke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X