HTTPS und Zertifikate

Für den produktiven Einsatz von Enginsight ist eine verschlüsselte Verbindung über HTTPS zwingend notwendig.

Dazu installieren und konfigurieren Sie nginx auf dem Applikationsserver. Bei der automatischen Installation von Enginsight ist nginx bereits installiert.

So erhalten Sie den folgenden Aufbau:

  • Container Ports: 80, 8080

  • interne Ports: 81, 82 (127.0.0.1:81, 127.0.0.1:82)

Sie brauchen zwei Domains, die auf die IP-Adresse des Applikationsservers zeigen:

  • ngs-api.domain.de (Port 80)

  • ngs-app.domain.de (Port 443)

Wenn Sie ein eigenes Zertifikat besitzen, können Sie es nutzen. Alternativ empfehlen wir die Nutzung von Let's Encrypt.

nginx installieren (nur bei manueller Installation)

Haben Sie eine manuelle Installation durchgeführt, installieren Sie zunächst nginx. Bei einer automatischen Installation können Sie diesen Schritt überspringen.

apt install nginx

Interne Ports definieren

Defnieren Sie in der docker-compose.yml für die Benutzeroberfläche (ui-m1) und API (server-m2) einen internen Port.

1. Navigieren Sie in /opt/enginsight/enterprise

cd /opt/enginsight/enterprise

2. Öffnen Sie docker-compose.yml.

nano docker-compose.yml

3. Passen Sie die Ports an.

  ui-m1:
    image: registry.enginsight.com/enginsight/ui-m1:x.x.x
    ports:
    - "127.0.0.1:81:80"
    restart: always
    volumes:
    - "./conf/ui-m1/environment.js.production:/opt/enginsight/ui-m1/config/environment.js"

  server-m2:
    image: registry.enginsight.com/enginsight/server-m2:x.x.x
    networks:
    - redis
    - mongodb
    ports:
    - "127.0.0.1:82:8080"

4. Speichern Sie die Datei (Strg+o) und bestätigen Sie den Speicherprozess. Schließen Sie nano (Strg+x).

5. Führen Sie setup.sh aus, damit die Änderungen wirksam werden.

./setup.sh

Let's Encrypt einrichten

Wollen Sie ein eigenes Zertifikat nutzen, überspringen Sie die folgenden Schritte.

1. Passen Sie die Konfiguration von nginx an. Öffnen Sie die Konfigurationsdatei.

Automatische Installation

nano /etc/nginx/sites-available/ngs.conf

Manuelle Installation

nano /etc/nginx/sites-available/default

2. Nutzen Sie die folgende Vorlage und setzen Sie Ihre Domain ein.

server {
        listen 80;
        listen [::]:80;
 
        location ~ /.well-known {
                allow all;
        }
 
        location / {
                return 302 https://ngs-api.domain;
        }
 
        root /var/www/ngs-api.domain;
 
        server_name ngs-api.domain;
}
 
server {
        listen 80;
        listen [::]:80;
 
        location ~ /.well-known {
                allow all;
        }
 
        location / {
                return 302 https://ngs-app.domain;
        }
 
        root /var/www/ngs-app.domain;
 
        server_name ngs-app.domain;
}

3. Rufen Sie den Status von nginx ab und prüfen Sie, ob die Änderung erfolgreich war.

nginx -t

4. Starten Sie nginx neu.

service nginx restart

5. Installieren Sie Certbot.

sudo apt-get install certbot

6. Legen Sie für jede Domain einen Ordner an.

mkdir -p /var/www/ngs-api.domain.de
mkdir -p /var/www/ngs-app.domain.de

7. Erstellen Sie das Zertifikat.

certbot certonly --rsa-key-size 4096 --webroot -w /var/www/ngs-api.domain.de -d ngs-api.domain.de
certbot certonly --rsa-key-size 4096 --webroot -w /var/www/ngs-app.domain.de -d ngs-app.domain.de

8. Generieren Sie die Diffie-Hellman Parameter.

openssl dhparam -out dhparam.pem 2048

Zertifikate und SSL/TLS in nginx konfigurieren

Mit Let's Encrypt

Passen Sie die Konfiguration von nginx an.

1. Öffnen Sie die Konfigurationsdatei.

Automatische Installation

nano /etc/nginx/sites-available/ngs.conf

Manuelle Installation

nano /etc/nginx/sites-available/default

2. Nutzen Sie die folgende Vorlage und setzen Sie Ihre Domain ein.

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name ngs-app.domain.de;

    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    ssl_dhparam /etc/nginx/dhparam.pem;
    ssl_certificate /etc/letsencrypt/live/ngs-app.domain.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ngs-app.domain.de/privkey.pem;

    client_max_body_size 200m;

    location / {
        proxy_pass http://127.0.0.1:81;
        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-Proto "https";
        proxy_set_header X-Forwarded-Ssl   "on";
        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        $connection_upgrade;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name ngs-api.domain.de;

    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    ssl_dhparam /etc/nginx/dhparam.pem;
    ssl_certificate /etc/letsencrypt/live/ngs-api.domain.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ngs-api.domain.de/privkey.pem;

    client_max_body_size 200m;

    location / {
        proxy_pass http://127.0.0.1:82;
        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-Proto "https";
        proxy_set_header X-Forwarded-Ssl   "on";
        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        $connection_upgrade;
    }
}

3. Rufen Sie den Status von nginx ab und prüfen Sie, ob die Änderung erfolgreich war.

nginx -t

4. Starten Sie nginx neu.

service nginx restart

Mit eigenem Zertifikat

Achten Sie beim Zertifikat bitte darauf, dass es im PEM Format vorliegt. Wenn nicht, konvertieren Sie das Zertifikat zunächst in das PEM Format.

Passen Sie die Konfiguration von nginx an.

1. Öffnen Sie die Konfigurationsdatei.

Automatische Installation

nano /etc/nginx/sites-available/ngs.conf

Manuelle Installation

nano /etc/nginx/sites-available/default

2. Nutzen Sie die folgende Vorlage und setzen Sie Ihre Domain und die Pfade zu den Zertifikaten ein.

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name ngs-app.domain.de;

    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

#   ssl_dhparam /etc/nginx/dhparam.pem;
    ssl_certificate /<Pfad>/fullchain.pem;
    ssl_certificate_key /<Pfad>/privkey.pem;

    client_max_body_size 200m;

    location / {
        proxy_pass http://127.0.0.1:81;
        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-Proto "https";
        proxy_set_header X-Forwarded-Ssl   "on";
        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        $connection_upgrade;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name ngs-api.domain.de;

    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

#   ssl_dhparam /etc/nginx/dhparam.pem;
    ssl_certificate /<Pfad>/fullchain.pem;
    ssl_certificate_key /<Pfad>/privkey.pem;

    client_max_body_size 200m;

    location / {
        proxy_pass http://127.0.0.1:82;
        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-Proto "https";
        proxy_set_header X-Forwarded-Ssl   "on";
        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        $connection_upgrade;
    }
}

3. Rufen Sie den Status von nginx ab und prüfen Sie, ob die Änderung erfolgreich war.

nginx -t

4. Starten Sie nginx neu.

service nginx restart

Last updated