Simulieren des Zertifikatsentzugs
In diesem Schritt lernen Sie, wie Sie ein Zertifikat widerrufen (revoke). Der Widerruf ist ein kritischer Prozess für den Fall, dass der private Schlüssel eines Zertifikats kompromittiert wurde oder das Zertifikat vor seinem natürlichen Ablauf nicht mehr benötigt wird. Dies wird mithilfe einer Zertifikatswiderrufsliste (Certificate Revocation List, CRL) verwaltet.
Eine CRL ist eine digital signierte Liste, die von einer CA ausgestellt wird und die Seriennummern aller von ihr widerrufenen Zertifikate enthält. Clients können die CRL herunterladen, um zu prüfen, ob ein erhaltenes Zertifikat noch gültig ist.
Für die Verwaltung des Widerrufs benötigt openssl eine kleine Konfigurationsdatei, um zu wissen, wo die Datenbankdateien der CA (index.txt und serial) zu finden sind. Das Setup-Skript für dieses Lab hat das notwendige Verzeichnis (my-ca) und die Dateien bereits erstellt. Erstellen Sie nun die Konfigurationsdatei.
Verwenden Sie den Befehl cat, um my-ca.conf zu erstellen:
cat << EOF > my-ca.conf
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = ./my-ca
database = \$dir/index.txt
serial = \$dir/serial
private_key = ca.key
certificate = ca.pem
default_md = sha256
policy = policy_anything
crl_extensions = crl_ext
default_crl_days = 30
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ crl_ext ]
authorityKeyIdentifier=keyid:always
EOF
Diese Konfigurationsdatei teilt OpenSSL mit, wie es als Zertifizierungsstelle (CA) agieren soll. Hier ist die Funktion der einzelnen Abschnitte:
default_ca = CA_default: Verweist auf den Hauptkonfigurationsabschnitt der CA.
dir = ./my-ca: Arbeitsverzeichnis der CA für Datenbankdateien
database = $dir/index.txt: Zertifikatsdatenbank (verfolgt ausgestellte/widerrufene Zertifikate)
serial = $dir/serial: Seriennummerndatei für eindeutige Zertifikats-IDs
private_key = ca.key: Privater Schlüssel der CA zum Signieren von Zertifikaten
certificate = ca.pem: Eigenes Zertifikat der CA
default_md = sha256: Hash-Algorithmus für Signaturen (SHA-256)
policy = policy_anything: Regeln zur Zertifikatsvalidierung
crl_extensions = crl_ext: Optionen zur CRL-Formatierung
default_crl_days = 30: Gültigkeitsdauer der CRL (30 Tage)
countryName = optional: Ländercode
stateOrProvinceName = optional: Bundesstaat/Provinz
localityName = optional: Stadt/Ort
organizationName = optional: Name der Organisation
organizationalUnitName = optional: Abteilung
commonName = supplied: Domain-/Servername (erforderlich)
emailAddress = optional: E-Mail-Adresse
authorityKeyIdentifier=keyid:always: Fügt den CA-Identifikator in CRLs zur Überprüfung hinzu
Diese Konfigurationsdatei ist die „Betriebsanleitung“ für Ihre CA. Sie teilt OpenSSL mit, wo Schlüssel zu finden sind, wie Zertifikate gespeichert werden und welche Regeln beim Ausstellen und Widerrufen von Zertifikaten zu befolgen sind.
Widerrufen Sie nun das Serverzertifikat (server.crt). Dieser Befehl sucht die Seriennummer des Zertifikats heraus und markiert es in der Datenbankdatei index.txt als widerrufen.
openssl ca -config my-ca.conf -revoke server.crt
Sie sehen eine Ausgabe, die den Widerruf bestätigt.
Nach dem Widerruf müssen Sie eine aktualisierte CRL generieren und veröffentlichen.
openssl ca -config my-ca.conf -gencrl -out my-ca.crl
Dadurch wird die Datei my-ca.crl erstellt, die die Liste der widerrufenen Zertifikate enthält.
Lassen Sie uns abschließend versuchen, das Serverzertifikat erneut zu überprüfen, aber dieses Mal werden wir auch die CRL bereitstellen. Ein ordnungsgemäßer Überprüfungsprozess muss auf Widerruf prüfen.
openssl verify -CAfile ca.pem -CRLfile my-ca.crl -crl_check server.crt
Der Befehl schlägt nun mit einer eindeutigen Meldung fehl:
C = US, ST = California, L = MountainView, O = MyWebServer, CN = example.com
error 23 at 0 depth lookup: certificate revoked
error server.crt: verification failed
Der Fehler „certificate revoked“ (Zertifikat widerrufen) bestätigt, dass unser Widerrufsprozess erfolgreich war. Der Client hat bei der Überprüfung der CRL korrekt erkannt, dass das Zertifikat für example.com nicht mehr vertrauenswürdig ist.