Anfängerfrage: nginx reverse mit ssl

Quorx

Member
Hallo,

ich habe einen Apache 2.4 installiert (FreeBSD 10.3). Dieses spricht aktuell nur http. Da ich auf den Server mehrere Jails habe lauscht dieser auf Port 50080. Weiterhin besitze ich einen VHost welcher einen nginx installiert hat der als Reverse Proxy für den apache gedacht ist.

Nun meine Fragen:

- Wo muss ich denn das Zertifikat drauf installieren, da ja der DNS eintrag auf den nginx server zeigt ?
- Funktioniert diese Konstellation mit "let's encrypt" oder muss ich da irgendwie speziell vorgehen ?
- Wenn das Zertifikat auf den nginx liegen muss, was für ein Zertifikat nutze ich dann auf dem Apachen, und gibt das Probleme bei nginx wenn er eine verschlüsselte Verbindung auf den apache aufbauen muss ?

Ciao Quorx
 
Moin,

ich habe eine ähnliche Konstellation mit nginx + nginx statt Apache laufen.

1. Das Zertifikat wird im nginx installiert, der vom Internet erreichbar ist/sein soll bzw. per DNS aufgelöst werden kann.
2. Ja, funktioniert und es ist, abgesehen von der Proxy-Konfiguration, keine spezielle Konfiguration nötig. Stichworte für die Suche sind proxy + nginx.
3. Der Apache benötigt kein eigenes Zertifikat, da der nginx die Verschlüsselung übernimmt. Allerdings ist der Traffic zw. nginx und Apache unverschlüsselt. Soll der Apache allerdings selbst via https://apache/ und zusätzlich via https://nginx/apache erreichbar sein, wird es trickiger. In dem Fall würde ich mit zwei host für http und https arbeiten.
 
Moin,

erstmal danke für deine Antwort.

Der Apache Rechner soll nur über den Reverse Proxy (nginx) erreichbar sein.

Ich will auf dem Apache via pf auch nur HTTPS Requests vom nginx erlauben.
Auf dem nginx sollen mehrere vhosts hosts laufen, die dann zum Apache auf andere Ports (von anderen Jails) verteilen.

https://maus.quorx.de:443 (nginx) -> Apache (https) TCP Port 5443
https://haus.quorx.de:443 (nginx) -> Apache (https) TCP Port 6443
https://hamster.quorx.de:443 (nginx) -> Apache (https) TCP Port 7443

Ciao Quorx
 
Ich hab so eine Konstellation auch am Laufen. Hier der relevante Teil aus meiner Konfiguration:
Code:
...
server {
  listen 80;
  server_name wiki.example.com;
  return 301 https://$server_name$request_uri;
}

server {
  listen 80;
  server_name cloud.example.com;
  return 301 https://$server_name$request_uri;
}

# https part:
server {
  listen 443 ssl;
  server_name wiki.example.com;

  ssl_prefer_server_ciphers on;
  ssl_certificate /usr/local/etc/letsencrypt/live/wiki.example.com/fullchain.pem;
  ssl_certificate_key /usr/local/etc/letsencrypt/live/wiki.example.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA';
  add_header Strict-Transport-Security max-age=15768000;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  ssl_dhparam group16.pem;

  location / {
    proxy_pass http://kiki.intern.example.com/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Proxy "";
  }
}

server {
  listen 443 ssl;
  server_name cloud.example.com;

  ssl_prefer_server_ciphers on;
  ssl_certificate /usr/local/etc/letsencrypt/live/cloud.example.com/fullchain.pem;
  ssl_certificate_key /usr/local/etc/letsencrypt/live/cloud.example.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA';
  add_header Strict-Transport-Security max-age=15768000;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  ssl_dhparam group16.pem;

  location / {
    proxy_pass http://wolke.intern.example.com/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Proxy "";
  }
}
...
 
Hallo,

was mir noch nicht ganz klar ist:

Für den Reverse Proxy benutze ich ein lets encrypt Zertifikat, für den apache dahinter ein Zertifikat meiner eigenen CA.
Wie mach ich denn dem nginx klar, dass er mein Zertifikat akzeptieren soll obwohl er meiner CA nicht vertraut ?

Gruß Quorx
 
Dein CA-Cert zu /etc/ssl/cert.pem (oder wo das konkret ist) hinzufügen, bzw. sogar als einziges Cert drinhaben, je nachdem, wie dein Vertrauensbedürfnis ist.
 
Zurück
Oben