Mac nix basteln:OpenSSL

Aus Attraktor Wiki

Version vom 6. Dezember 2015, 23:02 Uhr von Andre (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

OpenSSL lässt sich für verschiedene Krypto-Operationen nutzen, so z.B. Erstellen und verwalten von verschiedenen Schlüsseltypen, Erstellen von Zertifikaten, verschlüsseln/entschlüsseln...

Schlüsselerzeugung für OpenVPN

Als Beispiel wird ein Satz Schlüssel zum Aufsetzen einer OpenVPN-Verbindung erzeugt:

  1. Erzeugen einer CA

    Verzeichnis für private Schlüssel und Zertifikate erstellen:
    $ mkdir Schluessel
    $ mkdir Zertifikate
    Zertifikatsnummerierungszähler erstellen und Wert 01 reinschreiben:
    $ echo "01" > Zertifikate/vpn-ca.srl
    4096bit langer, privater RSA-Schlüssel (PKCS#1 im PEM-Format) [oder Schlüsselpaar???] erstellen, welcher mit AES (256bit) geschützt ist:
    $ openssl genrsa -aes256 -out Schluessel/vpn-cakey.pem 4096
    Man sollte meinen, dass man in die Zertifikate unter Name usw. nichts eintragen muss, denn schliesslich möchte man sie vorwiegend nur zur Verschlüsselung einsetzen. Leider streikt OpenVPN, wenn man die Felder leer lässt. Also sollte man zumindest Quatsch, wenn nicht gar echte Daten eintragen. Besonders der common name (CN) ist tatsächlich wichtig.
    10a gültiges (-days 3650), selbstsigniertes X509-Zertifkat (nur für Test oder root CA)(-x509) aus privatem Schlüssel erstellen (-key Schluessel/vpn-cakey.pem) und nach vpn-ca.pem schreiben (-out Zertifikate/vpn-ca.pem). Zertifikates Seriennummer auf 1 setzen (set_serial 1) (default 0):
    $ openssl req -new -x509 -days 3650 -key Schluessel/vpn-cakey.pem -out Zertifikate/vpn-ca.pem -set_serial 1

    Alternativ, die beiden letzten Befehle in einem: Allerdings kann hier nicht AES256 als Verschlüsselung des privaten Schlüssels (jedenfalls ist mir kein entsprechender Parameter bekannt) - stattdessen wird standardmäßig DES3 gewählt:
    $ openssl req -x509 -days 3650 -newkey rsa:4096 -keyout Schluessel/vpn-cakey.pem -out Zertifikate/vpn-ca.pem -set_serial 1

  2. Erzeugen des server-Schlüssels

    4096bit RSA-Serverschlüssel ohne Kennwort (-nodes) erstellen (-newkey rsa:4096 -keyout Schluessel/serverkey.pem) & Anfrage für ein 10a gültiges Zertifikat für diesen Schlüssel erstellen (req -out Zertifikate/servercsr.pem -days 3650):
    $ openssl req -out Zertifikate/servercsr.pem -days 3650 -newkey rsa:4096 -keyout Schluessel/serverkey.pem -nodes

    10 gültiges X.509 Serverzertifikat aus Zertifikatsanfrage erstellen (x509 -req -in certs/servercsr.pem -out certs/servercert.pem -days 3650), von der root CA signieren (-CA vpn-ca.pem -CAkey private/vpn-cakey.pem). Dabei wird vpn-ca.srl automatisch hoch gezählt:
    $ openssl x509 -req -in Zertifikate/servercsr.pem -out Zertifikate/servercert.pem -days 3650 -CA Zertifikate/vpn-ca.pem -CAkey Schluessel/vpn-cakey.pem

    Zertifikatsanfrage kann gelöscht werden:
    $ rm Zertifikate/servercsr.pem

  3. Erzeugen eines Klienten-Schlüssels

    Klienten-Schlüssel erstellen & Zertifikatsanfrage für Klienten-Schlüssel:
    $ openssl req -out Zertifikate/klient1csr.pem -days 3650 -newkey rsa:4096 -keyout Schluessel/klient1key.pem -nodes

    Clientzertifikat aus Zertifikatsanfrage erstellen:
    $ openssl x509 -req -in Zertifikate/klient1csr.pem -out Zertifikate/klient1cert.pem -days 3650 -CA Zertifikate/vpn-ca.pem -CAkey Schluessel/vpn-cakey.pem

    Zertifikatsanfrage kann gelöscht werden:
    $ rm Zertifikate/klient1csr.pem

  4. Zufallszahlen "Diffie-Hellman Parameter" erzeugen

    $ openssl dhparam -out dh1024.pem 1024

Anzeigen von Zertifikaten

Selbsterstelltes Zertifikat anzeigen

Ein mit obiger Anleitung erzeugtes Zertifikat kann man sich wie folgt anzeigen lassen:
$ openssl x509 -in Zertifikate/klient1cert.pem -noout -text

https-Zertifikat anzeigen

Das funktioniert übrigens auch mit TLS-Zertifikaten, die von https genutzt werden. Beispielsweise kann man sich das Zertifikat von https://www.heise.de/ wie folgt anzeigen lassen:

openssl s_client -connect www.heise.de:https

Für SNI server wird immer das default-Zertfikat zurückgegeben. Möchte man das Zertifikat einer spezifischen Domäne, muss man sie nochmals spezifizieren:

openssl s_client -connect map.hamburg.freifunk.net:https -servername map.hamburg.freifunk.net

Bevor die Verbindung mangels Eingaben wieder abbricht, hohlt man sich den Inhalt von /

GET /

In den angezeigten Informationen verbirgt sich das eigentliche Zertikiat im PEM-Format zwischen -----BEGIN CERTIFICATE----- und -----END CERTIFICATE-----. Um es für den Anwender lesbar zu machen makiert und kopiert man diesen Text (inkl. -----BEGIN CERTIFICATE----- und -----END CERTIFICATE-----) und speichert ihn in eine Datei:

echo "hier den in die Zwischenablage kopierten Zertifikatstext einfügen" > heise.pem

Nun lässt man sich das Zertifikiat von openssl in Klartext umwandeln:

openssl x509 -in heise.pem -noout -text
Diese Seite wurde zuletzt am 6. Dezember 2015 um 23:02 Uhr geändert. Diese Seite wurde bisher 4.524 mal abgerufen.