Certificates

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

Andere Möglichkeiten, HackTricks zu unterstützen:

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:

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 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) eingerichtet. 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 zur 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 das 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 optimieren.

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 sichergestellt wird, dass die Ausstellung und Existenz von SSL-Zertifikaten für Domain-Besitzer, CAs und Benutzer sichtbar sind. Ihre Ziele sind:

  • Verhindern, dass CAs SSL-Zertifikate für eine Domain ausstellen, ohne dass der Domain-Besitzer davon weiß.

  • Ein offenes Prüfsystem zur 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 beträgt. Diese Server können unabhängig von CAs, ISPs oder jeder interessierten Partei verwaltet werden.

Abfrage

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

Es gibt verschiedene Formate zum Speichern von Zertifikaten, die jeweils ihre eigenen Anwendungsfälle und Kompatibilität haben. 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 einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden. Heute Zugriff erhalten:

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

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated