Konfigurieren von HTTPS für Express und Nginx

Ich versuche, meine ExpressJS App für https Verbindung zu konfigurieren. Der Express-Server läuft bei localhost: 8080 und der sichere ein localhost: 8443.

Hier ist der Server.js Code im Zusammenhang mit https:

var app = express(); var https = require('https'); const options = { cert: fs.readFileSync('/etc/letsencrypt/live/fire.mydomain.me/fullchain.pem'), key: fs.readFileSync('/etc/letsencrypt/live/fire.mydomain.me/privkey.pem') }; app.listen(8080, console.log("Server running")); https.createServer(options, app).listen(8443, console.log("Secure server running on port 8443")); 

Und hier ist meine Nginx Konfiguration:

 server { listen 80; listen [::]:80; server_name fire.mydomain.me; location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } server { listen 443; listen [::]:443; server_name fire.mydomain.me; location / { proxy_pass https://localhost:8443; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } 

Was ich getan habe :

  • SSL-Zertifikat mit Letsencrypt-certonly-Tool für die Domain fire.mydomain.me generieren.
  • Konfigurieren von nginx.
  • Konfigurieren der Server.js Knoten App.
  • Hinzufügen von TCP-Regeln für den 443-Port in Ufw.

Ich habe es versucht

  • Die Not-ssl-Server-Zeile in server.js zu kommentieren, um die Verbindungen zu erzwingen, um durch die ssl-Konfiguration zu gehen: Dies dient der Seite, wenn ich versuche zu fire.mydomain.me:443 zu gehen, aber nicht zu "https: // fire.mydomain. mich". In beiden Fällen kein SSL. Versuche, zu https: // fire.mydomain.me zu gehen, generiere diese Nachricht "Diese Website bietet keine sichere Verbindung" in Google Chrome.

  • Ich folgte diesem Tutorial in erster Linie, um meine ssl Knoten config: https://medium.com/@yash.kulshrestha/using-lets-encrypt-with-express-e069c7abe625#.93jgjlgsc

  • Keine Nachricht aussenden nach dem Hinzufügen von ssl über socket.io
  • Force SSL mit expressjs 3
  • Innerhalb eines Webbrowsers ist es möglich für JavaScript, um Informationen über das HTTPS-Zertifikat zu erhalten, das für die aktuelle Seite verwendet wird?
  • Erkennung der Browser-TLS-Kompatibilität
  • Verbinden mit MongoDB über SSL mit Node.js
  • SSL-Verbindung in JavaScript
  • SSL Alternative - verschlüsseln Passwort mit JavaScript an PHP zu entschlüsseln
  • Erkennen, ob der Browser TLS aktiviert hat
  • 2 Solutions collect form web for “Konfigurieren von HTTPS für Express und Nginx”

    Sie müssen nicht HTTPS zwischen Ihrem nginx Reverse Proxy und Node App verwenden, die auf demselben Host ausgeführt wird. Sie können beide HTTP-Anfragen an Port 80 und HTTPS-Anfragen an Port 443 an denselben Port in Ihrem Node app-8080 in diesem Fall verteilen – und Sie müssen in diesem Fall keine TLS-Zertifikate konfigurieren.

    Sie können Ihre server.js Datei ändern zu:

     var app = express(); app.listen(8080, console.log("Server running")); 

    Und benutze eine nginx config, die proxy_pass http://localhost:8080; Für HTTP auf Port 80 und HTTPS auf Port 443.

    So ist es meist so. Verschlüsseln von Verkehr auf der Loopback-Schnittstelle fügt keine Sicherheit hinzu, weil Sie den Verkehr, den Sie benötigen, root Zugriff auf die Box und wenn Sie es haben, dann können Sie die Certs lesen und entschlüsseln den Verkehr sowieso. In Anbetracht der Tatsache, dass die meisten Beiträge auf https://nodejs.org/en/blog/vulnerability/ mit OpenSSL verwandt sind, könnte man argumentieren, dass mit SSL in Node kann es weniger sicher in diesem speziellen Fall der Verschlüsselung Loopback-Schnittstelle Verkehr . Sehen Sie diese Diskussion über das Knotenprojekt auf GitHub für weitere Informationen.

    Dank @rsp Lösung, hier ist die funktionierende Nginx Konfiguration:

     server { listen 80; listen 443 ssl; server_name fire.mydomain.me; ssl_certificate /etc/letsencrypt/live/fire.mydomain.me/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/fire.mydomain.me/privkey.pem; location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } 
    Lassen Sie uns Javascript Schönheit und nützlich machen.