OpenSSL ist ein in C entwickeltes Kryptographiewerkzeug für das Secure Socket Layer (SSL). Es enthält das Mehrzweck-Befehlszeilenwerkzeug /usr/bin/openssl. Das Programm eignet sich für kryptographische Operationen wie:
- Erzeugung von RSA-, DH- und DSA-Schlüssel-Parametern
- Erzeugung von X.509-Zertifikaten, CSRs und CRLs
- Berechnung von kryptographischen Einweg-Hashfunktionen
- Ver- und Entschlüsselung mit Chiffren
- Prüfung von SSL-/TLS-Clients und -Servern
- Bearbeitung von S/MIME-signierter oder verschlüsselter E-Mail
Welche Version ist auf dem Raspberry Pi installiert? Ein
apt-cache policy openssl
liefert folgende Ausgabe:
1 2 3 4 5 6 7 8 9 |
openssl: Installiert: 1.1.1d-0+deb10u6+rpt1 Installationskandidat: 1.1.1d-0+deb10u6+rpt1 Versionstabelle: *** 1.1.1d-0+deb10u6+rpt1 500 500 http://archive.raspberrypi.org/debian buster/main armhf Packages 100 /var/lib/dpkg/status 1.1.1d-0+deb10u6 500 500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages |
oder ein
openssl version liefert:
OpenSSL 1.1.1d 10 Sep 2019
Für die neue Version 3.0 gibt es schon seit Juli ein Release-Kandidat, aber noch kein Debian Package. Dann arbeiten wir mal mit der installierten Version, und erstellen uns zuerst mal einen private Key und dann ein selbst signiertes Zertifikat.
Wir können die Hilfe des OpenSSL Programms wie folgt ausgeben:
openssl help
Wir bekommen diese Anleitung:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Standard commands asn1parse ca ciphers cms crl crl2pkcs7 dgst dhparam dsa dsaparam ec ecparam enc engine errstr gendsa genpkey genrsa help list nseq ocsp passwd pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand rehash req rsa rsautl s_client s_server s_time sess_id smime speed spkac srp storeutl ts verify version x509 Message Digest commands (see the `dgst' command for more details) blake2b512 blake2s256 gost md4 md5 rmd160 sha1 sha224 sha256 sha3-224 sha3-256 sha3-384 sha3-512 sha384 sha512 sha512-224 sha512-256 shake128 shake256 sm3 Cipher commands (see the `enc' command for more details) aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb aria-128-cbc aria-128-cfb aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1 aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8 aria-256-ctr aria-256-ecb aria-256-ofb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 seed seed-cbc seed-cfb seed-ecb seed-ofb sm4-cbc sm4-cfb sm4-ctr sm4-ecb sm4-ofb |
So, nun wollen wir aber einen 2048-Bit RSA privaten Key, auf der Kommandozeile erstellen als Grundlage für die Zertifikate.
Wir erstellen uns zuerst ein eigenes neues leeres Verzeichnis und wechseln dahin:
mkdir zertifikate
cd zertifikate
Den Namen der Ausgabe-Datei (hier wenzlaff-klartext.key) wird hinter -out angegeben, den können wir natürlich durch einen eigenen Domain.key Name ersetzen. Wir generieren also eine RSA Key der Größe 2048-Bit und das ganze unverschlüsselt im Klartext:
openssl genrsa -out wenzlaff-klartext.key 2048
Nach ca. 3 Sekunden …
1 2 3 4 |
Generating RSA private key, 2048 bit long modulus (2 primes) ..+++++ .......................................................................................................................................................................................................+++++ e is 65537 (0x010001) |
erhalten wir nun den privaten key in der Datei: wenzlaff-klartext.key.
Denn können wir uns mal ausgeben mit
cat wenzlaff-klartext.key
1 2 3 4 5 |
-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAp6X2kkLm25/T8L2ntnukXBez7aIIxGMjN77g4w3aECdpdMaO ... ksS2cuRnc1oErw4iuNaK4n67BNS58xt0q3BVC4XnPOMT3O6aeDU= -----END RSA PRIVATE KEY----- |
Mit dem Parameter -des3 wird der Key verschlüsselt. Wir erzeugen uns nun einen verschlüsselten privaten Key, wieder mit 2048-Bit und RSA:
openssl genrsa -des3 -out wenzlaff.key 2048
Jetzt werden wir nach einem Passwort für den privaten Key gefragt. Dies müssen wir zweimal eingeben. Mit diesem wird dann der Key verschlüsselt. Also gut merken, wir brauchen ihn nachher noch.
Ausgabe:
1 2 3 4 5 6 |
Generating RSA private key, 2048 bit long modulus (2 primes) ........................................................+++++ ......+++++ e is 65537 (0x010001) Enter pass phrase for wenzlaff.key: Verifying - Enter pass phrase for wenzlaff.key: |
Wenn wir uns den Key wieder ausgeben mit cat wenzlaff.key
1 2 3 4 5 6 7 8 |
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,F44CCA6C27882653 VLKeHJQzXco3AwzQ8eGlS/xCybb1LdVddOQM3rLxXtqSXORO/eDJYvKAJEZZANIh … bu1R0meDGmdTomncJwPgZBoviwqOJurRHSUWsJcmnBG9DGvFTJjpUg== -----END RSA PRIVATE KEY----- |
Nun sehen wir in den ersten 3 Zeilen, das der Key mit DES-EDE3-CBC verschlüsselt worden ist. Diesen privaten Key müssen wir sicher aufbewahren und geheim halten.
Wir erstellen nun mit Hilfe des privaten Key eine Zertifikatsignierungsanforderung (Certificate Signing Request (CSR) oder Certification Request). Die CSR-Datei ist ein digitaler Antrag oder Formular, das neben den Antragsdaten auch einen öffentlichen Schlüssel bzw. Zertifikat (aus dem privaten Key) enthält.
Dieser CSR könnte dann zu einer Registrierungsstelle zur Überprüfung gesendet werden. Wenn die Antragsdaten und das Zertifikat zueinander passend und io sind, kann das Ergebnis an die Zertifizierungstelle (certification authority) gegeben werden. Diese signiert nun mit ihren privaten CA Schlüssel das Zertifikat, und stellt damit ein neues öffentliches Zertifikat aus. Damit wurde nun der öffentliche Schlüssel doppelt signiert, einmal von einem selbst und einmal von der CA. Dazu später mehr.
Das wollen wir aber erstmal nicht machen. Wir wollen einfach unser Zertifikat mit unseren privaten Key selbst signieren. Es kann genauso wie ein Zertifikat das von einer CA signiert wurde verwendet werden. Mit dem Unterschied, das eine warnung kommt, die besagt das dem Zertifikat nicht vertraut werden kann. Das ist aber für unsere Zwecke erst mal ok.
Wir erzeugen unsere CSR-Datei mit diesem Befehl:
openssl req -key wenzlaff.key -new -out wenzlaff.csr
Wir müssen dann einige Antragsdaten beantworten. Die wichtigste ist der Common Name, dort muss der „Fully Qualified Domain Name“, kurz FQDN eingetragen werden. Er bezeichnet die vollständige und eindeutige Adresse einer Internetpräsenz. Z.B. www.wenzlaff.de oder www.kleinhirn.eu. Er setzt sich aus dem Hostname und der Domain zusammen und wird verwendet, um spezifische Hosts im Internet zu lokalisieren und mittels Namensauflösung aufzurufen. Auf dem Raspberry Pi oder dem Mac kann man den Host z.B. mit
hostname -f
abfragen. Dies ist der Ablauf, erst das Passwort von dem privaten Key, den wir uns gemerkt haben eingeben und dann wie oben beschrieben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Enter pass phrase for wenzlaff.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Niedersachsen Locality Name (eg, city) []:Langenhagen Organization Name (eg, company) [Internet Widgits Pty Ltd]:TW-Soft Organizational Unit Name (eg, section) []:TW-Soft Common Name (e.g. server FQDN or YOUR name) []:www.wenzlaff.de Email Address []:info-anfrage@wenzlaff.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: |
Es wurde eine wenzlaff.csr (Base64-kodierter Zertifizierungsanfrage des öffentlichen Schlüssels, plus weitere Metadaten des Besitzers, an eine CA, umschlossen von „—–BEGIN CERTIFICATE REQUEST—–“ und „—–END CERTIFICATE REQUEST—–“ erzeugt. Dies kann mit cat wenzlaff.csr angeschaut bzw. ausgegeben werden.
Nun haben wir in der Datei wenzlaff.csr die CSR-Anforderung und den public Key.
Wir erzeugen uns ein selbst signiertes Zertifikat das ein Jahr gültig sein soll, mit unseren privaten Key (wenzlaff.key und Passwort) und der CSR-Datei (wenzlaff.csr) mit:
openssl x509 -signkey wenzlaff.key -in wenzlaff.csr -req -days 365 -out wenzlaff.crt
Ausgabe, nach der Passwort eingabe des privaten Keys:
1 2 3 4 |
Signature ok subject=C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de Getting Private key Enter pass phrase for wenzlaff.key: |
Das Ergebnis bzw. das Selbst-Signierte-Zertifikat finden wir dann in der wenzlaff.crt Datei.
Das Zertifikat können wir uns wie folgt als Text ansehen:
openssl x509 -text -noout -in wenzlaff.crt
Ausgabe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Certificate: Data: Version: 1 (0x0) Serial Number: 2a:e2:ff:d7:d8:16:ea:a3:75:8f:d0:56:2b:e9:5a:fd:d5:48:00:de Signature Algorithm: sha256WithRSAEncryption Issuer: C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de Validity Not Before: Jul 24 21:02:40 2021 GMT Not After : Jul 24 21:02:40 2022 GMT Subject: C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:ba:ec:16:f3:d6:24:48:b0:d2:74:b2:39:05:4b: da:48:58:c1:a0:f4:67:6f:bd:7a:a7:9d:b4:6e:4b: ed:ba:49:cc:95:a6:03:60:9d:b7:73:df:f4:04:6b: 4f:a0:41:65:19:f3:6d:d8:c6:17:6d:76:c0:9d:78: ... 5a:85:38:ce:cd:03:dd:83:34:8c:90:32:52:a4:25: 43:a9:b0:5f:26:13:67:a8:e0:d2:dc:4d:52:1e:ae: b8:8b:1c:4c:de:d7:ee:e7:19:42:c4:29:63:86:30: 2e:f4:09:b1:f1:19:e0:8b:b5:04:16:88:0a:82:7b: 65:4d:81:97:f7:41:18:0a:0b:ce:02:cb:c9:be:28: 2b:3e:cc:86:28:25:84:24:5e:86:b5:4d:fd:2e:b3: f9:06:37:14:d0:d9:61:18:75:51:db:8b:3b:21:f6: 0a:39:cf:b2:a0:b8:47:99:08:e3:92:59:97:a6:df: 14:73 Exponent: 65537 (0x10001) Signature Algorithm: sha256WithRSAEncryption 78:85:03:19:2d:3c:14:94:4c:60:06:3e:f0:aa:03:56:83:7c: 3d:c0:1a:db:98:5e:13:21:c7:6a:c2:60:e5:2a:dc:be:0c:0a: 8f:00:68:73:1a:aa:2e:5d:59:ee:74:7b:1e:91:10:43:52:1a: 9d:ba:ec:a9:f7:12:4d:01:33:e5:5d:34:12:5f:75:35:44:7d: ... 4a:36:45:08:85:b4:0d:d1:e5:d0:dd:11:45:9d:6e:08:de:7c: ce:60:31:e1:a0:ee:30:80:6e:5d:c6:23:74:d3:6c:d6:fb:f4: 17:3e:e4:34:2c:ec:83:d2:1f:86:7c:c4:bf:35:ad:a2:b6:fe: 37:0a:7b:06:ec:b9:7e:6e:2e:d0:60:ff:bd:7c:d2:10:76:54: 9a:7f:95:03:53:45:80:ef:d9:0d:b5:ae:2d:9d:14:7b:34:4d: 2f:6d:4f:d7 |
Wir sehen nun die Serial Number und auch die Antragsdaten unter Issuer. Unter Validity finden wir die Gültigkeit des Zertifikats von einem Jahr. Unter DNS finden wir den übergebenen FQDN.
Wir können aber auch eine eigene selbst-signierte CA nutzen, um unseren CSR mit dieser Root CA zu signieren. Diese Selbst-Signierte-Root CA Zertifikat können wir dann lokal im Browser installieren.
Das hört sich ja gut an.
Also erste eine eigenen Root CA erstellen und selbst signieren und dann unser CSR signieren.
Zuerst brauchen wir einen privaten RSA Key (2048-Bit), der 5 Jahre (-days 1825) gültig sein soll (rootCA.key) und das Selbst-Signierte-Root-CA-Zerfifikat (rootCA.crt)
openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt
Ausgabe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Generating a RSA private key ...............+++++ .........+++++ writing new private key to 'rootCA.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Niedersachsen Locality Name (eg, city) []:Langenhagen Organization Name (eg, company) [Internet Widgits Pty Ltd]:TW-Soft Root-CA Organizational Unit Name (eg, section) []:TW-Soft Root-CA Common Name (e.g. server FQDN or YOUR name) []:pi-zero Email Address []:info-anfrage@wenzlaff.de |
Zum signieren des csr mit der Root-CA brauchen wir eine Konfigurations-Datei mit Namen wenzlaff.ext und folgenden Inhalt:
1 2 3 4 5 |
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE subjectAltName = @alt_names [alt_names] DNS.1 = www.wenzlaff.de |
Der DNS.1 Eintrag muss den Domain Name der Webseite enthalten.
Nun können wir unseren wenzlaff.csr Antrag mit der Root-CA-Zertifikat für ein Jahr und den privaten Key signieren:
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in wenzlaff.csr -out wenzlaff.crt -days 365 -CAcreateserial -extfile wenzlaff.ext
Ausgabe:
1 2 3 4 |
Signature ok subject=C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de Getting CA Private Key Enter pass phrase for rootCA.key: |
Das Ergebnis, das selbst signierte CSR steht im wenzlaff.crt File und ist nun von einer eigenen Root CA (selbst signiert) signiert. Cool, das wollen wir uns gleich mal anschauen:
openssl x509 -text -noout -in wenzlaff.crt
Ergebnis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Certificate: Data: Version: 3 (0x2) Serial Number: 4e:e7:42:9c:23:c7:f9:b3:d1:57:eb:80:50:62:fb:a8:7b:4b:70:e4 Signature Algorithm: sha256WithRSAEncryption Issuer: C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft Root-CA, OU = TW-Soft Root-CA, CN = pi-zero, emailAddress = info-anfrage@wenzlaff.de Validity Not Before: Jul 24 21:10:07 2021 GMT Not After : Jul 24 21:10:07 2022 GMT Subject: C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:ba:ec:16:f3:d6:24:48:b0:d2:74:b2:39:05:4b: da:48:58:c1:a0:f4:67:6f:bd:7a:a7:9d:b4:6e:4b: ed:ba:49:cc:95:a6:03:60:9d:b7:73:df:f4:04:6b: 4f:a0:41:65:19:f3:6d:d8:c6:17:6d:76:c0:9d:78: 52:fc:a0:20:09:1c:49:95:91:69:17:86:17:22:68: c1:c0:35:92:5e:f3:45:56:c4:66:f7:55:18:7d:1e: ... 43:a9:b0:5f:26:13:67:a8:e0:d2:dc:4d:52:1e:ae: b8:8b:1c:4c:de:d7:ee:e7:19:42:c4:29:63:86:30: 2e:f4:09:b1:f1:19:e0:8b:b5:04:16:88:0a:82:7b: 65:4d:81:97:f7:41:18:0a:0b:ce:02:cb:c9:be:28: 2b:3e:cc:86:28:25:84:24:5e:86:b5:4d:fd:2e:b3: f9:06:37:14:d0:d9:61:18:75:51:db:8b:3b:21:f6: 0a:39:cf:b2:a0:b8:47:99:08:e3:92:59:97:a6:df: 14:73 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:6A:CB:B6:40:EA:2E:47:D8:6B:9D:4C:A4:ED:33:DC:6E:B1:D8:C3:E7 X509v3 Basic Constraints: CA:FALSE X509v3 Subject Alternative Name: DNS:pi-zero Signature Algorithm: sha256WithRSAEncryption 3f:bb:b6:69:cf:e5:69:63:62:41:3c:b8:a5:d5:a6:71:f0:20: 27:c5:37:b4:e8:10:17:a6:52:d5:ea:5b:fb:39:f1:f3:6d:87: d3:51:cd:a4:ca:23:52:20:2b:3c:3a:24:56:3c:07:69:34:12: ... 8b:ed:e1:89:65:a7:b6:a8:b5:a1:a4:ca:c3:cb:2b:e9:98:87: 47:a9:f8:a2:e9:e6:9f:91:54:78:be:ec:5c:10:9c:b1:0b:a3: e4:11:75:c8:c2:b6:50:04:9b:50:bf:e3:63:39:04:bf:bb:e4: fc:02:b3:8b:e4:62:f2:2c:7d:37:3f:25:35:7b:4d:f2:e9:cf: fe:d9:01:6a:a2:c7:2d:b7:e2:e6:52:aa:01:ee:55:d0:57:e2: ff:67:14:8f:0d:ab:9b:af:35:4d:0e:15:c2:15:32:de:62:39: cd:b7:23:07:8f:df:e5:21:f4:9b:0a:89:10:56:d5:eb:6a:7e: b7:4d:c8:a0:6f:e6:1f:e0:2e:4a:63:5e:ba:e7:c5:4a:8e:02: 7b:19:99:ab |
In Zeile 7 sehen wir die Signatur der eigenen Root-CA die das Zertifikat signiert hat. Und in Zeile 11 mein Zertifikat.
Und auch gleich noch in das DER-Format umwandeln. DER steht für Distinguished Encoding Rules. Bei einer .der-Datei handelt es sich um die binäre Form der Base64-kodierten .pem-Datei. Neben .der können entsprechende Zertifikate auch mit der Endung .cer existieren, vor allem unter Windows. Neben Windows kommen Zertifikate im DER-Format auch unter Java zum Einsatz. Dieses Format unterstützt die Speicherung eines einzelnen Zertifikats. Private Schlüssel oder der Zertifizierungspfad können mit diesem Format nicht gespeichert werden.
openssl x509 -in wenzlaff.crt -outform der -out wenzlaff.der
Und auch in das PFX oder P12 Format. Der PKCS#12-Standard ist in RFC 7292 beschrieben. Das binäre Format kann neben dem Zertifikat auch alle Zertifikate des Zertifizierungspfads und zudem den privaten Schlüssel enthalten. Alles in einer Datei. Darüber hinaus ist es möglich die Datei passwortgeschützt zu speichern. Als Dateiendungen kommen .pfx oder .p12 zum Einsatz. Dieses Format wird oft zum Import und Export von Zertifikaten und privaten Schlüsseln unter Windows (MSIIS) verwendet.
Es wird der private Key und das Zertifikate zusammen in ein PKCS12 File geschrieben.
openssl pkcs12 -inkey wenzlaff.key -in wenzlaff.crt -export -out wenzlaff.pfx
oder mit p12 Extension.
Für den Import im eigenen E-Mail Client fügt man den privaten Schlüssel und das signiertes Zertifikat zu einer PKCS12-Datei „wenzlaff.p12″ zusammen. Diese passwortgeschützte Datei kann in allen E-Mail Clients importiert werden und sollte sicher verwahrt werden.
openssl pkcs12 -inkey wenzlaff.key -in wenzlaff.crt -export -out wenzlaff.p12
Oder wir wandeln von PFX nach PEM, da werden wir auch nach dem Passwort gefragt, und erhalten eine druckbare PEM Datei mit dem privaten Key!
openssl pkcs12 -in wenzlaff.pfx -out wenzlaff.pem -nodes
Wenn wir uns das Zertifikat aus der wenzlaff.pem Datei mit cat wenzlaff.pem anschauen, sehen wir das Zertifikat, die Antragsdaten und den privaten Key:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Bag Attributes localKeyID: B9 96 E3 5E 36 81 91 7B 70 B5 D2 5A D9 11 50 F3 13 26 FD 3F subject=C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de issuer=C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft Root-CA, OU = TW-Soft Root-CA, CN = pi-zero, emailAddress = info-anfrage@wenzlaff.de -----BEGIN CERTIFICATE----- MIIEHjCCAwagAwIBAgIUTudCnCPH+bPRV+uAUGL7qHtLcOQwDQYJKoZIhvcNAQEL BQAwgaoxCzAJBgNVBAYTAkRFMRYwFAYDVQQIDA1OaWVkZXJzYWNoc2VuMRQwEgYD VQQHDAtMYW5nZW5oYWdlbjEYMBYGA1UECgwPVFctU29mdCBSb290LUNBMRgwFgYD VQQLDA9UVy1Tb2Z0IFJvb3QtQ0ExEDAOBgNVBAMMB3BpLXplcm8xJzAlBgkqhkiG 9w0BCQEWGGluZm8tYW5mcmFnZUB3ZW56bGFmZi5kZTAeFw0yMTA3MjQyMTEwMDda ... bkvtuknMlaYDYJ23c9/0BGtPoEFlGfNt2MYXbXbAnXhS/KAgCRxJlZFpF4YXImjB wDWSXvNFVsRm91UYfR68Ea4qFJon2JtjGke63lnnIsbkEriUWs2htMdjIg2FGs3P Q2kGQRajgRDLZYpahTjOzQPdgzSMkDJSpCVDqbBfJhNnqODS3E1SHq64ixxM3tfu 5xlCxCljhjAu9Amx8Rngi7UEFogKgntlTYGX90EYCgvOAsvJvigrPsyGKCWEJF6G tU39LrP5BjcU0NlhGHVR24s7IfYKOc+yoLhHmQjjklmXpt8UcwIDAQABo0IwQDAf BgNVHSMEGDAWgBRqy7ZA6i5H2GudTKTtM9xusdjD5zAJBgNVHRMEAjAAMBIGA1Ud EQQLMAmCB3BpLXplcm8wDQYJKoZIhvcNAQELBQADggEBAD+7tmnP5WljYkE8uKXV pnHwICfFN7ToEBemUtXqW/s58fNth9NRzaTKI1IgKzw6JFY8B2k0Em11rsx0aiII zGYB4VGuR4r+NHQlzzWUu74qK831uMsOHiMHjEwIBnBXjt6DfvM9ekEkCcfr04vt 4Yllp7aotaGkysPLK+mYh0ep+KLp5p+RVHi+7FwQnLELo+QRdcjCtlAEm1C/42M5 BL+75PwCs4vkYvIsfTc/JTV7TfLpz/7ZAWqixy234uZSqgHuVdBX4v9nFI8Nq5uv NU0OFcIVMt5iOc23IweP3+Uh9JsKiRBW1etqfrdNyKBv5h/gLkpjXrrnxUqOAnsZ mas= -----END CERTIFICATE----- Bag Attributes localKeyID: B9 96 E3 5E 36 81 91 7B 70 B5 D2 5A D9 11 50 F3 13 26 FD 3F Key Attributes: <No Attributes> -----BEGIN PRIVATE KEY----- MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC67Bbz1iRIsNJ0 sjkFS9pIWMGg9GdvvXqnnbRuS+26ScyVpgNgnbdz3/QEa0+gQWUZ823YxhdtdsCd ... /2OMe3MH6z4UojBWmEWthrT92NECgYEA0ogyL7Vixq9l3DY7q1sifd7O8amnLKDq Xirx/7v1Lz9tpSyhLqf4/uJKSC96K+fjdQaPM/tMzh5yZtdPNg4FQqsMBffZO7Am bBuR7k0GsatqkFVeizx0riX/JMrhrAwXE0uYu0nJpcCzWGxPBwpdfAfQfn4f09SU /k52hTHvagMCgYEAtIiqoO7J7pqdilZwTT7Gj6fGrzcAJ5kYFMeD1nAub7ohuyZr os0dK7Jrfhpj1AUldi6Z5WZyodPWeXrAzSTdLKY4nrNNOKpadqXsOBZxztbQUoBi nXdPuXqBiw7JgZL9JSMf8x+N/VOuJT5FN5aDpB6HQLPrwbOxZHubzC6AnrECgYAz L8Xz74fqgq6jUdREH05NiCSMgRESOrWA27Qm104PhL5l0GoH6/MQFXi2AEUV87VL uKKMoubTnnd2JZcur038HZY4xT/d0UAmPLXIWJXuEJ1CJl9sPvCnfrl/+ovPxsi9 ej3SG2iZkjaIoxy7u3trMoMwnf2jBSaMhgsu6ysofQKBgQDEczXu+EGcIc4WhQ4g J99fK5BsDqIBNTdDkhar4bjWJ/3Qcgqc0mb1jWzeXin4UE1tC4VtyIkGdyOlKsyv rhcV2LOdOeJTPAAOdAB4KYhke2hRiOjVOZW5DqZh/GyRJ91rXmghMxbPLyFVOd0I uvfOLYUDBboP2xdNTffglqC52w== -----END PRIVATE KEY----- |
Das PEM-Format ist sehr beliebt und wird auch häufig von Zertifizierungsstellen verwendet. Der Name PEM bedeutet Privacy Enhanced Mail. Es ist Base64 kodiert und kann neben dem reinen Zertifikat auch Intermediate-Zertifikate, Root-CAs und private Schlüssel beinhalten. Apache-Server (/etc/ssl/certs) und Open-Source-Software setzen oft auf das PEM-Format. Die Dateierweiterung .pem kommt meist zum Einsatz, wenn sowohl Zertifikate und der Privatschlüssel in einer Datei gespeichert werden. Darüber hinaus hat das PEM-Format auch noch folgende Dateiendungen: .cert, .cer, .crt oder .key.
So, das wars mit RSA nun das ganze mit eliptische Kurven. Welche gibt es auf dem System?
openssl ecparam -list_curves
Ausgabe der 88 Möglichkeiten in einer schönen Liste:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
secp112r1 : SECG/WTLS curve over a 112 bit prime field secp112r2 : SECG curve over a 112 bit prime field secp128r1 : SECG curve over a 128 bit prime field secp128r2 : SECG curve over a 128 bit prime field secp160k1 : SECG curve over a 160 bit prime field secp160r1 : SECG curve over a 160 bit prime field secp160r2 : SECG/WTLS curve over a 160 bit prime field secp192k1 : SECG curve over a 192 bit prime field secp224k1 : SECG curve over a 224 bit prime field secp224r1 : NIST/SECG curve over a 224 bit prime field secp256k1 : SECG curve over a 256 bit prime field secp384r1 : NIST/SECG curve over a 384 bit prime field secp521r1 : NIST/SECG curve over a 521 bit prime field prime192v1: NIST/X9.62/SECG curve over a 192 bit prime field prime192v2: X9.62 curve over a 192 bit prime field prime192v3: X9.62 curve over a 192 bit prime field prime239v1: X9.62 curve over a 239 bit prime field prime239v2: X9.62 curve over a 239 bit prime field prime239v3: X9.62 curve over a 239 bit prime field prime256v1: X9.62/SECG curve over a 256 bit prime field sect113r1 : SECG curve over a 113 bit binary field sect113r2 : SECG curve over a 113 bit binary field sect131r1 : SECG/WTLS curve over a 131 bit binary field sect131r2 : SECG curve over a 131 bit binary field sect163k1 : NIST/SECG/WTLS curve over a 163 bit binary field sect163r1 : SECG curve over a 163 bit binary field sect163r2 : NIST/SECG curve over a 163 bit binary field sect193r1 : SECG curve over a 193 bit binary field sect193r2 : SECG curve over a 193 bit binary field sect233k1 : NIST/SECG/WTLS curve over a 233 bit binary field sect233r1 : NIST/SECG/WTLS curve over a 233 bit binary field sect239k1 : SECG curve over a 239 bit binary field sect283k1 : NIST/SECG curve over a 283 bit binary field sect283r1 : NIST/SECG curve over a 283 bit binary field sect409k1 : NIST/SECG curve over a 409 bit binary field sect409r1 : NIST/SECG curve over a 409 bit binary field sect571k1 : NIST/SECG curve over a 571 bit binary field sect571r1 : NIST/SECG curve over a 571 bit binary field c2pnb163v1: X9.62 curve over a 163 bit binary field c2pnb163v2: X9.62 curve over a 163 bit binary field c2pnb163v3: X9.62 curve over a 163 bit binary field c2pnb176v1: X9.62 curve over a 176 bit binary field c2tnb191v1: X9.62 curve over a 191 bit binary field c2tnb191v2: X9.62 curve over a 191 bit binary field c2tnb191v3: X9.62 curve over a 191 bit binary field c2pnb208w1: X9.62 curve over a 208 bit binary field c2tnb239v1: X9.62 curve over a 239 bit binary field c2tnb239v2: X9.62 curve over a 239 bit binary field c2tnb239v3: X9.62 curve over a 239 bit binary field c2pnb272w1: X9.62 curve over a 272 bit binary field c2pnb304w1: X9.62 curve over a 304 bit binary field c2tnb359v1: X9.62 curve over a 359 bit binary field c2pnb368w1: X9.62 curve over a 368 bit binary field c2tnb431r1: X9.62 curve over a 431 bit binary field wap-wsg-idm-ecid-wtls1: WTLS curve over a 113 bit binary field wap-wsg-idm-ecid-wtls3: NIST/SECG/WTLS curve over a 163 bit binary field wap-wsg-idm-ecid-wtls4: SECG curve over a 113 bit binary field wap-wsg-idm-ecid-wtls5: X9.62 curve over a 163 bit binary field wap-wsg-idm-ecid-wtls6: SECG/WTLS curve over a 112 bit prime field wap-wsg-idm-ecid-wtls7: SECG/WTLS curve over a 160 bit prime field wap-wsg-idm-ecid-wtls8: WTLS curve over a 112 bit prime field wap-wsg-idm-ecid-wtls9: WTLS curve over a 160 bit prime field wap-wsg-idm-ecid-wtls10: NIST/SECG/WTLS curve over a 233 bit binary field wap-wsg-idm-ecid-wtls11: NIST/SECG/WTLS curve over a 233 bit binary field wap-wsg-idm-ecid-wtls12: WTLS curve over a 224 bit prime field Oakley-EC2N-3: IPSec/IKE/Oakley curve #3 over a 155 bit binary field. Not suitable for ECDSA. Questionable extension field! Oakley-EC2N-4: IPSec/IKE/Oakley curve #4 over a 185 bit binary field. Not suitable for ECDSA. Questionable extension field! brainpoolP160r1: RFC 5639 curve over a 160 bit prime field brainpoolP160t1: RFC 5639 curve over a 160 bit prime field brainpoolP192r1: RFC 5639 curve over a 192 bit prime field brainpoolP192t1: RFC 5639 curve over a 192 bit prime field brainpoolP224r1: RFC 5639 curve over a 224 bit prime field brainpoolP224t1: RFC 5639 curve over a 224 bit prime field brainpoolP256r1: RFC 5639 curve over a 256 bit prime field brainpoolP256t1: RFC 5639 curve over a 256 bit prime field brainpoolP320r1: RFC 5639 curve over a 320 bit prime field brainpoolP320t1: RFC 5639 curve over a 320 bit prime field brainpoolP384r1: RFC 5639 curve over a 384 bit prime field brainpoolP384t1: RFC 5639 curve over a 384 bit prime field brainpoolP512r1: RFC 5639 curve over a 512 bit prime field brainpoolP512t1: RFC 5639 curve over a 512 bit prime field SM2 : SM2 curve over a 256 bit prime field |
Welchen verwenden wir? secp384r1 das entspricht dann 7680 Bit größe in RSA oder secp521r1 mit 521-Bit, das währe dann 15360 Bits in RSA.
Aber nicht mehr heute, mit Java hatte ich das hier beschrieben oder für den Raspberry Pi hier …
PS: Natürlich werden alle hier veröffentlichen private/public Keys gelöscht und nicht verwendet 😉 Das währe dann ja auch kein privater Key 😉