Public Key Infrastructure
Public-Key-Infrastrukturen
Public-Key-Infrastrukturen versuchen das Problem zu lösen, zu überprüfen, ob ein öffentlicher Schlüssel zu einer bestimmten Einheit gehört, um Man-in-the-Middle-Angriffe zu verhindern.
- Ansätze
- Certificate Authorities
- Web of Trust
- Zertifizierungsstellen (CA)
- signieren die Zertifikate von Endteilnehmern und verknüpfen so eine Art von Identität (z. B. einen Domänennamen oder eine E-Mail-Adresse) mit einem öffentlichen Schlüssel.
- CAs werden mit TLS- und S/MIME-Zertifikaten verwendet, und das CA-System hat eine lange Liste möglicher und tatsächlicher Probleme, die im Abschnitt Hardening PKI und (Durumeric, Kasten, Bailey, & Halderman, 2013) zusammengefasst sind.
- Web of Trust
Das Web of Trust ist ein dezentralisiertes System, bei dem Menschen gegenseitig ihre Schlüssel signieren, so dass die Wahrscheinlichkeit hoch ist, dass es einen "Vertrauenspfad" von einem Schlüssel zum anderen gibt.
- Es wird mit PGP-Schlüsseln verwendet, und obwohl es die meisten Probleme des CA-Systems vermeidet, ist es umständlicher.
- Alternativen
Als Alternativen zu diesen öffentlichen Systemen gibt es zwei weitere Möglichkeiten
- Die Verwendung einer privaten Zertifizierungsstelle und das manuelle Vertrauen in Schlüssel (wie es bei SSH-Schlüsseln oder manuell vertrauenswürdigen Schlüsseln in Webbrowsern verwendet wird).
- Der erste Teil dieses Abschnitts befasst sich damit, wie man ein Zertifikat im CA-System erhält.
- Der zweite Teil enthält Empfehlungen, wie Sie die Sicherheit Ihrer PKI verbessern können.
Zertifizierungsstellen
Um ein Zertifikat zu erhalten, können Sie eine externe Zertifizierungsstelle finden, die bereit ist, ein Zertifikat für Sie auszustellen, Ihre eigene Zertifizierungsstelle betreiben oder selbst signierte Zertifikate verwenden.
- Wie immer gibt es Vor- und Nachteile für jede dieser Optionen; es muss ein Gleichgewicht zwischen Sicherheit und Benutzerfreundlichkeit gefunden werden.
Zertifikate von einer externen Zertifizierungsstelle
Es gibt eine ziemlich große Anzahl kommerzieller Zertifizierungsstellen, die gegen Geld Zertifikate ausstellen.
- Einige der bekanntesten kommerziellen CAs sind Verisign, GoDaddy und Teletrust.
- Es gibt jedoch auch CAs, die kostenlose Zertifikate anbieten.
- Die bekanntesten Beispiele sind StartSSL, ein Unternehmen, das einige Arten von Zertifikaten kostenlos anbietet, und CAcert, eine gemeinnützige, ehrenamtlich tätige Organisation, die für die Ausstellung von Zertifikaten keinerlei Gebühren erhebt.
- Im Forschungs- und Bildungsbereich schließlich gibt es eine Reihe von Zertifizierungsstellen, die in der Regel in der Hochschulgemeinschaft bekannt und akzeptiert sind.
Eine große Anzahl von Zertifizierungsstellen ist in den Vertrauensspeichern von Client-Software oder Betriebssystemen vorinstalliert; je nach Anwendung müssen Sie Ihre Zertifizierungsstelle entsprechend auswählen oder über einen Mechanismus verfügen, um das Stammzertifikat der gewählten Zertifizierungsstelle an die Clients zu verteilen. Wenn Sie ein Zertifikat bei einer CA beantragen, müssen Sie das Schlüsselpaar unbedingt selbst erzeugen.
- Vor allem der private Schlüssel sollte der CA niemals bekannt sein.
- Wenn eine Zertifizierungsstelle anbietet, das Schlüsselpaar für Sie zu erzeugen, sollten Sie dieser Zertifizierungsstelle nicht vertrauen.
Die Erzeugung eines Schlüsselpaares und einer Zertifikatsanforderung kann mit einer Reihe von Werkzeugen durchgeführt werden.
- Auf Unix-ähnlichen Systemen ist es wahrscheinlich, dass Ihnen die OpenSSL-Suite zur Verfügung steht.
In diesem Fall können Sie einen privaten Schlüssel und eine entsprechende Zertifikatsanforderung wie folgt erzeugen:
$ openssl req -new -nodes -keyout <servername>.key -out <servername>.csr -newkey rsa:<keysize> -sha256 Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Bavaria Locality Name (eg, city) []:Munich Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Organizational Unit Name (eg, section) []:Example Section Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []:admin@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Setting Up Your Own Certificate Authority
In manchen Situationen ist es ratsam, eine eigene Zertifizierungsstelle zu betreiben.
- Ob dies eine gute Idee ist, hängt von den genauen Umständen ab.
- Im Allgemeinen gilt: Je zentralisierter die Kontrolle der Systeme in Ihrer Umgebung ist, desto weniger Aufwand müssen Sie für die Einrichtung Ihrer eigenen Zertifizierungsstelle betreiben.
- Andererseits maximiert der Betrieb einer eigenen Zertifizierungsstelle das Vertrauensniveau, das Sie erreichen können, da externe Abhängigkeiten minimiert werden.
Wiederum unter Verwendung von OpenSSL als Beispiel, können Sie Ihre eigene CA mit den folgenden Befehlen auf einem Debian-System einrichten:
$ cd /usr/lib/ssl/misc $ sudo ./CA.pl -newca Answer the questions according to your setup.
- Now that you have configured your basic settings and issued a new root certificate, you can issue new certificates as follows:
$ cd /usr/lib/ssl/misc $ sudo ./CA.pl -newreq
Alternativ gibt es Software wie TinyCA, die als "Wrapper" um OpenSSL herum agiert und versucht, das Leben einfacher zu machen.
Creating a Self-Signed Certificate
Wenn das gewünschte Vertrauensniveau sehr hoch und die Anzahl der beteiligten Systeme begrenzt ist, kann der einfachste Weg, eine sichere Umgebung einzurichten, die Verwendung selbst signierter Zertifikate sein.
- Ein selbstsigniertes Zertifikat wird nicht von einer Zertifizierungsstelle ausgestellt, sondern von der Einrichtung, für die es ausgestellt wurde, signiert.
- Auf diese Weise entfällt der organisatorische Aufwand, der mit dem Betrieb einer Zertifizierungsstelle verbunden ist, auf Kosten der Notwendigkeit, alle Vertrauensbeziehungen zwischen Entitäten manuell herzustellen.
Mit OpenSSL können Sie ein zuvor erstelltes Zertifikat mit diesem Befehl selbst signieren:
$ openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
Sie können auch ein selbstsigniertes Zertifikat mit nur einem Befehl erstellen:
$ openssl req -new -x509 -keyout privkey.pem -out cacert.pem -days 1095 -nodes -newkey rsa:<keysize> -sha256
Das daraus resultierende Zertifikat wird standardmäßig von niemandem als vertrauenswürdig eingestuft. Um also nützlich zu sein, muss das Zertifikat allen Parteien, die damit in Berührung kommen könnten, a priori bekannt gemacht werden.
Hardening PKI
In recent years several CAs were compromised by attackers in order to get a hold of trusted certificates for malicious activities.
- In 2011 the Dutch CA Diginotar was hacked and all certificates were revoked (Elinor Mills, 2011).
- Recently Google found certificates issued to them, which were not used by the company (Damon Poeter, 2011).
- The concept of PKIs heavily depends on the security of CAs.
- If they get compromised the whole PKI system will fail.
- Some CAs tend to incorrectly issue certificates that were designated to do a different job than what they were intended to by the CA (Adam Langley, et. al., 2013).
Therefore several security enhancements were introduced by different organizations and vendors (H. Tschofenig and E. Lear, 2013).
- Currently two methods are used, DANE (Hoffman & Schlyter, 2012) and Certificate Pinning (C. Evans and C. Palmer, 2013).
- Google recently proposed a new system to detect malicious CAs and certificates called Certificate Transparency (Adam Langley, Ben Laurie, Emilia Kasper, 2013).
- In addition, RFC 6844 describes Certification Authorization Records, a mechanism for domain name owners to signal which Certificate Authorities are authorized to issue certificates for their domain.
Certification Authorization Records
RFC 6844 describes Certification Authorization Records, a mechanism for domain name owners to signal which Certificate Authorities are authorized to issue certificates for their domain. When a CAA record is defined for a particular domain, it specifies that the domain owner requests Certificate Authorities to validate any request against the CAA record.
- If the certificate issuer is not listed in the CAA record, it should not issue the certificate.
The RFC also permits Certificate Evaluators to test an issued certificate against the CAA record, but should exercise caution, as the CAA record may change during the lifetime of a certificate, without affecting its validity. CAA also supports an iodef property type which can be requested by a Certificate Authority to report certificate issue requests which are inconsistent with the issuer’s Certificate Policy.
Configuration of CAA records
BIND supports CAA records as of version 9.9.6. A CAA record can be configured by adding it to the zone file: $ORIGIN example.com
CAA 0 issue "ca1.example" CAA 0 iodef "mailto:security@example.com"
If your organization uses multiple CA’s, you can configure multiple records:
CAA 0 issue "ca1.example" CAA 0 issue "ca2.example"
"ca1.example" and "ca2.example" are unique identifiers for the CA you plan on using.
- These strings can be obtained from your Certificate Authority, and typically are its top level domain.
- An example is "letsencrypt.org" for the Let’s Encrypt CA operated by the Internet Security Research Group.
Knot-DNS supports CAA records as of version 2.2.0.
Validation of CAA records
Once a CAA record is deployed, it can be validated using the following dig query:
$ dig CAA google.com ; <<>> DiG 9.10.3-P4-Debian <<>> CAA google.com ;; ANSWER SECTION: google.com. 3600 IN CAA 0 issue "symantec.com"
On older versions of Dig, which do not support CAA records, you can query the record type manually:
$ dig +short -t TYPE257 google.com \# 19 0005697373756573796D616E7465632E636F6D