# Wie hinterlege und konfiguriere ich in Enginsight ein selbst signiertes SSL/TLS-Zertifikat?

Wenn du für die gesicherte Verbindung zur Enginsight Benutzeroberfläche und/oder zum Enginsight SIEM ein selbst signiertes SSL/TLS-Zertifikat oder eine Windows PKI (Public Key Infrastructure) nutzt, musst du dieses manuell hinterlegen und konfigurieren.&#x20;

Wir zeigen dir im folgenden Artikel, welche Schritte du dafür vornehmen musst.

***

## Zertifikats-Dateien hinterlegen

{% stepper %}
{% step %}

### Zertifikats-Dateien auf den Applikationsserver hochladen

{% hint style="warning" %}
**Bitte beachte**: Diese Schritte gelten nur für Linux- und macOS-Systeme. Unter Windows kannst du bspw. WinSCP (Windows Secure Copy) nutzen, um die Zertifikats-Dateien auf den Applikationsserver hochzuladen.
{% endhint %}

1. Navigiere auf dem **System, auf dem dein neues Zertifikat liegt**, mit folgendem Befehl in den Ordner, der alle neuen Zertifikats-Dateien enthält:

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

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

2. Lade die neuen Zertifikats-Dateien mit folgendem Befehl auf den Enginsight Applikationsserver in ein Zielverzeichnis deiner Wahl hoch:

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

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

* `<OrdnerZertifikatsdateien>`
* `<BenutzernameApplikationsserver>`
* `<IPAdresseApplikationsserver>`&#x20;
* `<ZielverzeichnisApplikationsserver>`
  {% endhint %}
  {% endstep %}

{% step %}

### Optional: Zertifikats-Dateien in das PEM-Format umwandeln

Wenn du deine selbst signierten Zertifikats-Dateien im PFX-Format vorliegen hast, musst du diese *nach dem Hochladen auf dem Applikationsserver* ins PEM-Format konvertieren.

Du kannst dafür folgende Befehle nutzen:

* Das Zertifikat ohne den privaten Schlüssel ins PEM-Format umwandeln:

```
openssl pkcs12 -in <ZertfikatsDateiname>.pfx -clcerts -nokeys -out <NeuerZertifikatsDateiname>.pem
```

* Den privaten Schlüssel extrahieren und ins PEM-Format umwandeln:

```
openssl pkcs12 -in <ZertfikatsDateiname>.pfx -nocerts -out <PrivaterSchlüsselDateiname>.pem
```

* Das Kennwort aus dem extrahierten Schlüssel entfernen:

```
openssl rsa -in <PrivaterSchlüsselDateiname>.pem -out server.key
```

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

* `<ZertfikatsDateiname>`
* `<NeuerZertfikatsDateiname>`
* `<PrivaterSchlüsselDateiname>`&#x20;
  {% endhint %}
  {% endstep %}

{% step %}

### Zugriffsrechte der Zertifikats-Dateien anpassen

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
```

{% endstep %}

{% step %}

### nginx-Konfiguration anpassen

Nun kannst du die Konfiguration von nginx anpassen.&#x20;

1. Öffne dazu mit folgendem Befehl die **nginx-Konfigurationsdatei**:

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

2. Vergleiche folgende Vorlage mit der Konfigurationsdatei und bearbeite die dunkelgrau hinterlegten Zeilen wie folgt:
   * Setze für `<EigenerVerzeichnispfad>` jeweils den Pfad ein, der zu den neuen Zertifikats-Dateien führt.
   * Setze für `<DateinameZertifikatsdatei>` den Namen der neuen Zertifikatsdatei ein.
   * Setze für `<DateinameSchlüsseldatei>` den Namen der neuen Zertifikats-Schlüsseldatei ein.

{% hint style="danger" %}
**Bitte beachte**: Achte darauf, dass die vollständige Zertifikats-Kette (Webserver, Intermediate, Root-Zertifikat) im PEM-Format hinterlegt ist.
{% endhint %}

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

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

    server_name &#x3C;DomainApp>;

    ssl_protocols TLSv1.2;
    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;

    ssl_dhparam /etc/nginx/dhparam.pem;
<strong>    ssl_certificate /&#x3C;EigenerVerzeichnispfad>/&#x3C;DateinameZertifikatsdatei>.pem;
</strong><strong>    ssl_certificate_key /&#x3C;EigenerVerzeichnispfad>/&#x3C;DateinameSchlüsseldatei>.pem;
</strong>
    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 &#x3C;DomainAPI>;

    ssl_protocols TLSv1.2;
    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;

    ssl_dhparam /etc/nginx/dhparam.pem;
<strong>    ssl_certificate /&#x3C;EigenerVerzeichnispfad>/&#x3C;DateinameZertifikatsdatei>.pem;
</strong><strong>    ssl_certificate_key /&#x3C;EigenerVerzeichnispfad>/&#x3C;DateinameSchlüsseldatei>.pem;
</strong>
    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;
    }
}
</code></pre>

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

{% step %}

### Änderungen an der nginx-Konfiguration überprüfen

Validiere die Änderungen an der nginx-Konfiguration mit folgendem Befehl:

```
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 %}

### nginx neu starten

Starte nginx mit folgendem Befehl neu:

```
sudo systemctl restart nginx
```

{% endstep %}
{% endstepper %}

***

## Trusten des root-Zertifikats

Nun musst du dein root-Zertifikat auf dem Enginsight Applikationsserver und, wenn du das Enginsight SIEM verwendest, auf dem SIEM Management Server trusten, es also als vertrauenswürdig kennzeichnen.

{% hint style="danger" %}
**Bitte beachte**: Es werden ***ausschließlich Zertifikate im*****&#x20;`.crt`*****-Format*** akzeptiert. Dateien mit anderen Endungen wie `.pem` oder `.cer` werden vom `update-ca-certificates`-Prozess ignoriert.
{% endhint %}

Nimm dazu folgende Schritte vor:

{% stepper %}
{% step %}

### root-Zertifikat in den CA-Store des Applikationsservers kopieren

1. Logge dich auf dem **Enginsight** **Applikationsserver** ein.
2. Kopiere das root-Zertifikat mit folgendem Befehl in den CA-Store:

```
sudo cp <RootZertifikatDateiname>.crt /usr/local/share/ca-certificates/<RootZertifikatDateiname>.crt
```

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

{% step %}

### CA-Store des Applikationsservers aktualisieren

Aktualisiere den CA-Store des Applikationsservers mit folgendem Befehl:

```
sudo update-ca-certificates
```

{% endstep %}

{% step %}

### root-Zertifikat in den CA-Store des SIEM Management Servers kopieren

Wenn du das Enginsight SIEM verwendest, musst du das root-Zertifikat auch auf dem SIEM Management Server hinterlegen.

1. Logge dich auf dem **SIEM Management Server** ein.
2. Kopiere das root-Zertifikat mit folgendem Befehl in den CA-Store:

```
sudo cp <RootZertifikatDateiname>.crt /usr/local/share/ca-certificates/<RootZertifikatDateiname>.crt
```

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

{% step %}

### CA-Store des SIEM Management Servers aktualisieren

Aktualisiere den CA-Store des SIEM Management Servers mit folgendem Befehl:

```
sudo update-ca-certificates
```

{% endstep %}

{% step %}

### Docker-Konfigurationsdatei auf dem Applikationsserver anpassen

1. Gehe zurück zum **Enginsight Applikationsserver**.
2. Navigiere mit folgendem Befehl in das Enginsight Installationsverzeichnis:

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

2. Öffne mit folgendem Befehl die **Docker-Konfigurationsdatei**:

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

3. Um das Zertifikat in den nötigen Docker-Containern verfügbar zu machen, muss es dort entsprechend manuell eingebunden werden.\
   \
   Navigiere dazu in den Docker-Containern `server-m2` und `ui-m1` sowie, wenn du das Enginsight SIEM verwendest, zu den Docker-Containern `solr`, `zookeeper` und `traicer-m50`, zum Abschnitt `volumes` und ergänze diesen wie folgt:

<pre><code>volumes:
    - "./conf/services/config.json.production:/etc/enginsight/server-m2/config.json"
<strong>    - "/usr/local/share/ca-certificates/&#x3C;RootZertifikatDateiname>.crt:/etc/ssl/cert.pem"
</strong></code></pre>

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

4. Da Node.js nicht auf den System-Truststore zugreift, muss in den betroffenen Docker-Containern die Umgebungsvariable `NODE_EXTRA_CA_CERTS` gesetzt werden, um auf das Zertifikat zu verweisen.\
   \
   Navigiere dazu in denselben Docker-Containern wie zuvor zum Abschnitt `environment` und ergänze diesen wie folgt:

<pre><code>environment:
<strong>    - NODE_EXTRA_CA_CERTS=/etc/ssl/cert.pem
</strong></code></pre>

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

{% step %}

### Anpassungen auf dem Applikationsserver übernehmen

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

Führe dazu mit folgendem Befehl das Setup-Skript neu aus und bestätige alle Abfragen mit der **Enter**-Taste:

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

{% endstep %}
{% endstepper %}

***

## Funktionalität der Domains überprüfen

Überprüfe nun, ob deine Domains für Benutzeroberfläche (App) und API wie gewünscht funktionieren.

Gib dazu folgende Befehle ein:

* Benutzeroberfläche (App):

```
curl -IsS https://<DomainApp> |& head -n1
```

* API:

```
curl -IsS https://<DomainAPI> |& head -n1
```

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

Wenn alles wie gewünscht funktioniert, sollte folgendes ausgegeben werden:

```
HTTP/1.1 200 OK
```

oder

```
 HTTP/2 200
```

Wenn das selbst signierte Zertifikat als nicht vertrauenswürdig eingestuft wird, wird folgendes ausgegeben:

```
curl: (60) SSL certificate problem: self signed certificate
```

Überprüfe in diesem Fall, ob tatsächlich die gesamte Zertifikatskette im genutzten Zertifikat enthalten ist und das root-Zertifikat korrekt getrustet wurde.

***

## Weitere Ressourcen

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.enginsight.com/docs/knowledge-base/konfiguration/wie-hinterlege-und-konfiguriere-ich-in-enginsight-ein-selbst-signiertes-ssl-tls-zertifikat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
