it-swarm.com.de

PEM, CER, CRT, P12 - worum geht es?

Ich hoffe, meine Frage ist nicht zu allgemein, aber ich finde das Thema des Speicherns asymmetrischer Schlüssel sehr verwirrend.

So verstehe ich das: Mit openSSL kann ich mein RSA-Schlüsselpaar generieren:

  • openssl genrsa -out private.pem gibt mir eine PEM-Datei, die nur einen privaten Schlüssel enthält
  • openssl rsa -in private.pem -outform PEM -pubout -out public.pem gibt mir eine PEM-Datei, die einen öffentlichen Schlüssel enthält

Nachdem ich diese beiden Befehle ausgeführt habe, habe ich mein RS-256-Schlüsselpaar (ist es der richtige Name? Die Schlüssel sind meines Wissens 2048 Bit, warum also RS-256, nicht RS-2048?).

  1. Kann ich die 2 Dateien, die ich (private.PEM + public.PEM) habe, bereits als Zertifikat betrachten?
  2. Was ist der Inhalt von CER-, CRT- oder P12-Dateien? Ich kann keine wirklichen Beispiele für diese Dateien finden.
  3. Wie generiere ich CER, CRT oder P12 aus meinen 2 PEM-Dateien, die ich habe?
  4. Ich habe einige Informationen gesehen, dass die P12-Datei durch ein Passwort geschützt werden kann - was ist der Grund, diese Datei mit einem Passwort zu schützen -, dass das Passwort erneut irgendwo gespeichert werden muss. Wir speichern die P12-Datei bereits an einem sicheren Ort, auf den niemand Zugriff haben sollte nach rechts?
  5. Ich habe ein Beispiel gesehen, in dem 1 PEM-Datei sowohl öffentliche als auch private Schlüssel enthielt. Gibt es nicht eine entschiedene Struktur von PEM? Kann ich dort die gewünschten Schlüssel ablegen?
  6. Ich sah auch eine PEM-Datei mit "----- BEGIN CERTIFICATE -----" und "----- END CERTIFICATE -----". Was ist das für ein Zertifikat? Meine 2 PEM-Dateien haben: "----- BEGIN PUBLIC KEY -----...----- END PUBLIC KEY -----" und die andere hat: "----- BEGIN RSA PRIVATE SCHLÜSSEL -----...----- ENDE RSA PRIVATE SCHLÜSSEL ----- ".
14
Loreno

openssl genrsa -out private.pem gibt mir eine PEM-Datei, die nur einen privaten Schlüssel enthält

Nicht wirklich. Im Prinzip kann RSA nur einen privaten Schlüssel ohne öffentlichen Schlüssel speichern, aber das von OpenSSL verwendete RSAPrivateKey-Format (von PKCS1 alias RFCs 2313 2437 3447 8017 ) speichert beide. Die für andere asymmetrische Algorithmen (DSA, DH, ECC) verwendeten Formate haben ebenfalls diese Eigenschaft. Dies bedeutet, dass Sie immer nur die privatekey-Datei speichern und bei Bedarf den publickey erhalten können. GPG macht das Gleiche; Die Informationen zum öffentlichen Schlüssel sind immer im "geheimen" Schlüssel enthalten, wie sie aus historischen Gründen genannt werden. OpenSSH verwendet (meistens) die OpenSSL-Formate, daher ist dies keine nützliche Beobachtung.

openssl rsa -in private.pem -outform PEM -pubout -out public.pem gibt mir eine PEM-Datei, die einen öffentlichen Schlüssel enthält

Welches enthält nur den öffentlichen Schlüssel. Und ist so gut wie nutzlos, weil (1) es aus der Privatekey-Datei neu generiert werden kann und (2) die meisten Anwendungen nicht nur den Publickey, sondern stattdessen ein Zertifikat verwenden.

Nachdem ich diese beiden Befehle ausgeführt habe, habe ich mein RS-256-Schlüsselpaar (ist es der richtige Name? Die Schlüssel sind meines Wissens 2048 Bit, warum also RS-256, nicht RS-2048?).

Technisch gesehen ist es ein Schlüsselpaar, aber wie oben führt OpenSSL im Grunde das Konzept des Schlüsselpaars mit dem privaten Schlüssel zusammen und unterscheidet nur den öffentlichen Schlüssel - der zu unterscheiden ist, weil er öffentlich ist.

Ja, Kryptoschlüssel werden fast immer in Bits gemessen. Der Schemaname RS256 (kein Bindestrich) wird in JSON Web Signature (JWS) und JSON Web Token (JWT) verwendet, um die RSA-Signatur (insbesondere das von PKCS1 definierte RSA-Signaturschema RSASSA-PKCS1-v1_5) mit SHA zu bezeichnen -256 für den Hash . Dies hängt nicht mit der Größe des RSA-Schlüssels zusammen und kann mit jeder (implementierten) Größe verwendet werden. Der Beispielschlüssel für RS256 in RFC7517 ist 1024-Bit - obwohl RSA-1024 heute keinen ausreichenden Sicherheitsspielraum bietet und von Behörden wie NIST und CABforum (und damit den meisten Webbrowsern) seit mehreren Jahren verboten ist. Die RSA-Signatur (und auch die RSA-Verschlüsselung) wird in vielen anderen Anwendungen als JWS/JWT verwendet.

Kann ich die 2 Dateien, die ich (private.PEM + public.PEM) habe, bereits als Zertifikat betrachten?

Zunächst eine Klarstellung: 'Zertifikat' ist ein allgemeines Konzept, das in vielen Zusammenhängen verwendet wird. Bei Krypto sind die interessierenden Zertifikate normalerweise Public-Key-Zertifikate, die einen Public-Key an eine Identität (oder manchmal eine Rolle) mit einigen verwandten Attributen binden, und die mit Abstand häufigsten sind die durch definierten Public-Key-Zertifikate X.509 , ein Standard, der 1988 von der damaligen CCITT (jetzt ITU-T) erstellt und seitdem von vielen Standardorganisationen verbessert und nützlicher, aber nicht grundlegend anders gemacht wurde. Die Internetstandards für Zertifikate basieren auf X.509 und werden als Public Key Infrastructure unter Verwendung von X.509, abgekürzt PKIX, bezeichnet. X.509 repräsentiert seine Daten wie einige andere Computerstandards mithilfe einer generischen Syntax namens Abstract Syntax Notation 1, abgekürzt ASN.1 .

Nachdem dies gesagt wurde, NEIN. Ein Public-Key/X.509-Zertifikat enthält einen Publickey, aber es ist nicht nur ein Publickey. Es enthält viele andere Informationen, die für die Art und Weise, wie sie verwendet werden, von entscheidender Bedeutung sind, obwohl der öffentliche Schlüssel wohl die wichtigste einzelne Information ist. Ein Zertifikat wird für einen öffentlichen Schlüssel erstellt, der normalerweise als Zertifikatsignierungsanforderung (auch als CSR oder einfach als Anforderung bezeichnet) von einer Entität namens Certificate Authority oder CA verpackt wird, die das Zertifikat digital signiert den Schlüssel der Zertifizierungsstelle, damit niemand ihn ändern kann, und somit kann jedes Programm, das ihn verwendet, ihm vertrauen. Grundsätzlich kann jeder als Zertifizierungsstelle fungieren, und insbesondere das OpenSSL-Befehlszeilenprogramm kann die technischen Vorgänge ausführen, die eine Zertifizierungsstelle ausführt, z. B. das Ausstellen von Zertifikaten. In den meisten Situationen hängt der Wert und die Nützlichkeit eines Zertifikats jedoch davon ab, wie gut und umfassend der ausstellenden Zertifizierungsstelle vertraut wird. Daher sind die erfolgreichsten Zertifizierungsstellen diejenigen, die sich als vertrauenswürdig etabliert haben, z. B. Digicert (jetzt einschließlich Symantec) -Verisign, Comodo, GoDaddy usw.

Als Sonderfall ist es möglich, ein selbstsigniertes Zertifikat zu haben, das mit einem eigenen Schlüssel anstelle des Schlüssels einer Zertifizierungsstelle signiert wird. Dieses Zertifikat kann kein Vertrauen wie eines von einer echten Zertifizierungsstelle vermitteln, da es NICHT effektiv gegen Substitution geschützt ist. Es kann jedoch auch dann erstellt werden, wenn Sie eine Zertifizierungsstelle nicht kontaktieren und/oder bezahlen können, und es kann normalerweise mit verarbeitet werden manuelle Genehmigung oder Überschreibung durch Programme, die normalerweise ein Zertifikat verwenden oder erfordern.

Was ist der Inhalt von CER-, CRT- oder P12-Dateien? Ich kann keine wirklichen Beispiele für diese Dateien finden.

CER und CRT werden (beide) häufig als Erweiterungen für eine Datei mit einem X.509-Zertifikat verwendet und können in beiden Fällen je nach Dateisystem verwendet werden. Für den Dateiinhalt werden zwei gängige Codierungen verwendet: "DER", eine von ASN.1 definierte binäre Codierung (Distinguished Encoding Rules); und "PEM" , das den binären DER in base64 konvertiert, in Zeilen mit geeigneter Größe unterteilt und mit Header- und Trailer-Zeilen versehen, was für Personen bequemer ist, insbesondere für Dinge wie Ausschneiden und Einfügen. PEM wird so genannt, weil diese Codierung ursprünglich für Privacy Enhanced (e) Mail definiert wurde, ein Schema, das von anderen E-Mail- und Nachrichtentechnologien ersetzt wurde, dieses Format jedoch weiterhin verwendet wird. Diese Codierungen sehen sehr unterschiedlich aus, enthalten jedoch genau dieselben Informationen (sofern sie nicht beschädigt sind), und viele Programme, die sich mit Zertifikaten befassen, können beide lesen. Von OpenSSL geschriebene PEM-Dateien enthalten häufig Kommentarinformationen vor dem Header oder nach dem Trailer. Programme sollten dies ignorieren, aber manchmal werden sie verwirrt und Sie müssen die überflüssigen Informationen entfernen. Achten Sie unter Windows auch darauf, NICHT das 'UTF-8'-Format zu verwenden, das normalerweise ein Byte Order Mark hinzufügt, das auf dem Display nicht sichtbar ist, aber ein Programm stört, das die Datei liest.

Obwohl PEM häufig für Zertifikate verwendet wird und viele PEM-Dateien Zertifikate sind, sollten Sie beachten, dass PEM auch für viele andere Zwecke verwendet wird. Nehmen Sie nicht an, dass eine PEM-Datei ein Zertifikat ist. Überprüfen Sie stattdessen die Kopfzeile, in der in diesem Fall bequemerweise -----BEGIN CERTIFICATE----- oder manchmal -----BEGIN X509 CERTIFICATE----- steht. Siehe rfc7468 für viel mehr Details dazu.

P12 wird häufig verwendet, um Dateien im Format PKCS12 aka PFX zu identifizieren, was ganz anders ist. Obwohl der PKCS12-Standard eine große Anzahl von Optionen unterstützt, wird er normalerweise verwendet, um einen privaten Schlüssel PLUS des entsprechenden Zertifikats PLUS zu enthalten. In den meisten Fällen handelt es sich um ein oder mehrere "Ketten" - oder "Zwischen" -Zertifikate, die zur Bildung einer Vertrauenskette erforderlich sind Überprüfen Sie das Endentitätszertifikat. In der Praxis sind PKCS12-Dateien immer binär, obwohl es keinen technischen Grund gibt, warum sie nicht PEM-codiert oder auf andere Weise benutzerfreundlicher gemacht werden könnten.

Wie generiere ich CER, CRT oder P12 aus meinen 2 PEM-Dateien, die ich habe?

Um ein Zertifikat zu erhalten, müssen Sie entweder eine Zertifizierungsstelle (entweder eine etablierte oder eine von Ihnen erstellte DIY) verwenden oder ein selbstsigniertes Zertifikat erstellen. Je nachdem, welche Software (und ggf. CA) Sie verwenden, gibt es wahrscheinlich Hunderte von Variationen, aber für OpenSSL und die meisten CAs die üblichen ) Verfahren ist:

  1. Erstellen Sie eine CSR mit openssl req -new -key privatekey [... other options] >csr

Weitere Informationen finden Sie in der Manpage zu req. Wenn Sie das Zertifikat für SSL/TLS einschließlich HTTPS verwenden möchten, geben Sie als 'Common Name' den (oder einen) Namen an, unter dem auf den Server zugegriffen wird. Dies ist normalerweise der vollständige Name Qualifizierter Domainname (FQDN). Wenn Sie das Zertifikat für andere Anwendungen verwenden möchten, hängen die erforderlichen Identitätsinformationen von den Anwendungen ab.

  1. Senden Sie für eine echte Zertifizierungsstelle die CSR zusammen mit dem Identitätsnachweis oder einer anderen Autorisierung und möglicherweise der erforderlichen Zahlung an die Zertifizierungsstelle (häufig auf einem Webformular, das PEM bequem macht).

Sie sollten im Gegenzug ein neu ausgestelltes 'End-Entity'-Zertifikat (das Ihren öffentlichen Schlüssel und Ihre Identität enthält) und normalerweise ein oder zwei Zertifikate mit öffentlichen Schlüsseln und Identität (en) für Zwischenzertifizierungsstellen erhalten, die zum Erstellen der Vertrauenskette verwendet werden . Dies können separate Dateien (entweder DER oder PEM) oder eine Verkettung (nur PEM) oder ein bestimmter Fall des PKCS7 -Standards (SignedData ohne Daten oder Signaturen, nur Zertifikate) sein, die normalerweise als P7B oder P7C bezeichnet werden.

2 '. Oder mach das selbst. Erstellen Sie einen CA-Schlüssel und ein Zertifikat (nur einmal) und verwenden Sie dann entweder openssl ca ... Oder openssl x509 -req -CA -CAkey ..., Um die CSR zu lesen und ein Zertifikat unter Ihrer eigenen CA auszustellen.

Dieses Zertifikat kann nur mit Systemen und Programmen verwendet werden, die von Ihnen selbst gesteuert werden, oder mit Personen, die Ihnen implizit vertrauen und . Sie können Ihr CA-Zertifikat technisch installieren. Dies ist normalerweise eine kleine Gruppe, manchmal eine leere einer. Achten Sie auch darauf, dass Sie Ihrem CA-Zertifikat und dem End-Entity-Zertifikat nicht denselben Namen geben, indem Sie beispielsweise die Standardeinstellungen in req akzeptieren. Wenn Sie dies tun, können die resultierenden Zertifikate nirgendwo verwendet werden.

  1. Verwenden Sie das Zertifikat nach Bedarf zusammen mit dem privaten Schlüssel und den Kettenzertifikaten. Dies kann das Kombinieren zu einem PKCS12 unter Verwendung von openssl pkcs12 -export Beinhalten.

Wie oben erwähnt, können Sie anstelle eines von der Zertifizierungsstelle ausgestellten Zertifikats ein selbstsigniertes Zertifikat erstellen. Ersetzen Sie die Schritte 1 und 2/2 'durch den Einzelschritt: openssl req -new -x509 -key privatekey ... >cert

Beachten Sie das Hinzufügen des Flags -x509, Und auf der Manpage werden zahlreiche zusätzliche Optionen beschrieben. Dies hat alle Eigenschaften und Einschränkungen einer DIY-Zertifizierungsstelle sowie mehr: Sie (und/oder Ihre Freunde) können das DIY-Zertifizierungsstellenzertifikat nicht nur einmal installieren, sondern müssen jedes Endentitätszertifikat separat installieren und den Vorgang jederzeit wiederholen Ihre Zertifikate müssen ersetzt werden, da sie ablaufen oder relevante Informationen geändert werden.

Ich habe einige Informationen gesehen, dass die P12-Datei durch ein Passwort geschützt werden kann - was ist der Grund, diese Datei mit einem Passwort zu schützen -, dass das Passwort erneut irgendwo gespeichert werden muss. Wir speichern die P12-Datei bereits an einem sicheren Ort, auf den niemand Zugriff haben sollte nach rechts?

Das Passwort muss nicht unbedingt gespeichert werden. Programme können bei Bedarf dazu auffordern (und das Programm openssl tut dies insbesondere). Obwohl PKCS12/PFX heute häufig zum Speichern verwendet wird, war es ursprünglich für die Übertragung eines privaten Schlüssels mit Zertifikaten von einem System auf ein anderes vorgesehen, ein Prozess, der sehr oft nicht sicher ist. Selbst für Speicher, Systeme und Orte, die Sie für sicher halten, erweisen sich manchmal als nicht sicher, und die gründliche Verteidigung der Verschlüsselung des privaten Schlüssels lohnt sich. Aber in einigen Fällen ist das Passwort nur ein kleines bisschen zusätzliche Arbeit ohne wirklichen Nutzen.

Ich habe ein Beispiel gesehen, in dem 1 PEM-Datei sowohl öffentliche als auch private Schlüssel enthielt. Gibt es nicht eine entschiedene Struktur von PEM? Kann ich dort die gewünschten Schlüssel ablegen?

Ob mehr als ein Objekt aus einer einzelnen PEM-Datei gelesen und somit sinnvoll in dieser gespeichert werden kann, hängt vom Programm ab, das das Lesen durchführt. OpenSSL kann in den meisten (aber nicht allen) Fällen damit umgehen. Daher ist die Verwendung solcher Dateien mit OpenSSL (und Programmen, die die OpenSSL-Bibliothek aufrufen) mäßig häufig. andere Programme und Bibliotheken können unterschiedlich sein. Wie oben ist das Speichern des öffentlichen Schlüssels als solchen fast nie sinnvoll. Speichern von z.B. Der privatekey und das Zertifikat oder alle Zertifikate in der Kette können nützlich sein. Programme wie Apache httpd und nginx unterstützen dies (benötigen es jedoch nicht).

Ich sah auch eine PEM-Datei mit "----- BEGIN CERTIFICATE -----" und "----- END CERTIFICATE -----". Was ist das für ein Zertifikat?

Siehe oben für Zertifikate im Allgemeinen. Wenn Sie die Details eines bestimmten Zertifikats wissen möchten (den Namen des Schlüsselbesitzers, der als "Betreff" bezeichnet wird; den öffentlichen Schlüssel; den Zeitraum, in dem das Zertifikat gültig ist; die ausstellende Zertifizierungsstelle und seine Seriennummer usw.), können Sie verwenden openssl x509 -text <file Oder abhängig von Ihrem System können normalerweise mehrere andere Programme Zertifizierungsdetails anzeigen. Unter Windows für .cer .crt Können Sie einfach auf eine Datei doppelklicken (oder sie im Dialogfeld 'Ausführen' oder im Befehl start in CMD benennen), und ein Dialogfeld mit einer Registerkarte Details wird angezeigt.

19