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:

  • Verwenden von // in einer <script> -Source
  • Mein node.js https Client arbeitet immer unabhängig von der Zertifikatgültigkeit
  • Kerberos-Authentifizierung in Node.js https.get oder https.request
  • Cross-Domain-Anforderung von HTTP zu HTTPS bricht sofort ab
  • PATCH https Anfrage aus Parse
  • Hör auf HTTP und HTTPS für eine einzelne Express-App
  • 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

  • Ajax GET Anfrage über HTTPS
  • Wie kann ich mein CSS / JS auf einem HTTPS Server hosten?
  • Wie kann ich diese Sicherheitsfrage überwinden?
  • Ajax mit http POST-Methode für Petitionen anstelle von Webseiten in Secure Web SIte
  • MixedContent, wenn ich lade https Seite durch ajax, aber Browser denkt immer noch, dass es http ist
  • Verwenden von // in einer <script> -Source
  • 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.