Nginx HTTPS inklusive Client Zertifikat: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 23: Zeile 23:
 
;SELinux-Probleme analysieren
 
;SELinux-Probleme analysieren
 
*ausearch -m avc -ts recent
 
*ausearch -m avc -ts recent
 +
 +
 +
==Wichtig==
 +
Das ca.crt muss auch angegeben werden.
 +
*cp ca.crt /etc/nginx/ssl
  
  
 
==Konfiguration erstellen==
 
==Konfiguration erstellen==
 
Die folgende Konfiguration wird als Datei gespeichert unter:
 
  
 
*vi /etc/nginx/conf.d/lila.it113.int.conf
 
*vi /etc/nginx/conf.d/lila.it113.int.conf
Zeile 62: Zeile 65:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
===Restart===
 +
*systemctl restart nginx
  
 
=Erstellung eines KEYS und einer  CSR auf dem Client=
 
=Erstellung eines KEYS und einer  CSR auf dem Client=
 
==Privaten Schlüssel und CSR für den Client erstellen==
 
==Privaten Schlüssel und CSR für den Client erstellen==
 
;Erstelle den privaten Schlüssel und die CSR für den Client:
 
;Erstelle den privaten Schlüssel und die CSR für den Client:
*export CN="client"
+
*export CN="client113"
 
*cd ~
 
*cd ~
 
*openssl req -new -nodes -newkey rsa:2048 -keyout $CN.key -out $CN.csr -subj "/CN=$CN"
 
*openssl req -new -nodes -newkey rsa:2048 -keyout $CN.key -out $CN.csr -subj "/CN=$CN"
Zeile 75: Zeile 81:
  
 
==Zertifikat auf dem Client installieren==
 
==Zertifikat auf dem Client installieren==
 +
===Test mit Curl===
 +
;Kein Erfolg
 +
*curl  https://lila.it113.int
 +
<pre>
 +
<html>
 +
<head><title>400 No required SSL certificate was sent</title></head>
 +
<body>
 +
<center><h1>400 Bad Request</h1></center>
 +
<center>No required SSL certificate was sent</center>
 +
<hr><center>nginx/1.20.1</center>
 +
</body>
 +
</html>
 +
</pre>
 +
;Erfolg
 +
*curl --cert client.crt --key client.key  https://lila.it113.int
 +
<html lang="de">
 +
<head>
 +
    <meta charset="UTF-8">
 +
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 +
    <title>Willkommen bei lila</title>
 +
    ....
 +
===Test mit Firefox===
 +
[[Datei:Client-cert.png]]
  
==Signierung der CSR==
+
==P12 basteln==
 
+
*openssl pkcs12 -export -in client113.crt -inkey client113.key -out client113.p12
Die CSR kann nun von einer CA signiert werden. Wenn du '''Let’s Encrypt''' oder eine interne '''CA''' verwendest, geh wie folgt vor:
 
 
 
;Für Let’s Encrypt (mit certbot) eine Zertifikatsanforderung stellen
 
*certbot certonly --nginx -d client.lila.it113.int
 
  
;Alternativ, wenn du eine interne CA hast, signiere die CSR
+
==Importieren==
*openssl ca -in /etc/nginx/csr/client.lila.it113.int.csr -out /etc/nginx/ssl/client.lila.it113.int.crt
+
*Settings
 
+
**Certificate Manager
==nginx neu starten==
+
***Your Certificates
 
+
****Import
Nachdem du die Konfiguration angepasst hast, starte nginx neu, um die Änderungen zu übernehmen:
+
***** client.p12
 
+
===Test mit Firefox===
;nginx neu starten
+
[[Datei:Client-cert1.png]]
*systemctl restart nginx
 

Aktuelle Version vom 27. März 2025, 11:20 Uhr

nginx: HTTPS-VirtualHost für lila.it113.int unter Rocky Linux

Vorbereitung der Seite

Verzeichnis für Inhalte anlegen
  • mkdir -p /var/www/lila
Script zum Erzeugen der Startseite herunterladen (außerhalb des DocumentRoot)
Startseite erzeugen
  • ./webgen.sh lila > /var/www/lila/index.html

Fehleranalyse

Falls der Zugriff auf die Seite weiterhin blockiert wird, prüfe SELinux und stelle sicher, dass der korrekte Sicherheitskontext gesetzt ist:

Kontext setzen
  • chcon -Rt httpd_sys_content_t /var/www/lila
nginx neu laden
  • systemctl reload nginx
SELinux-Probleme analysieren
  • ausearch -m avc -ts recent


Wichtig

Das ca.crt muss auch angegeben werden.

  • cp ca.crt /etc/nginx/ssl


Konfiguration erstellen

  • vi /etc/nginx/conf.d/lila.it113.int.conf
server {
    listen 80;
    listen [::]:80;

    server_name lila.it113.int;

    # HTTP auf HTTPS weiterleiten
    return 301 https://$host$request_uri;
}

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

    server_name lila.it113.int;

    root /var/www/lila;
    index index.html index.htm;
    
    ssl_verify_client on;
    ssl_client_certificate /etc/nginx/ssl/ca.crt;

    ssl_certificate /etc/nginx/ssl/lila.it113.int.crt;
    ssl_certificate_key /etc/nginx/ssl/lila.it113.int.key;

    location / {
        try_files $uri $uri/ =404;
    }
}

Restart

  • systemctl restart nginx

Erstellung eines KEYS und einer CSR auf dem Client

Privaten Schlüssel und CSR für den Client erstellen

Erstelle den privaten Schlüssel und die CSR für den Client
  • export CN="client113"
  • cd ~
  • openssl req -new -nodes -newkey rsa:2048 -keyout $CN.key -out $CN.csr -subj "/CN=$CN"

Signierung der CSR

  • CSR ZUR CA schicken und signieren lassen.
Erhalt von client.crt

Zertifikat auf dem Client installieren

Test mit Curl

Kein Erfolg
 <html>
 <head><title>400 No required SSL certificate was sent</title></head>
 <body>
 <center><h1>400 Bad Request</h1></center>
 <center>No required SSL certificate was sent</center>
 <hr><center>nginx/1.20.1</center>
 </body>
 </html>
Erfolg
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Willkommen bei lila</title>
    ....

Test mit Firefox

Client-cert.png

P12 basteln

  • openssl pkcs12 -export -in client113.crt -inkey client113.key -out client113.p12

Importieren

  • Settings
    • Certificate Manager
      • Your Certificates
        • Import
          • client.p12

Test mit Firefox

Client-cert1.png