PKI kleines Projekt: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
==Ziel des Projektes==
 
==Ziel des Projektes==
*Wir wollen einen Apache2 Webserver auf dem ns integrieren
+
*Wir wollen einen Apache2 Webserver auf dem ns testweise integrieren
 +
 
 
=Installation=
 
=Installation=
 
Apache2 wird zusammen mit PHP und dem Apache-PHP-Modul installiert.
 
Apache2 wird zusammen mit PHP und dem Apache-PHP-Modul installiert.
Zeile 71: Zeile 72:
 
;aktivieren unserer Seite
 
;aktivieren unserer Seite
 
*sudo a2ensite it.conf
 
*sudo a2ensite it.conf
;Konfiguration testen und aktivieren
+
 
 +
=Zertifizierungsstelle und Zertifkat erstellen=
 +
==CA erstellen==
 +
*CA=it2XX-ca
 +
*openssl req -new -x509 -newkey rsa:4096 -nodes -keyout $CA.key -out $CA.crt -days 3650 -subj "/CN=$CA"
 +
==Anzeigen des CA Certs==
 +
*openssl x509 -noout -text -in  $CA.crt
 +
==Request und Privaten Key erstellen==
 +
FQDN=ns.it2XX.int
 +
*openssl req -new -newkey rsa:4096 -nodes -keyout $FQDN.key -out $FQDN.csr -subj "/CN=$FQDN"
 +
==Signierung==
 +
*openssl x509 -req -days 1460 -in $FQDN.csr -CA $CA.crt -CAkey $CA.key -CAcreateserial -out $FQDN.crt -extfile <(echo "subjectAltName=DNS:$FQDN")
 +
== Zertifikat anzeigen ==
 +
* openssl x509 -noout -text -in $FQDN.crt
 +
=Einbauen des Server Schlüssels und des Serverzertifikat=
 +
*cp $FQDN.crt /etc/apache2/own.crt
 +
*cp $FQDN.key /etc/apache2/own.key
 +
 
 +
=Einbauen des Stammzertifikates=
 +
;Nameserver
 +
*cp $CA.crt /usr/local/share/ca-certificates
 +
*update-ca-certificates
 +
;Client
 +
*scp $CA.crt kit@172.26.2XX.10:
 +
dort
 +
*sudo cp $CA.crt /usr/local/share/ca-certificates
 +
*sudo update-ca-certificates
 +
und in den Firefox importieren
 +
*Firefox
 +
**Burgermenu
 +
***Settings
 +
****Cert oder Zert
 +
*****Authorities
 +
******Import
 +
*******it2XX-ca.crt
 +
********Alles ankreuzen
 +
*********Übernehmen und glücklich sein
 +
 
 +
=Wieder auf dem Nameserver - Konfiguration testen und aktivieren=
 
*sudo apache2ctl configtest
 
*sudo apache2ctl configtest
 
*sudo systemctl reload apache2
 
*sudo systemctl reload apache2
 +
 
=Testen=
 
=Testen=
 
Im Browser die FQDN des Servers aufrufen.
 
Im Browser die FQDN des Servers aufrufen.
 
;unverschlüsselt
 
;unverschlüsselt
*http://www.it2XX.int
+
*http://ns.it2XX.int
 
;verschlüsselt
 
;verschlüsselt
*https://www.it2XX.int
+
*https://ns.it2XX.int
=Handling und Kontrolle=
+
Test in der Konsole
*ss -lntp | egrep "80|443"
+
*openssl s_client -host ns.it2XX.int -port 443
*systemctl start apache2
+
<pre>
*systemctl stop apache2
+
Connecting to 10.88.213.21
*systemctl restart apache2
+
CONNECTED(00000003)
*systemctl reload apache2
+
depth=1 CN=it213-ca
*systemctl enable apache2
+
verify return:1
*systemctl disable apache2
+
depth=0 CN=ns.it213.int
*systemctl status apache2
+
verify return:1
*journalctl -fu apache2
+
---
*journalctl -xu apache2
+
Certificate chain
*tail -f /var/log/apache2/access.log
+
0 s:CN=ns.it213.int
 +
  i:CN=it213-ca
 +
  a:PKEY: RSA, 4096 (bit); sigalg: sha256WithRSAEncryption
 +
  v:NotBefore: Aug  3 13:19:03 2026 GMT; NotAfter: Aug  2 13:19:03 2030 GMT
 +
---
 +
Server certificate
 +
-----BEGIN CERTIFICATE-----
 +
MIIFEzCCAvugAwIBAgIUHJiexBPRqBk3gpkkFjK564pfXSgwDQYJKoZIhvcNAQEL
 +
BQAwEzERMA8GA1UEAwwIaXQyMTMtY2EwHhcNMjYwODAzMTMxOTAzWhcNMzAwODAy
 +
MTMxOTAzWjAXMRUwEwYDVQQDDAxucy5pdDIxMy5pbnQwggIiMA0GCSqGSIb3DQEB
 +
AQUAA4ICDwAwggIKAoICAQC6MB6dJlALylxhPYsvG52Rq+tk8ADDcdFLhcZmVzFZ
 +
F6wEwlnVTIBLtIssVV2UyXiCzrKvhbfYYukrPl9z5ciIMXyDmVtAic/Y0fYQZwc2
 +
jzyTJmjivnbaO2nZ+6p09Rf4HI1DkUwpnhYQtTKHuOF4Q265Opl5Egr7XJ64qFMr
 +
B+PafLJ1Dltgwap+8uLff20Hq0qqGHnqbe8QVAll/S86XpAjx+vsIo5ZrcpR6ED3
 +
VdAWEuS/PNe7zmZf2INN0hVvu0bBzw4NjKzRWiwY0tC7MwgpGzYYXH8j/d6cRPh7
 +
OozLyTB/iuqm41frSDOjVzbIlezBybg0jsyDrm7k98AcFTxh8O/NORhzE8pNZYfq
 +
PUR9WSwKsAFVBkhDmfoskAXz6Iy39iHqRi92k+/+l8iI31L1gLZJOqqCBWtHgHTy
 +
Kjr68FQU5cCSkhKYY8hswSLwh5v+laW7EUYrIGlUt3iDP2V73eI9odFQiySmycZR
 +
tr81BCw/qV3IR6oHk1Rclo81bM/Sw8kGMfeF3+UCGlIitJl9ADjDHhx1tIOUBMad
 +
nkMEj8L5W8POqSDWm5kFkvjmf20CAb5tTvAibXhPz5uZufYvUEOGZRjsxTk9PJ7w
 +
FO9zzp0EReKcOLMnUFNOfLel2wFHTfRVW8hPW7AIFH7Ic7WZgB4sUGRfShEJbeTF
 +
rwIDAQABo1swWTAXBgNVHREEEDAOggxucy5pdDIxMy5pbnQwHQYDVR0OBBYEFPdg
 +
fiwsOp0ZNYlocYj2mtVByHnYMB8GA1UdIwQYMBaAFGVWvHAOmqSHBfpiTt+4GflV
 +
VX4HMA0GCSqGSIb3DQEBCwUAA4ICAQDF04vcKhK/xGHfhTcUaBXjAen9Nj0FEBp4
 +
eh1zblRuK9Ab89XJSvXIQzF0z7fc5M9SaCIMt8X08bYTbUWPWtPCnZp4qtTJdIVh
 +
lSPL7Prm6CLPcN6WH0YY3hKCLX9HZzaKqXb0U0fBG06mEsvrZP+s+gws+1C8gV/4
 +
AA+26qusKXIfF+d6x+GPkUpu0WA5953rYoH3SGJmMsZHhoVplA1WDskj6K73TqPu
 +
BziP/Geo/zEZudtgGgJSDdIO/vRpUs63IOb5jB6kMO50vVGptCOqzpuwniWH2xgv
 +
A5gy1dDv/kLzT7nS8BSDAhZPynQHvRzg3mC7pwjg8fYhWDbNiFknTkHu++ToYXXs
 +
8CsSp3D5wKW3EJdfb4A4rgtVnA+faAgl0eCFumAgfrRaLwNENl6Vqi3IewidGGQN
 +
juksnsfSRAxlr/D/vvxcQm1IWt/bUM4LjKxADPne9pnGp0WxxDCZyCg0bJPUQYzr
 +
6PCx41J1sovNdQDHaWTt2Fd27IMwTGtnCBka8owg7IayXf0jRDPSOpymmqEZ9NZm
 +
FCD8ky/VzUxu2RCEAwskUnPphcmx84Dp4oY5EDWyUrpw26T3ap1ahUYag4oMih0N
 +
lXuA+V9cuEiDstMrx5lZetBTNBKN83xOMevJrygpIVAlUzwsiSqbZxCUDFNuTOE/
 +
ehxiOUSxHw==
 +
-----END CERTIFICATE-----
 +
subject=CN=ns.it213.int
 +
issuer=CN=it213-ca
 +
---
 +
No client certificate CA names sent
 +
Peer signing digest: SHA256
 +
Peer signature type: rsa_pss_rsae_sha256
 +
Negotiated TLS1.3 group: X25519MLKEM768
 +
---
 +
SSL handshake has read 3207 bytes and written 1634 bytes
 +
Verification: OK
 +
---
 +
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
 +
Protocol: TLSv1.3
 +
Server public key is 4096 bit
 +
This TLS version forbids renegotiation.
 +
Compression: NONE
 +
Expansion: NONE
 +
No ALPN negotiated
 +
Early data was not sent
 +
Verify return code: 0 (ok)
 +
---
 +
---
 +
Post-Handshake New Session Ticket arrived:
 +
SSL-Session:
 +
    Protocol  : TLSv1.3
 +
    Cipher    : TLS_AES_256_GCM_SHA384
 +
    Session-ID: 0B421F4A9D88E58F7EEC304D1935485D217F31F9F53D6565E50287E6E690895E
 +
    Session-ID-ctx:
 +
    Resumption PSK: 14A66A9940FC3E6351C4E70889C0AD3C343FC814DB14CD194F8CD37B16711F42D636CA63C95F97A7949627F151B5490D
 +
    PSK identity: None
 +
    PSK identity hint: None
 +
    SRP username: None
 +
    TLS session ticket lifetime hint: 300 (seconds)
 +
    TLS session ticket:
 +
    0000 - 49 6e 26 ff 57 a6 f5 1f-3b 99 59 01 14 5a 8c 7e  In&.W...;.Y..Z.~
 +
    0010 - a7 c3 1e f3 cd eb 99 4c-c7 bf 79 65 c1 0e d7 d8  .......L..ye....
 +
 
 +
    Start Time: 1785765049
 +
    Timeout  : 7200 (sec)
 +
    Verify return code: 0 (ok)
 +
    Extended master secret: no
 +
    Max Early Data: 0
 +
---
 +
read R BLOCK
 +
---
 +
Post-Handshake New Session Ticket arrived:
 +
SSL-Session:
 +
    Protocol  : TLSv1.3
 +
    Cipher    : TLS_AES_256_GCM_SHA384
 +
    Session-ID: 98F1ED5BB5EBF49E57C188841B17CAF7122147599540BEB1741E01190641398C
 +
    Session-ID-ctx:
 +
    Resumption PSK: D6DA3E4D614C32BB5D231E7D4FFD83200602CE876B37B0000FC4B2894163DD731D85A2712E101BE6A14F2180463CD283
 +
    PSK identity: None
 +
    PSK identity hint: None
 +
    SRP username: None
 +
    TLS session ticket lifetime hint: 300 (seconds)
 +
    TLS session ticket:
 +
    0000 - 9e 67 3f 6a 44 ad e6 ad-a5 7f 7e 51 ba 11 a0 22  .g?jD.....~Q..."
 +
    0010 - 01 93 65 5e 03 68 9d 59-f9 84 12 2c 79 ce 8a 55  ..e^.h.Y...,y..U
 +
 
 +
    Start Time: 1785765049
 +
    Timeout  : 7200 (sec)
 +
    Verify return code: 0 (ok)
 +
    Extended master secret: no
 +
    Max Early Data: 0
 +
---
 +
read R BLOCK
 +
</pre>

Aktuelle Version vom 3. August 2026, 13:53 Uhr

Ziel des Projektes

  • Wir wollen einen Apache2 Webserver auf dem ns testweise integrieren

Installation

Apache2 wird zusammen mit PHP und dem Apache-PHP-Modul installiert.

  • sudo apt update
  • sudo apt install -y apache2 php libapache2-mod-php

PHP aktivieren

Das PHP- und das SSL-Modul werden aktiviert. Damit die Änderung greift, muss Apache anschließend neu gestartet werden.

  • sudo a2enmod php8.4 ssl
  • sudo systemctl restart apache2

Webroot

Das Webroot-Verzeichnis ist der Standardort für Webseiten unter Apache.

  • ls /var/www/html

Dynamische Testseite erstellen

Die Datei index.php ersetzt die Apache-Standardseite und gibt Systeminformationen aus.

  • sudo vi /var/www/html/index.php

Inhalt der Datei:

<?php
$hostname = gethostname();
$ip       = $_SERVER['SERVER_ADDR'];
$domain   = php_uname('n');
// Gateway und Nameserver aus /etc/resolv.conf und ip route auslesen
$nameserver = shell_exec("awk '/^nameserver/{print $2; exit}' /etc/resolv.conf");
$gateway    = shell_exec("ip route | awk '/^default/{print $3; exit}'");
?>
<!DOCTYPE html>
<html>
<head><title>Systeminfo</title></head>
<body>
<h1>Systeminfo</h1>
<table>
  <tr><td>Hostname</td><td><?= htmlspecialchars($hostname) ?></td></tr>
  <tr><td>IP-Adresse</td><td><?= htmlspecialchars($ip) ?></td></tr>
  <tr><td>Domain</td><td><?= htmlspecialchars($domain) ?></td></tr>
  <tr><td>Nameserver</td><td><?= htmlspecialchars(trim($nameserver)) ?></td></tr>
  <tr><td>Gateway</td><td><?= htmlspecialchars(trim($gateway)) ?></td></tr>
</table>
</body>
</html>

Standardseite löschen

Die Apache-Standardseite wird gelöscht damit die neue PHP-Seite aufgerufen wird.

  • sudo rm /var/www/html/index.html

Konfiguration der Seiten

Verfügbare Konfigurationen
  • DIR: /etc/apache2/sites-available/
Aktivierten Konfigurationen
  • DIR: /etc/apache2/sites-enabled

Neue Konfigurationen anlegen

  • sudo vi /etc/apache2/sites-available/it.conf
<VirtualHost *:80>
	DocumentRoot /var/www/html
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
	DocumentRoot /var/www/html
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	SSLEngine on
	SSLCertificateFile      /etc/apache2/own.crt
	SSLCertificateKeyFile   /etc/apache2/own.key
</VirtualHost>

Aktivieren und deaktivieren

deaktivieren der Default Seite
  • sudo a2dissite 000-default.conf
aktivieren unserer Seite
  • sudo a2ensite it.conf

Zertifizierungsstelle und Zertifkat erstellen

CA erstellen

  • CA=it2XX-ca
  • openssl req -new -x509 -newkey rsa:4096 -nodes -keyout $CA.key -out $CA.crt -days 3650 -subj "/CN=$CA"

Anzeigen des CA Certs

  • openssl x509 -noout -text -in $CA.crt

Request und Privaten Key erstellen

FQDN=ns.it2XX.int

  • openssl req -new -newkey rsa:4096 -nodes -keyout $FQDN.key -out $FQDN.csr -subj "/CN=$FQDN"

Signierung

  • openssl x509 -req -days 1460 -in $FQDN.csr -CA $CA.crt -CAkey $CA.key -CAcreateserial -out $FQDN.crt -extfile <(echo "subjectAltName=DNS:$FQDN")

Zertifikat anzeigen

  • openssl x509 -noout -text -in $FQDN.crt

Einbauen des Server Schlüssels und des Serverzertifikat

  • cp $FQDN.crt /etc/apache2/own.crt
  • cp $FQDN.key /etc/apache2/own.key

Einbauen des Stammzertifikates

Nameserver
  • cp $CA.crt /usr/local/share/ca-certificates
  • update-ca-certificates
Client
  • scp $CA.crt kit@172.26.2XX.10:

dort

  • sudo cp $CA.crt /usr/local/share/ca-certificates
  • sudo update-ca-certificates

und in den Firefox importieren

  • Firefox
    • Burgermenu
      • Settings
        • Cert oder Zert
          • Authorities
            • Import
              • it2XX-ca.crt
                • Alles ankreuzen
                  • Übernehmen und glücklich sein

Wieder auf dem Nameserver - Konfiguration testen und aktivieren

  • sudo apache2ctl configtest
  • sudo systemctl reload apache2

Testen

Im Browser die FQDN des Servers aufrufen.

unverschlüsselt
verschlüsselt

Test in der Konsole

  • openssl s_client -host ns.it2XX.int -port 443
Connecting to 10.88.213.21
CONNECTED(00000003)
depth=1 CN=it213-ca
verify return:1
depth=0 CN=ns.it213.int
verify return:1
---
Certificate chain
 0 s:CN=ns.it213.int
   i:CN=it213-ca
   a:PKEY: RSA, 4096 (bit); sigalg: sha256WithRSAEncryption
   v:NotBefore: Aug  3 13:19:03 2026 GMT; NotAfter: Aug  2 13:19:03 2030 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFEzCCAvugAwIBAgIUHJiexBPRqBk3gpkkFjK564pfXSgwDQYJKoZIhvcNAQEL
BQAwEzERMA8GA1UEAwwIaXQyMTMtY2EwHhcNMjYwODAzMTMxOTAzWhcNMzAwODAy
MTMxOTAzWjAXMRUwEwYDVQQDDAxucy5pdDIxMy5pbnQwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQC6MB6dJlALylxhPYsvG52Rq+tk8ADDcdFLhcZmVzFZ
F6wEwlnVTIBLtIssVV2UyXiCzrKvhbfYYukrPl9z5ciIMXyDmVtAic/Y0fYQZwc2
jzyTJmjivnbaO2nZ+6p09Rf4HI1DkUwpnhYQtTKHuOF4Q265Opl5Egr7XJ64qFMr
B+PafLJ1Dltgwap+8uLff20Hq0qqGHnqbe8QVAll/S86XpAjx+vsIo5ZrcpR6ED3
VdAWEuS/PNe7zmZf2INN0hVvu0bBzw4NjKzRWiwY0tC7MwgpGzYYXH8j/d6cRPh7
OozLyTB/iuqm41frSDOjVzbIlezBybg0jsyDrm7k98AcFTxh8O/NORhzE8pNZYfq
PUR9WSwKsAFVBkhDmfoskAXz6Iy39iHqRi92k+/+l8iI31L1gLZJOqqCBWtHgHTy
Kjr68FQU5cCSkhKYY8hswSLwh5v+laW7EUYrIGlUt3iDP2V73eI9odFQiySmycZR
tr81BCw/qV3IR6oHk1Rclo81bM/Sw8kGMfeF3+UCGlIitJl9ADjDHhx1tIOUBMad
nkMEj8L5W8POqSDWm5kFkvjmf20CAb5tTvAibXhPz5uZufYvUEOGZRjsxTk9PJ7w
FO9zzp0EReKcOLMnUFNOfLel2wFHTfRVW8hPW7AIFH7Ic7WZgB4sUGRfShEJbeTF
rwIDAQABo1swWTAXBgNVHREEEDAOggxucy5pdDIxMy5pbnQwHQYDVR0OBBYEFPdg
fiwsOp0ZNYlocYj2mtVByHnYMB8GA1UdIwQYMBaAFGVWvHAOmqSHBfpiTt+4GflV
VX4HMA0GCSqGSIb3DQEBCwUAA4ICAQDF04vcKhK/xGHfhTcUaBXjAen9Nj0FEBp4
eh1zblRuK9Ab89XJSvXIQzF0z7fc5M9SaCIMt8X08bYTbUWPWtPCnZp4qtTJdIVh
lSPL7Prm6CLPcN6WH0YY3hKCLX9HZzaKqXb0U0fBG06mEsvrZP+s+gws+1C8gV/4
AA+26qusKXIfF+d6x+GPkUpu0WA5953rYoH3SGJmMsZHhoVplA1WDskj6K73TqPu
BziP/Geo/zEZudtgGgJSDdIO/vRpUs63IOb5jB6kMO50vVGptCOqzpuwniWH2xgv
A5gy1dDv/kLzT7nS8BSDAhZPynQHvRzg3mC7pwjg8fYhWDbNiFknTkHu++ToYXXs
8CsSp3D5wKW3EJdfb4A4rgtVnA+faAgl0eCFumAgfrRaLwNENl6Vqi3IewidGGQN
juksnsfSRAxlr/D/vvxcQm1IWt/bUM4LjKxADPne9pnGp0WxxDCZyCg0bJPUQYzr
6PCx41J1sovNdQDHaWTt2Fd27IMwTGtnCBka8owg7IayXf0jRDPSOpymmqEZ9NZm
FCD8ky/VzUxu2RCEAwskUnPphcmx84Dp4oY5EDWyUrpw26T3ap1ahUYag4oMih0N
lXuA+V9cuEiDstMrx5lZetBTNBKN83xOMevJrygpIVAlUzwsiSqbZxCUDFNuTOE/
ehxiOUSxHw==
-----END CERTIFICATE-----
subject=CN=ns.it213.int
issuer=CN=it213-ca
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: rsa_pss_rsae_sha256
Negotiated TLS1.3 group: X25519MLKEM768
---
SSL handshake has read 3207 bytes and written 1634 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Protocol: TLSv1.3
Server public key is 4096 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 0B421F4A9D88E58F7EEC304D1935485D217F31F9F53D6565E50287E6E690895E
    Session-ID-ctx: 
    Resumption PSK: 14A66A9940FC3E6351C4E70889C0AD3C343FC814DB14CD194F8CD37B16711F42D636CA63C95F97A7949627F151B5490D
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 49 6e 26 ff 57 a6 f5 1f-3b 99 59 01 14 5a 8c 7e   In&.W...;.Y..Z.~
    0010 - a7 c3 1e f3 cd eb 99 4c-c7 bf 79 65 c1 0e d7 d8   .......L..ye....

    Start Time: 1785765049
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 98F1ED5BB5EBF49E57C188841B17CAF7122147599540BEB1741E01190641398C
    Session-ID-ctx: 
    Resumption PSK: D6DA3E4D614C32BB5D231E7D4FFD83200602CE876B37B0000FC4B2894163DD731D85A2712E101BE6A14F2180463CD283
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 9e 67 3f 6a 44 ad e6 ad-a5 7f 7e 51 ba 11 a0 22   .g?jD.....~Q..."
    0010 - 01 93 65 5e 03 68 9d 59-f9 84 12 2c 79 ce 8a 55   ..e^.h.Y...,y..U

    Start Time: 1785765049
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK