hacktricks/cryptography/certificates.md

12 KiB

Zertifikate

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:


Verwenden Sie Trickest, um mithilfe der weltweit fortschrittlichsten Community-Tools Workflows zu erstellen und zu automatisieren.
Heute Zugriff erhalten:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Was ist ein Zertifikat

Ein öffentlicher Schlüsselzertifikat ist eine digitale ID, die in der Kryptographie verwendet wird, um zu beweisen, dass jemand im Besitz eines öffentlichen Schlüssels ist. Es enthält die Details des Schlüssels, die Identität des Besitzers (das Subjekt) und eine digitale Signatur von einer vertrauenswürdigen Behörde (dem Aussteller). Wenn die Software dem Aussteller vertraut und die Signatur gültig ist, ist eine sichere Kommunikation mit dem Besitzer des Schlüssels möglich.

Zertifikate werden hauptsächlich von Zertifizierungsstellen (CAs) in einer Public-Key-Infrastruktur (PKI)-Konfiguration ausgestellt. Eine andere Methode ist das Vertrauensnetzwerk, bei dem Benutzer die Schlüssel direkt überprüfen. Das gängige Format für Zertifikate ist X.509, das gemäß RFC 5280 für spezifische Anforderungen angepasst werden kann.

x509 Gemeinsame Felder

Gemeinsame Felder in x509-Zertifikaten

In x509-Zertifikaten spielen mehrere Felder eine entscheidende Rolle für die Gültigkeit und Sicherheit des Zertifikats. Hier ist eine Aufschlüsselung dieser Felder:

  • Die Versionsnummer kennzeichnet die Version des x509-Formats.
  • Die Seriennummer identifiziert das Zertifikat eindeutig innerhalb des Systems einer Zertifizierungsstelle (CA), hauptsächlich für die Rückverfolgung von Widerrufungen.
  • Das Subjekt-Feld repräsentiert den Besitzer des Zertifikats, der eine Maschine, eine Person oder eine Organisation sein kann. Es enthält detaillierte Identifikationen wie:
  • Common Name (CN): Domänen, die vom Zertifikat abgedeckt sind.
  • Land (C), Ort (L), Bundesland oder Provinz (ST, S oder P), Organisation (O) und Organisationseinheit (OU) bieten geografische und organisatorische Details.
  • Der Distinguished Name (DN) umfasst die vollständige Subjektidentifikation.
  • Der Aussteller gibt an, wer das Zertifikat überprüft und signiert hat, einschließlich ähnlicher Unterfelder wie beim Subjekt für die CA.
  • Der Gültigkeitszeitraum wird durch Zeitstempel Not Before und Not After markiert, um sicherzustellen, dass das Zertifikat nicht vor oder nach einem bestimmten Datum verwendet wird.
  • Der Abschnitt Öffentlicher Schlüssel, der für die Sicherheit des Zertifikats entscheidend ist, gibt Algorithmus, Größe und andere technische Details des öffentlichen Schlüssels an.
  • x509v3-Erweiterungen verbessern die Funktionalität des Zertifikats und geben Key Usage, Extended Key Usage, Subject Alternative Name und andere Eigenschaften an, um die Anwendung des Zertifikats zu feinabstimmen.

Key Usage und Erweiterungen

  • Key Usage identifiziert kryptografische Anwendungen des öffentlichen Schlüssels, wie digitale Signatur oder Schlüsselverschlüsselung.
  • Extended Key Usage grenzt die Anwendungsfälle des Zertifikats weiter ein, z. B. für die TLS-Serverauthentifizierung.
  • Subject Alternative Name und Basic Constraint definieren zusätzliche Hostnamen, die vom Zertifikat abgedeckt sind, und ob es sich um ein CA- oder Endgerätezertifikat handelt.
  • Bezeichner wie Subject Key Identifier und Authority Key Identifier gewährleisten Eindeutigkeit und Rückverfolgbarkeit von Schlüsseln.
  • Authority Information Access und CRL Distribution Points bieten Pfade zur Überprüfung der ausstellenden CA und zur Überprüfung des Widerrufsstatus des Zertifikats.
  • CT Precertificate SCTs bieten Transparenzprotokolle, die für das öffentliche Vertrauen in das Zertifikat entscheidend sind.
# Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509
from cryptography.hazmat.backends import default_backend

# Load an x509 certificate (assuming cert.pem is a certificate file)
with open("cert.pem", "rb") as file:
cert_data = file.read()
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())

# Accessing fields
serial_number = certificate.serial_number
issuer = certificate.issuer
subject = certificate.subject
public_key = certificate.public_key()

print(f"Serial Number: {serial_number}")
print(f"Issuer: {issuer}")
print(f"Subject: {subject}")
print(f"Public Key: {public_key}")

Unterschied zwischen OCSP und CRL-Verteilungspunkten

OCSP (RFC 2560) beinhaltet einen Client und einen Responder, die zusammenarbeiten, um zu überprüfen, ob ein digitales öffentliches Schlüsselzertifikat widerrufen wurde, ohne die vollständige CRL herunterladen zu müssen. Diese Methode ist effizienter als die traditionelle CRL, die eine Liste widerrufener Zertifikats-Seriennummern bereitstellt, aber das Herunterladen einer potenziell großen Datei erfordert. CRLs können bis zu 512 Einträge enthalten. Weitere Details sind hier verfügbar.

Was ist Zertifikatstransparenz

Zertifikatstransparenz hilft, zertifikatsbezogene Bedrohungen zu bekämpfen, indem die Ausstellung und Existenz von SSL-Zertifikaten für Domain-Besitzer, CAs und Benutzer sichtbar gemacht werden. Die Ziele sind:

  • Verhindern, dass CAs SSL-Zertifikate für eine Domain ohne Wissen des Domain-Besitzers ausstellen.
  • Ein offenes Prüfsystem für die Verfolgung irrtümlich oder bösartig ausgestellter Zertifikate etablieren.
  • Benutzer vor betrügerischen Zertifikaten schützen.

Zertifikat-Logs

Zertifikat-Logs sind öffentlich überprüfbare, nur anhängbare Aufzeichnungen von Zertifikaten, die von Netzwerkdiensten gepflegt werden. Diese Logs bieten kryptografische Beweise für Prüfzwecke. Ausstellungsbehörden und die Öffentlichkeit können Zertifikate in diese Logs einreichen oder sie zur Überprüfung abfragen. Obwohl die genaue Anzahl der Log-Server nicht festgelegt ist, wird erwartet, dass sie weltweit weniger als tausend sind. Diese Server können unabhängig von CAs, ISPs oder anderen interessierten Einheiten verwaltet werden.

Abfrage

Um Zertifikatstransparenz-Logs für eine beliebige Domain zu erkunden, besuchen Sie https://crt.sh/.

Es existieren verschiedene Formate zum Speichern von Zertifikaten, jedes mit eigenen Anwendungsfällen und Kompatibilität. Diese Zusammenfassung behandelt die Hauptformate und bietet Anleitungen zur Konvertierung zwischen ihnen.

Formate

PEM-Format

  • Am weitesten verbreitetes Format für Zertifikate.
  • Erfordert separate Dateien für Zertifikate und private Schlüssel, codiert in Base64 ASCII.
  • Übliche Erweiterungen: .cer, .crt, .pem, .key.
  • Hauptsächlich von Apache und ähnlichen Servern verwendet.

DER-Format

  • Ein binäres Format von Zertifikaten.
  • Fehlt die "BEGIN/END CERTIFICATE"-Anweisungen, die in PEM-Dateien zu finden sind.
  • Übliche Erweiterungen: .cer, .der.
  • Wird häufig mit Java-Plattformen verwendet.

P7B/PKCS#7-Format

  • Gespeichert in Base64 ASCII, mit Erweiterungen .p7b oder .p7c.
  • Enthält nur Zertifikate und Zertifikatsketten, ohne den privaten Schlüssel.
  • Unterstützt von Microsoft Windows und Java Tomcat.

PFX/P12/PKCS#12-Format

  • Ein binäres Format, das Serverzertifikate, Zwischenzertifikate und private Schlüssel in einer Datei kapselt.
  • Erweiterungen: .pfx, .p12.
  • Hauptsächlich auf Windows für den Import und Export von Zertifikaten verwendet.

Konvertierung von Formaten

PEM-Konvertierungen sind für die Kompatibilität unerlässlich:

  • x509 zu PEM
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
  • PEM zu DER
openssl x509 -outform der -in certificatename.pem -out certificatename.der
  • DER zu PEM
openssl x509 -inform der -in certificatename.der -out certificatename.pem
  • PEM zu P7B
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
  • PKCS7 zu PEM
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem

PFX-Konvertierungen sind entscheidend für das Verwalten von Zertifikaten unter Windows:

  • PFX zu PEM
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
  • PFX zu PKCS#8 beinhaltet zwei Schritte:
  1. Konvertiere PFX zu PEM
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
  1. Konvertiere PEM zu PKCS8
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
  • P7B zu PFX erfordert auch zwei Befehle:
  1. Konvertiere P7B zu CER
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
  1. Konvertiere CER und privaten Schlüssel in PFX
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer


Verwenden Sie Trickest, um mühelos Workflows zu erstellen und zu automatisieren, die von den weltweit fortschrittlichsten Community-Tools unterstützt werden.
Heute Zugriff erhalten:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: