Praktikumsversuch Netzsicherheit/Zertifikate
Ziel
Sie kennen den Einsatz, Aufbau und die Bedeutung der Felder von X.509-Zertifikaten. Sie können diese Zertifikate validieren und erstellen. Weiterhin können Sie ein Root-Zertifikat erstellen und im Browser installieren.
1. Grundlagen
X.509v3 ist der am häufigsten verwendete Standard für digitale Zertifikate (RFC 5280) und BSI Technische Richtlinie TR-02103. Ausgestellt werden die Zertifikate von Zertifizierungsstellen (Certification Authorities, CAs). Diese dienen als Vertrauensanker.
Verwendet werden können diese Zertifikate z.B. um einen Server per TLS-Server-Zertifikat gegenüber einem Client zu authentisieren. Sogenannte S/MIME-Zertifikate diesen der Signatur und Verschlüsselung von E-Mail-Nachrichten.
Ein ausgestelltes Zertifikat kann im Gültigkeitszeitraum per von der CA ausgestellten Sperrliste (Certificate Revocation List, CRL) für ungültig erklärt werden.
Validierungsverfahren:
- Domain Validated (DV)
- Individual Validated (IV)
- Organization Validated (OV)
- Extended Valitation (EV)
Certificate Transparency (CT) ist ein Verfahren, um Zertifikate revisionssicher zu speichern, um Missbrauch zu verhindern.
1.1. Felder und Aufbau
Wichtige Felder:
- Aussteller (issuer-DN) -> CN
- Inhaber (subject-DN) -> CN
- Gültigkeit (validity)
- Erweiterungsfelder:
- Subject Alternative Name (SAN): weitere Namen für den Inhaber (Domain-Namen, E-Mail-Adressen)
Die Zertifikate sind hierarchisch in einer Baumstruktur gemäß ASN.1 aufgebaut.
Zertifikatsformate:
- PEM (Privacy Enhanced Mail)
- Textbasiertes Format (Base64)
- DER (Distinguished Encoding Rules)
- Binärformat mit DER ASN.1-Codierung
- CER/CRT
- DER- oder Base64-kodiertes Zertifikat
- PKCS #7 Zertifikate
- Java keytool
- PKCS #8 Key
- private key store
- PKCS#12 (.p12, .pfx)
- kann öffentliche Zertifikate und private Schlüssel (Kennwort-geschützt) enthalten.
- CSR (Certificate Signing Request)
- Eine Base64-kodierte Zertifizierungsanfrage, die an eine Zertifizierungsstelle (CA) geschickt wird, um ein Zertifikat zu erhalten.
Konvertierungen zwischen PEM und DER
openssl x509 -inform PEM -in domain.pem -outform DER -out domain.der
openssl x509 -inform DER -in domain.der -outform PEM -out domain.pem
1.2. Verständnisfragen
- Kann ein Serverzertifikat für mehrere Domains gültig sein?
- Welche Felder müssen in einem X.509-Zertifikat mindestens belegt sein?
- Wozu dienen selbstsignierte Zertifikate?
- Wie wird ein Zertifikat zurückgezogen?
2. Aufgaben
2.1. Serverzertifikate
- Untersuchen Sie die Serverzertifikate der Webserver www.htw-dresden.de, www.informatik.htw-dresden.de und idefix.informatik.htw-dresden.de mittels openssl (Parameter -showcerts)
- Notieren Sie jeweils die Felder: Aussteller, Seriennummer, Inhaber, Gültigkeit, SAN
- Auf welchem Kryptoverfahren basiert der öffentliche Schlüssel des Zertifikats mit welchen Bitlängen?
- Auf welchem Kryptoverfahren basiert die Signatur des Zertifikats?
- Analysieren Sie die Zertifikatskette, welcher Vertrauensanker wird jeweils genutzt?
- Welche Vertrauenskette nutzen www.google.com und geant.org?
Hilfe
# Get Certificate (Chain)
openssl s_client -showcerts -connect www.example.com:443 </dev/null
# View Certificate
openssl x509 -text -noout -in cert.crt
2.2. TLS-Aushandlung
Untersuchung der ausgehandelten TLS-Verfahren:
- Welche TLS-Version wird bei den HTW-Servern jeweils genutzt?
- Welche Kryptoverfahren wurden ausgehandelt?
2.3. Vertrauensanker im Browser / Betriebssystem
- Lassen Sie sich die Vertrauensanker der Browser und des BS anzeigen und schätzen Sie jeweils die ungefähre Anzahl.
- Firefox: Einstellungen, Datenschutz, Zertifikate, Zertifizierungsstellen
- Chrome: Einstellungen, Datenschutz und Sicherheit, Sicherheit, Zertifikate
- SSL-Directory (Ubuntu):
/etc/ssl/certs
- Sind die Wurzel-Zertifizierungsstellen der letzten Aufgabe dabei?
2.4. selbstsigniertes Zertifikat
- Erstellen Sie mittels openssl ein selbstsigniertes Server-Zertifikat mit folgenden Schritten:
- privaten Schlüssel erstellen (RSA 4096 Bit)
- Zertifikatsignaturanforderung (CSR) erstellen (nutzen Sie den FQDN und Daten ihres Laborrechners)
- Zertifikat erstellen/signieren mit Laufzeit 365 Tagen
- Lassen Sie sich den privaten Schlüssel mittels openssl anzeigen und finden Sie den RSA-Modul, den öffentlichen und privaten Schüssel heraus!
- Warum sind im privaten Schlüssel neben dem privateExponent noch weitere Variablen zu finden?
# Help
openssl genpkey -help
openssl rsa -help
openssl req -help
openssl x509 -help
# Privaten Schlüssel erzeugen
openssl genpkey -algorithm RSA -out private.key
# Öffentlicher Schlüssel extrahieren
openssl rsa -in private.key -pubout -out public.key
# Signaturanforderung erzeugen
openssl req -key private.key -new -out csr.pem
# Signatur
openssl req -x509 -days 365 -key private.key -in csr.pem -out certificate.crt
# Anzeige der verschiedenen Dateien
openssl [x509|req|pkey|rsa] -in dateiname -text -noout [-pubin]
2.5. Eigene CA
- welche Schritte sind notwendig, um eine eigene CA zu betreiben?
- Erzeugen Sie ein selbstsigniertes Root-Zertifikat
- Signieren Sie mit diesem eine CSR.
- Um ein vom Browser akzeptiertes Zertifikat zu erhalten ist SAN notwendig.
# Root-CA
openssl req -x509 -sha256 -days 1825 -newkey rsa:4096 -keyout rootCA.key -out rootCA.crt
# Signatur
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in domain.csr -out domain.crt -days 90 -CAcreateserial
# Signatur mit SAN-Erweiterung
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in domain.csr -out domain.crt -days 90 -CAcreateserial -extfile domain.ext
domain.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = domain
2.6. Zertifikats-Sperrverfahren
- Prüfen Sie die Sperrliste der an der HTW genutzten CA.
- URL im Zertifikatfeld: CRL-Verteilungspunkte
- Listen sind häufig im DER-Format, nutzen Sie zur Anzeige openssl, siehe unten.
- Wieviele Einträge sind vorhanden?
- Sind die untersuchten HTW-Server darin enthalten?
- Informieren Sie sich, wie ein Browser diese Untersuchung für eine Domain praktisch realisiert?
- Diskutieren Sie Vorteile- und Nachteile von Zertifikatssperrlisten!
- Wie funktioniert das Online Certificate Status Protocol (OCSP) aus RFC 6960? Welche Probleme entstehen hierbei?
- Online Certificate Status Protocol stapling (OCSP stabling) aus RFC 6066?
# Get Certificate (with TLS Server Name Indication - TLS SNI, for TLS handshake with corresponding certificate)
openssl s_client -showcerts -connect www.example.com:443 </dev/null
openssl s_client -showcerts -servername www.example.com -connect www.example.com:443 </dev/null
# Get URL from certificate
openssl x509 -in fd.crt -noout -text | grep -A 5 CRL
# Download CRL
wget URL -O geant.crl
# Verify CRL
openssl crl -in geant.crl -inform DER -CAfile issuer.crt -noout
# Determine SN of certificate to check
openssl x509 -in fd.crt -noout -serial
# List CRL and search for SN
openssl crl -inform DER -text -noout -in geant.crl | grep SN
Literatur
Letzte Änderung: 01. July 2024 17:38