> For the complete documentation index, see [llms.txt](https://docs.enginsight.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.enginsight.com/docs/manual/installation-und-konfiguration/installation-und-konfiguration/weitere-konfigurationen/verschlusselung-per-https.md).

# Verschlüsselung per HTTPS

Für den produktiven Einsatz von Enginsight ist eine verschlüsselte Verbindung über HTTPS zur externen Kommunikation (z.B. für die Verbindung aus dem Internet) zwingend notwendig.

Dazu ist es nötig, [nginx](https://nginx.org/) auf dem Enginsight Applikationsserver zu installieren, Ports für die interne Kommunikation zu definieren, ein SSL/TLS-Zertifikat zu erstellen und dieses in nginx einzurichten.

{% hint style="warning" %}
**Bitte beachte**: Bei der **automatischen Installation** des Applikationsservers wird nginx bereits mitinstalliert. Bei der **manuellen Installation** von Enginsight muss nginx separat installiert werden.
{% endhint %}

***

## Schematischer Aufbau mit nginx

Der schematische Aufbau von Applikationsserver und Datenbankserver inklusive der verwendeten Protokolle und Ports sieht wie folgt aus:

![](https://1720942473-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1oAJCT6yz8fThAzdCQJt%2Fuploads%2F4Sto0yKyQPlVwvBbowkw%2FmitHTTPS.png?alt=media\&token=df9ce4c6-4719-4c4b-9fb6-6d1fee2f49e7)

Auf dem Applikationsserver laufen unter anderem die Docker-Container für die **Enginsight Benutzeroberfläche** (Container-Name: **ui-m1**) und für die **Enginsight API** (Container-Name: **server-m2**). Der Container ui-m1 verwendet dabei den **Port 80**, der Container server-m2 den **Port 8080**.

Diese Ports werden nun **internen Ports** zugeordnet, und zwar der Container-Port 80 dem internen **Port 81** (127.0.0.1:81) und der Container-Port 8080 dem internen **Port 82**. Die interne Kommunikation läuft dabei **über HTTP**.

**nginx** sorgt dafür, dass diese Verbindungen mittels **SSL/TLS-Zertifikaten** über **HTTPS verschlüsselt** werden.

Dafür werden für die externe Kommunikation **zwei Domains** benötigt, die auf die IP-Adresse des Applikationsservers zeigen. Dies ist zum Einen die Domain für die Benutzeroberfläche, **\<DomainApp>**, die auf **Port 443** läuft, zum Anderen die Domain für die API, **\<DomainAPI>**, die auf **Port 80** läuft.

Wir empfehlen, ein SSL/TLS-Zertifikat der Zertifizierungsstelle [Let's Encrypt](https://letsencrypt.org/de/) zu verwenden. Die Nutzung eines eigenen, öffentlich signierten SSL/TLS-Zertifikats ist ebenfalls möglich.

{% hint style="info" %}
Auch die Nutzung eines selbst signierten Zertifikats oder einer Windows PKI ist möglich, wir empfehlen jedoch, ein öffentlich signiertes Zertifikat zu verwenden.
{% endhint %}

***

## Auf dem Applikationsserver anmelden

{% hint style="warning" %}
Achte darauf, dass du die folgenden Schritte *auf dem Enginsight Applikationsserver* durchführst.
{% endhint %}

Melde dich auf dem Enginsight Applikationsserver an, sofern du dies noch nicht getan hast.

Du kannst dies entweder direkt in der Konsole deiner Applikationsserver-VM oder per Fernzugriff über SSH (Secure Shell) von einer anderen Maschine aus tun.

Fahre nun mit den folgenden Schritten fort.

***

## nginx installieren

{% hint style="warning" %}
**Bitte beachte**: Die manuelle Installation von nginx ist **nur bei einer manuellen Enginsight Installation** notwendig. Wenn du die die automatische Installation durchführst, wird nginx bereits auf dem Applikationsserver mitinstalliert und du kannst mit der [Definierung von Ports für die interne Kommunikation](#ports-fur-die-interne-kommunikation-definieren) weiter fortfahren.
{% endhint %}

Installiere nginx mit folgendem Befehl:

```
sudo apt install nginx
```

Bestätige deine Eingabe mit der **Enter**-Taste.

***

## Ports für die interne Kommunikation definieren

{% hint style="warning" %}
**Bitte beachte**: Die Definition von Ports für die interne Kommunikation ist **sowohl bei einer manuellen Enginsight Installation als auch bei einer automatischen Installation** notwendig.
{% endhint %}

Damit die interne Kommunikation der Dienste reibungslos funktioniert, müssen die Ports der Docker-Container für die Enginsight Benutzeroberfläche (Container-Name: ui-m1; Port: 80) und für die Enginsight API (Container-Name: server-m2; Port: 8080) internen Ports zugeordnet werden.

Dies ist notwendig, da nginx ansonsten auch Port 80 belegen würde und es dadurch zu einem Fehler beim Systemstart kommen würde.

Nimm dazu die folgenden Schritte vor:

{% stepper %}
{% step %}
Navigiere mit folgendem Befehl in das Enginsight Installationsverzeichnis:

```
cd /opt/enginsight/enterprise
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Öffne mit folgendem Befehl die **Docker-Konfigurationsdatei** `docker-compose.yml` :

```
sudo nano docker-compose.yml
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Navigiere zum Abschnitt `ui-m1`, um den internen Port für die Enginsight Benutzeroberfläche wie folgt anzupassen:

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

{% endstep %}

{% step %}
Navigiere zum Abschnitt `server-m2`, um den internen Port für die Enginsight API wie folgt anzupassen:

<pre><code>server-m2:
    image: registry.enginsight.com/enginsight/server-m2:x.x.x
    networks:
    - redis
    ports:
<strong>    - "127.0.0.1:82:8080"
</strong></code></pre>

{% endstep %}

{% step %}
Speichere die Änderungen in der Konfigurationsdatei (**Strg**+**o**) und bestätige den Speicherprozess. Schließe die Datei (**Strg**+**x**).
{% endstep %}

{% step %}
Stoppe nun mit folgendem Befehl die Docker-Instanz, damit Port 80 frei wird, um die Konfigurationsänderungen zu übernehmen:

```
sudo docker compose down
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Aktiviere nun nginx mit folgendem Befehl um sicherzustellen, dass es beim Systemstart mitstartet:

```
sudo systemctl enable nginx
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Nun musst du das Setup-Skript für den Applikationsserver noch einmal ausführen, um deine Anpassungen zu übernehmen.

Navigiere dazu mit folgendem Befehl in das Enginsight Installationsverzeichnis:

```
cd /opt/enginsight/enterprise
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Führe nun mit folgendem Befehl das Setup-Skript neu aus und bestätige alle Abfragen mit der **Enter**-Taste:

```
sudo ./setup.sh
```

{% endstep %}
{% endstepper %}

***

## Optional: SSL/TLS-Zertifikat von Let's Encrypt erstellen

{% hint style="info" %}
**Bitte beachte**: Wenn du ein **eigenes, öffentlich signiertes SSL/TLS-Zertifikat** verwenden möchtest, kannst du dieses **Teilkapitel überspringen** und [direkt hier weiter fortfahren](#verwendung-eines-eigenen-zertifikats). Ansonsten ist die Erstellung eines SSL/TLS-Zertifikats von Let's Encrypt **sowohl bei einer manuellen Enginsight Installation als auch bei einer automatischen Installation** notwendig.
{% endhint %}

Um die externe Kommunikation per HTTPS absichern zu können, benötigst du ein SSL/TLS-Zertifikat. Wir empfehlen, ein Zertifikat von Let's Encrypt zu verwenden.

{% hint style="warning" %}
**Bitte beachte**: SSL/TLS-Zertifikate von Let's Encrypt sind immer nur 3 Monate lang gültig und müssen entsprechend erneuert werden.
{% endhint %}

{% hint style="success" icon="lightbulb" %}
Mehr Informationen, wie du ein SSL/TLS von Let's Encrypt erneuerst, findest du in unserer Knowledge Base: [Wie aktualisiere ich in Enginsight ein SSL/TLS-Zertifikat von Let's Encrypt?](https://docs.enginsight.com/docs/knowledge-base/konfiguration/wie-aktualisiere-ich-in-enginsight-ein-ssl-tls-zertifikat-von-lets-encrypt)
{% endhint %}

Nimm folgende Schritte vor, um ein SSL/TLS-Zertifikat von Let's Encrypt zu erstellen:

{% stepper %}
{% step %}
Öffne mit folgendem Befehlen die **nginx-Konfigurationsdatei**:

* Befehl bei einer **automatischen Installation**:

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

Bestätige deine Eingabe mit der **Enter**-Taste.

* Befehl bei einer **manuellen Installation**:

```
sudo nano /etc/nginx/sites-available/default
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Kopiere folgende Vorlage in die Konsole oder das Terminal und ersetze die Platzhalter `<DomainAPI>` und `<DomainApp>` entsprechend:

<pre><code>server {
        listen 80;
        listen [::]:80;
 
        location ~ /.well-known {
                allow all;
        }
 
        location / {
<strong>                return 302 https://&#x3C;DomainAPI>;
</strong>        }
 
<strong>        root /var/www/&#x3C;DomainAPI>;
</strong> 
<strong>        server_name &#x3C;DomainAPI>;
</strong>}
 
server {
        listen 80;
        listen [::]:80;
 
        location ~ /.well-known {
                allow all;
        }
 
        location / {
<strong>                return 302 https://&#x3C;DomainApp>;
</strong>        }
 
<strong>        root /var/www/&#x3C;DomainApp>;
</strong> 
<strong>        server_name &#x3C;DomainApp>;
</strong>}
</code></pre>

{% endstep %}

{% step %}
Speichere die Änderungen in der Konfigurationsdatei (**Strg** + **o**) und bestätige den Speicherprozess. Schließe die Datei (**Strg** + **x**).
{% endstep %}

{% step %}
Validiere die Änderungen an der nginx-Konfiguration mit folgendem Befehl und bestätige deine Eingabe mit der **Enter**-Taste:

```
sudo nginx -t
```

Wenn die Konfigurationsänderungen erfolgreich sind, erhältst du folgende Meldung:

```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

{% endstep %}

{% step %}
Starte nun nginx mit folgendem Befehl neu:

```
sudo systemctl restart nginx
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Installiere nun [Certbot](https://certbot.eff.org/). Dies ist ein Tool, das die Erstellung und Installation von SSL/TLS-Zertifikaten von Let's Encrypt automatisiert. Gib dazu folgenden Befehl ein:

```
sudo apt-get install certbot
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Lege nun mit folgenden Befehlen für die Subdomains **ngs-api** und **ngs-app** jeweils einen Ordner an, in dem die Zertifikats-Dateien abgelegt werden:

```
sudo mkdir -p /var/www/<DomainAPI>
```

```
sudo mkdir -p /var/www/<DomainApp>
```

{% hint style="info" %}
Vergiss dabei nicht, `<DomainAPI>` und `<DomainApp>` entsprechend zu ersetzen.
{% endhint %}

Bestätige deine Eingaben mit der **Enter**-Taste.
{% endstep %}

{% step %}
Erstelle und speichere mit folgenden Befehlen die jeweiligen Zertifikats-Dateien:

```
sudo certbot certonly --rsa-key-size 4096 --webroot -w /var/www/<DomainAPI> -d <DomainAPI>
```

```
sudo certbot certonly --rsa-key-size 4096 --webroot -w /var/www/<DomainApp> -d <DomainApp>
```

{% hint style="info" %}
Vergiss dabei nicht, `<DomainAPI>` und `<DomainApp>` entsprechend zu ersetzen.
{% endhint %}

Bestätige deine Eingaben jeweils mit der **Enter**-Taste.
{% endstep %}

{% step %}
Generiere nun mit folgendem Befehl die Diffie Hellman (DH)-Parameter, mit denen geheime Schlüssel gesichert über einen unsicheren Kommunikationskanal ausgetauscht werden können:

```
sudo openssl dhparam -out dhparam.pem 4096
```

Bestätige deine Eingabe mit der **Enter**-Taste.

{% hint style="warning" %}
**Bitte beachte**: Abhängig von der Leistung und Auslastung deines Systems kann die Generierung der DH-Parameter einige Zeit in Anspruch nehmen. Warte ab, bis der Prozess abgeschlossen ist.
{% endhint %}
{% endstep %}
{% endstepper %}

***

## SSL/TLS-Zertifikat in nginx hinterlegen

Nun muss das SSL/TLS-Zertifikat in die nginx-Konfigurationsdatei übernommen werden. Die Schritte hierfür unterscheiden sich je nachdem, ob du ein Zertifikat von Let's Encrypt oder ein eigenes öffentlich signiertes Zertifikat verwendest.

### Verwendung eines Zertifikats von Let's Encrypt

{% hint style="warning" %}
**Bitte beachte**: Zertifkate von Let's Encrypt sind **3 Monate gültig**. Aktualisiere dein Zertifikat rechtzeitig.
{% endhint %}

{% hint style="success" icon="lightbulb" %}
Mehr Informationen, wie du ein SSL/TLS von Let's Encrypt erneuerst, findest du in unserer Knowledge Base: [Wie aktualisiere ich in Enginsight ein SSL/TLS-Zertifikat von Let's Encrypt?](https://docs.enginsight.com/docs/knowledge-base/konfiguration/wie-aktualisiere-ich-in-enginsight-ein-ssl-tls-zertifikat-von-lets-encrypt)
{% endhint %}

Nimm folgende Schritte vor, wenn du ein Zertifikat von Let's Encrypt verwendest:

{% stepper %}
{% step %}
Öffne mit folgendem Befehlen die **nginx-Konfigurationsdatei**:

* Befehl bei einer **automatischen Installation**:

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

Bestätige deine Eingabe mit der **Enter**-Taste.

* Befehl bei einer **manuellen Installation**:

```
sudo nano /etc/nginx/sites-available/default
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Vergleiche folgende Vorlage mit der Konfigurationsdatei und bearbeite die markierten Zeilen wie folgt:

* Ersetze die Platzhalter `<DomainAPI>` und `<DomainApp>` entsprechend.
* Ersetze in den Zeilen, die mit `proxy_pass` beginnen, die internen Ports gemäß der Angabe.

{% hint style="warning" %}
**Bitte beachte**: Der Diffie-Hellman-Parameter (`dhparam`) ist nicht standardmäßig vorhanden und muss erst erstellt werden, da nginx sonst einen Fehler ausgibt. Wie du einen `dhparam`-Parameter erstellst, findest du im vorherigen Abschnitt [Optional: SSL/TLS-Zertifikat von Let's Encrypt erstellen](#optional-ssl-tls-zertifikat-von-lets-encrypt-erstellen) unter Schritt 9.

In unserem Beispiel geben wir zudem eine Schlüssellänge von **2048** Bits an. Diese ist zwar sicher, wir empfehlen jedoch eine Schlüssellänge von **3072** Bits oder **4096** Bits. Passe die Schlüssellänge bei Bedarf entsprechend an. Wir weisen jedoch daraufhin, dass die Erstellung des Schlüssels in diesem Fall wesentlich mehr Zeit in Anspruch nimmt!
{% endhint %}

<pre><code>map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
server {
        listen 80;
        listen [::]:80;
 
        location ~ /.well-known {
                allow all;
        }
 
        location / {
<strong>                return 302 https://&#x3C;DomainAPI>;
</strong>        }
 
<strong>        root /var/www/&#x3C;DomainAPI>;
</strong> 
<strong>        server_name &#x3C;DomainAPI>;
</strong>}
 
server {
        listen 80;
        listen [::]:80;
 
        location ~ /.well-known {
                allow all;
        }
 
        location / {
<strong>                return 302 https://&#x3C;DomainApp>;
</strong>        }
 
<strong>        root /var/www/&#x3C;DomainApp>;
</strong> 
<strong>        server_name &#x3C;DomainApp>;
</strong>}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

<strong>    server_name &#x3C;DomainApp>;
</strong>
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE+AESGCM+AES256";
    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;

    # Erstellung von dhparam.pem:
    #$ sudo mkdir /etc/nginx/ssl -p
    #$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
  
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    
<strong>    ssl_certificate /etc/letsencrypt/live/&#x3C;DomainApp>/fullchain.pem;
</strong><strong>    ssl_certificate_key /etc/letsencrypt/live/&#x3C;DomainApp>/privkey.pem;
</strong>
    client_max_body_size 200m;

    location / {
<strong>        proxy_pass http://127.0.0.1:81;
</strong>        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;

<strong>    server_name &#x3C;DomainAPI>;
</strong>
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE+AESGCM+AES256";
    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;

    # Erstellung von dhparam.pem:
    #$ sudo mkdir /etc/nginx/ssl -p
    #$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    
<strong>    ssl_certificate /etc/letsencrypt/live/&#x3C;DomainAPI>/fullchain.pem;
</strong><strong>    ssl_certificate_key /etc/letsencrypt/live/&#x3C;DomainAPI>/privkey.pem;
</strong>
    client_max_body_size 200m;

    location / {
<strong>        proxy_pass http://127.0.0.1:82;
</strong>        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;
    }
}
</code></pre>

{% endstep %}

{% step %}
Speichere die Änderungen in der Konfigurationsdatei (**Strg** + **o**) und bestätige den Speicherprozess. Schließe die Datei (**Strg** + **x**).
{% endstep %}

{% step %}
Validiere die Änderungen an der nginx-Konfiguration mit folgendem Befehl und bestätige deine Eingabe mit der **Enter**-Taste:

```
sudo nginx -t
```

Wenn die Konfigurationsänderungen erfolgreich sind, erhältst du folgende Meldung:

```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

{% endstep %}

{% step %}
Starte nginx mit folgendem Befehl neu:

```
sudo systemctl restart nginx
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Nun musst du das Setup-Skript für den Applikationsserver noch einmal ausführen, um die **App-URL sowie die API-URL auf HTTPS umzustellen**.

Navigiere dazu mit folgendem Befehl in das Enginsight Installationsverzeichnis:

```
cd /opt/enginsight/enterprise
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Führe mit folgendem Befehl das Setup-Skript neu aus:

```
sudo ./setup.sh
```

Gib bei der Abfrage der URIs und URLs die URLs für die Enginsight Benutzeroberfläche und die API wie folgt an:

* **Enter App URL**: <mark style="color:$danger;">`https`</mark>`://<DomainApp>`
* **Enter API URL**: <mark style="color:$danger;">`https`</mark>`://<DomainAPI>`

Bestätige deine Eingaben jeweils mit der **Enter**-Taste.

{% hint style="danger" %}
**Bitte beachte**: Wird diese Anpassung nicht vorgenommen oder trägst du versehentlich http\:// ein, bleibt die Enginsight Instanz weiterhin nur per HTTP erreichbar, obwohl nginx bereits eine gesicherte Verbindung per HTTPS zur Verfügung stellt!
{% endhint %}
{% endstep %}

{% step %}
Fahre nun mit dem [Setup des Applikationsservers](/docs/manual/installation-und-konfiguration/installation-und-konfiguration/enginsight-plattform/automatische-installation/applikationsserver.md#applikationsserver-setup-abschliessen) fort.
{% endstep %}
{% endstepper %}

### Verwendung eines eigenen öffentlich signierten Zertifikats

{% hint style="warning" %}
**Bitte beachte**: Das Zertifikat muss als **komplette Zertifikatskette** mit **gesondertem Private Key** und im **PEM-Format** vorliegen.
{% endhint %}

Nimm folgende Schritte vor, wenn du ein eigenes öffentlich signiertes Zertifikat verwendest:

{% stepper %}
{% step %}
Navigiere auf dem System, auf dem dein eigenes Zertifikat liegt, mit folgendem Befehl in den Ordner, der alle Zertifikats-Dateien enthält:

```
cd /<BenutzerdefinierterVerzeichnispfad>/<OrdnerZertifikatsdateien>
```

{% hint style="info" %}
Vergiss dabei nicht, `<BenutzerdefinierterVerzeichnispfad>` und `<OrdnerZertifikatsdateien>` entsprechend zu ersetzen.
{% endhint %}

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Lade die Zertifikats-Dateien mit folgendem Befehl auf den Applikationsserver in ein Zielverzeichnis deiner Wahl hoch:

```
<OrdnerZertifikatsdateien> % scp * <BenutzernameApplikationsserver>@<IPAdresseApplikationsserver>:<ZielverzeichnisApplikationsserver>
```

{% hint style="info" %}
Vergiss dabei nicht, die folgenden Platzhalter in `<>` entsprechend zu ersetzen:

* `<OrdnerZertifikatsdateien>`
* `<BenutzernameApplikationsserver>`
* `<IPAdresseApplikationsserver>`
* `<ZielverzeichnisApplikationsserver>`
  {% endhint %}

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Da die hochgeladenen Zertifikats-Dateien bisher nur für den gerade angemeldeten Benutzer des Applikationsservers, aber nicht für den Webserver lesbar sind, müssen die Zugriffsrechte entsprechend angepasst werden.

Gib dafür folgenden Befehl ein:

```
sudo chown root: *.pem
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Nun kannst du die Konfiguration von nginx anpassen. Öffne dazu mit folgendem Befehl die **nginx-Konfigurationsdatei**:

* Befehl bei einer **automatischen Installation**:

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

Bestätige deine Eingabe mit der **Enter**-Taste.

* Befehl bei einer **manuellen Installation**:

```
sudo nano /etc/nginx/sites-available/default
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Vergleiche folgende Vorlage mit der Konfigurationsdatei und bearbeite die markierten Zeilen wie folgt:

* Ersetze die Platzhalter `<DomainApp>` und `<DomainAPI>` entsprechend.
* Setze für `<URLEigenerVerzeichnispfad>` jeweils die URL des Pfads ein, der zu den Zertifikats-Dateien führt.
* Ersetze in den Zeilen, die mit `proxy_pass` beginnen, die internen Ports gemäß der Angabe.

<pre><code>map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

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

<strong>    server_name &#x3C;DomainApp>;
</strong>
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE+AESGCM+AES256";
    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;

    # Erstellung von dhparam.pem:
    #$ sudo mkdir /etc/nginx/ssl -p
    #$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
    
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    
<strong>    ssl_certificate /&#x3C;URLEigenerVerzeichnispfad>/fullchain.pem;
</strong><strong>    ssl_certificate_key /&#x3C;URLEigenerVerzeichnispfad>/privkey.pem;
</strong>
    client_max_body_size 200m;

    location / {
<strong>        proxy_pass http://127.0.0.1:81;
</strong>        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;

<strong>    server_name &#x3C;DomainAPI>;
</strong>
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE+AESGCM+AES256";
    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;

    # Erstellung von dhparam.pem:
    #$ sudo mkdir /etc/nginx/ssl -p
    #$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
    
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    
<strong>    ssl_certificate /&#x3C;URLEigenerVerzeichnispfad>/fullchain.pem;
</strong><strong>    ssl_certificate_key /&#x3C;URLEigenerVerzeichnispfad>/privkey.pem;
</strong>
    client_max_body_size 200m;

    location / {
<strong>        proxy_pass http://127.0.0.1:82;
</strong>        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;
    }
}
</code></pre>

{% endstep %}

{% step %}
Speichere die Änderungen in der Konfigurationsdatei (**Strg** + **o**) und bestätige den Speicherprozess. Schließe die Datei (**Strg** + **x**).
{% endstep %}

{% step %}
Validiere die Änderungen an der nginx-Konfiguration mit folgendem Befehl und bestätige deine Eingabe mit der **Enter**-Taste:

```
sudo nginx -t
```

Wenn die Konfigurationsänderungen erfolgreich sind, erhältst du folgende Meldung:

```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

{% endstep %}

{% step %}
Starte nginx mit folgendem Befehl neu:

```
sudo systemctl restart nginx
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Nun musst du das Setup-Skript für den Applikationsserver noch einmal ausführen, um die **App-URL sowie die API-URL auf HTTPS umzustellen**.

Navigiere dazu mit folgendem Befehl in das Enginsight Installationsverzeichnis:

```
cd /opt/enginsight/enterprise
```

Bestätige deine Eingabe mit der **Enter**-Taste.
{% endstep %}

{% step %}
Führe mit folgendem Befehl das Setup-Skript neu aus:

```
sudo ./setup.sh
```

Gib bei der Abfrage der URIs und URLs die URLs für die Enginsight Benutzeroberfläche und die API wie folgt an:

* **Enter App URL**: <mark style="color:$danger;">`https`</mark>`://<DomainApp>`
* **Enter API URL**: <mark style="color:$danger;">`https`</mark>`://<DomainAPI>`

Bestätige deine Eingaben jeweils mit der **Enter**-Taste.

{% hint style="danger" %}
**Bitte beachte**: Wird diese Anpassung nicht vorgenommen oder trägst du versehentlich http\:// ein, bleibt die Enginsight Instanz weiterhin nur per HTTP erreichbar, obwohl nginx bereits eine gesicherte Verbindung per HTTPS zur Verfügung stellt!
{% endhint %}
{% endstep %}

{% step %}
Fahre nun mit dem [Setup des Applikationsservers](/docs/manual/installation-und-konfiguration/installation-und-konfiguration/enginsight-plattform/automatische-installation/applikationsserver.md#applikationsserver-setup-abschliessen) fort.
{% endstep %}
{% endstepper %}

### Verwendung eines selbst signierten Zertifikats oder einer Windows PKI

{% hint style="success" icon="lightbulb" %}
Mehr Informationen, wie du bei der Verwendung eines selbst signierten Zertifikats oder einer Windows PKI (Public Key Infrastructure) vorgehen musst, findest du in unserer Knowledge Base: [Wie hinterlege und konfiguriere ich in Enginsight ein selbst signiertes SSL/TLS-Zertifikat?](https://docs.enginsight.com/docs/knowledge-base/konfiguration/wie-hinterlege-und-konfiguriere-ich-in-enginsight-ein-selbst-signiertes-ssl-tls-zertifikat)
{% endhint %}

***

## Weitere Ressourcen

**Knowledge Base**

* [Wie aktualisiere ich in Enginsight ein SSL/TLS-Zertifikat von Let's Encrypt?](https://docs.enginsight.com/docs/knowledge-base/konfiguration/wie-aktualisiere-ich-in-enginsight-ein-ssl-tls-zertifikat-von-lets-encrypt)
* [Wie hinterlege und konfiguriere ich in Enginsight ein selbst signiertes SSL/TLS-Zertifikat?](https://docs.enginsight.com/docs/knowledge-base/konfiguration/wie-hinterlege-und-konfiguriere-ich-in-enginsight-ein-selbst-signiertes-ssl-tls-zertifikat)
* [Wie tausche ich in Enginsight ein selbst signiertes SSL/TLS-Zertifikat aus?](https://docs.enginsight.com/docs/knowledge-base/konfiguration/wie-tausche-ich-in-enginsight-ein-selbst-signiertes-ssl-tls-zertifikat-aus)
* [Welche Anpassungen muss ich vornehmen, wenn sich meine Enginsight Domain ändert?](https://docs.enginsight.com/docs/knowledge-base/konfiguration/welche-anpassungen-muss-ich-vornehmen-wenn-sich-meine-enginsight-domain-andert)

***
