{"id":17249,"date":"2021-07-24T23:47:57","date_gmt":"2021-07-24T21:47:57","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=17249"},"modified":"2021-07-26T20:06:12","modified_gmt":"2021-07-26T18:06:12","slug":"openssl","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=17249","title":{"rendered":"OpenSSL nicht nur mit dem Raspberry Pi oder wie k\u00f6nnen Zertifikate selbst signiert werden mit eigener selbst-signierter Root-CA?"},"content":{"rendered":"<p>OpenSSL ist ein in C entwickeltes Kryptographiewerkzeug f\u00fcr das Secure Socket Layer (SSL). Es enth\u00e4lt das Mehrzweck-Befehlszeilenwerkzeug \/usr\/bin\/openssl. Das Programm eignet sich f\u00fcr kryptographische Operationen wie: <\/p>\n<ul>\n<li>Erzeugung von RSA-, DH- und DSA-Schl\u00fcssel-Parametern<\/li>\n<li> Erzeugung von X.509-Zertifikaten, CSRs und CRLs<\/li>\n<li>Berechnung von kryptographischen Einweg-Hashfunktionen<\/li>\n<li>Ver- und Entschl\u00fcsselung mit Chiffren<\/li>\n<li> Pr\u00fcfung von SSL-\/TLS-Clients und -Servern<\/li>\n<li>Bearbeitung von S\/MIME-signierter oder verschl\u00fcsselter E-Mail<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/07\/OpenSSL.png\" alt=\"\" width=\"3974\" height=\"2708\" class=\"aligncenter size-full wp-image-17250\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/07\/OpenSSL.png 3974w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/07\/OpenSSL-300x204.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/07\/OpenSSL-1024x698.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/07\/OpenSSL-768x523.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/07\/OpenSSL-1536x1047.png 1536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/07\/OpenSSL-2048x1396.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Welche Version ist auf dem Raspberry Pi installiert? Ein<!--more--><\/p>\n<p><strong>apt-cache policy openssl<\/strong><\/p>\n<p>liefert folgende Ausgabe:<\/p>\n<pre class=\"minimize:true lang:default decode:true \" >openssl:\r\n  Installiert:           1.1.1d-0+deb10u6+rpt1\r\n  Installationskandidat: 1.1.1d-0+deb10u6+rpt1\r\n  Versionstabelle:\r\n *** 1.1.1d-0+deb10u6+rpt1 500\r\n        500 http:\/\/archive.raspberrypi.org\/debian buster\/main armhf Packages\r\n        100 \/var\/lib\/dpkg\/status\r\n     1.1.1d-0+deb10u6 500\r\n        500 http:\/\/raspbian.raspberrypi.org\/raspbian buster\/main armhf Packages<\/pre>\n<p>oder ein<br \/>\n<strong>openssl version<\/strong> liefert:<\/p>\n<p>OpenSSL 1.1.1d  10 Sep 2019<\/p>\n<p>F\u00fcr 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.<\/p>\n<p>Wir k\u00f6nnen die Hilfe des OpenSSL Programms wie folgt ausgeben:<\/p>\n<p><strong>openssl help<\/strong><\/p>\n<p>Wir bekommen diese Anleitung:<\/p>\n<pre class=\"minimize:true lang:default decode:true \" >\r\nStandard commands\r\nasn1parse         ca                ciphers           cms\r\ncrl               crl2pkcs7         dgst              dhparam\r\ndsa               dsaparam          ec                ecparam\r\nenc               engine            errstr            gendsa\r\ngenpkey           genrsa            help              list\r\nnseq              ocsp              passwd            pkcs12\r\npkcs7             pkcs8             pkey              pkeyparam\r\npkeyutl           prime             rand              rehash\r\nreq               rsa               rsautl            s_client\r\ns_server          s_time            sess_id           smime\r\nspeed             spkac             srp               storeutl\r\nts                verify            version           x509\r\n\r\nMessage Digest commands (see the `dgst' command for more details)\r\nblake2b512        blake2s256        gost              md4\r\nmd5               rmd160            sha1              sha224\r\nsha256            sha3-224          sha3-256          sha3-384\r\nsha3-512          sha384            sha512            sha512-224\r\nsha512-256        shake128          shake256          sm3\r\n\r\nCipher commands (see the `enc' command for more details)\r\naes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb\r\naes-256-cbc       aes-256-ecb       aria-128-cbc      aria-128-cfb\r\naria-128-cfb1     aria-128-cfb8     aria-128-ctr      aria-128-ecb\r\naria-128-ofb      aria-192-cbc      aria-192-cfb      aria-192-cfb1\r\naria-192-cfb8     aria-192-ctr      aria-192-ecb      aria-192-ofb\r\naria-256-cbc      aria-256-cfb      aria-256-cfb1     aria-256-cfb8\r\naria-256-ctr      aria-256-ecb      aria-256-ofb      base64\r\nbf                bf-cbc            bf-cfb            bf-ecb\r\nbf-ofb            camellia-128-cbc  camellia-128-ecb  camellia-192-cbc\r\ncamellia-192-ecb  camellia-256-cbc  camellia-256-ecb  cast\r\ncast-cbc          cast5-cbc         cast5-cfb         cast5-ecb\r\ncast5-ofb         des               des-cbc           des-cfb\r\ndes-ecb           des-ede           des-ede-cbc       des-ede-cfb\r\ndes-ede-ofb       des-ede3          des-ede3-cbc      des-ede3-cfb\r\ndes-ede3-ofb      des-ofb           des3              desx\r\nrc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc\r\nrc2-cfb           rc2-ecb           rc2-ofb           rc4\r\nrc4-40            seed              seed-cbc          seed-cfb\r\nseed-ecb          seed-ofb          sm4-cbc           sm4-cfb\r\nsm4-ctr           sm4-ecb           sm4-ofb\r\n<\/pre>\n<p>So, nun wollen wir aber einen 2048-Bit RSA privaten Key, auf der Kommandozeile erstellen als Grundlage f\u00fcr die Zertifikate.<br \/>\nWir erstellen uns zuerst ein eigenes neues leeres Verzeichnis und wechseln dahin:<\/p>\n<p><strong>mkdir zertifikate<br \/>\ncd zertifikate<\/strong><\/p>\n<p>Den Namen der Ausgabe-Datei (hier wenzlaff-klartext.key) wird hinter -out angegeben, den k\u00f6nnen wir nat\u00fcrlich durch einen eigenen Domain.key Name ersetzen. Wir generieren also eine RSA Key der Gr\u00f6\u00dfe 2048-Bit und das ganze unverschl\u00fcsselt im Klartext:<\/p>\n<p><strong>openssl genrsa -out wenzlaff-klartext.key 2048<\/strong><\/p>\n<p>Nach ca. 3 Sekunden &#8230;<\/p>\n<pre class=\"lang:default decode:true \" >Generating RSA private key, 2048 bit long modulus (2 primes)\r\n..+++++\r\n.......................................................................................................................................................................................................+++++\r\ne is 65537 (0x010001)\r\n<\/pre>\n<p>erhalten wir nun den privaten key in der Datei: <strong>wenzlaff-klartext.key<\/strong>.<br \/>\nDenn k\u00f6nnen wir uns mal ausgeben mit<br \/>\n<strong><br \/>\ncat wenzlaff-klartext.key<\/strong><\/p>\n<pre class=\"lang:default decode:true \" >\r\n\r\n-----BEGIN RSA PRIVATE KEY-----\r\nMIIEogIBAAKCAQEAp6X2kkLm25\/T8L2ntnukXBez7aIIxGMjN77g4w3aECdpdMaO\r\n...\r\nksS2cuRnc1oErw4iuNaK4n67BNS58xt0q3BVC4XnPOMT3O6aeDU=\r\n-----END RSA PRIVATE KEY-----\r\n<\/pre>\n<p>Mit dem Parameter <strong>-des3<\/strong> wird der Key verschl\u00fcsselt.  Wir erzeugen uns nun einen verschl\u00fcsselten privaten Key, wieder mit 2048-Bit und RSA:<\/p>\n<p><strong>openssl genrsa -des3 -out wenzlaff.key 2048<\/strong><\/p>\n<p>Jetzt werden wir nach einem Passwort f\u00fcr den privaten Key gefragt. Dies m\u00fcssen wir zweimal eingeben. Mit diesem wird dann der Key verschl\u00fcsselt. Also gut merken, wir brauchen ihn nachher noch.<\/p>\n<p>Ausgabe:<\/p>\n<pre class=\"lang:default decode:true \" >Generating RSA private key, 2048 bit long modulus (2 primes)\r\n........................................................+++++\r\n......+++++\r\ne is 65537 (0x010001)\r\nEnter pass phrase for wenzlaff.key:\r\nVerifying - Enter pass phrase for wenzlaff.key:<\/pre>\n<p>Wenn wir uns den Key wieder ausgeben mit <strong>cat wenzlaff.key<\/strong><\/p>\n<pre class=\"lang:default decode:true \" >-----BEGIN RSA PRIVATE KEY-----\r\nProc-Type: 4,ENCRYPTED\r\nDEK-Info: DES-EDE3-CBC,F44CCA6C27882653\r\n\r\nVLKeHJQzXco3AwzQ8eGlS\/xCybb1LdVddOQM3rLxXtqSXORO\/eDJYvKAJEZZANIh\r\n\u2026\r\nbu1R0meDGmdTomncJwPgZBoviwqOJurRHSUWsJcmnBG9DGvFTJjpUg==\r\n-----END RSA PRIVATE KEY-----<\/pre>\n<p>Nun sehen wir in den ersten 3 Zeilen, das der Key mit DES-EDE3-CBC verschl\u00fcsselt worden ist. Diesen privaten Key m\u00fcssen wir sicher aufbewahren und geheim halten.<\/p>\n<p>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 \u00f6ffentlichen Schl\u00fcssel bzw. Zertifikat (aus dem privaten Key) enth\u00e4lt.<\/p>\n<p>Dieser CSR k\u00f6nnte dann zu einer Registrierungsstelle zur \u00dcberpr\u00fcfung 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\u00fcssel das Zertifikat, und stellt damit ein neues \u00f6ffentliches Zertifikat aus. Damit wurde nun der \u00f6ffentliche Schl\u00fcssel doppelt signiert, einmal von einem selbst und einmal von der CA. Dazu sp\u00e4ter mehr.<\/p>\n<p>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\u00fcr unsere Zwecke erst mal ok.<\/p>\n<p>Wir erzeugen unsere CSR-Datei mit diesem Befehl:<\/p>\n<p><strong>openssl req -key wenzlaff.key -new -out wenzlaff.csr<\/strong><\/p>\n<p>Wir m\u00fcssen dann einige Antragsdaten beantworten. Die wichtigste ist der Common Name, dort muss der \u201e<em>Fully Qualified Domain Name<\/em>\u201c, kurz <strong>FQDN<\/strong> eingetragen werden. Er bezeichnet die vollst\u00e4ndige und eindeutige Adresse einer Internetpr\u00e4senz. 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\u00f6sung aufzurufen. Auf dem Raspberry Pi oder dem Mac kann man den Host z.B. mit <\/p>\n<p><strong>hostname -f<\/strong><\/p>\n<p>abfragen. Dies ist der Ablauf, erst das Passwort von dem privaten Key, den wir uns gemerkt haben eingeben und dann wie oben beschrieben:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nEnter pass phrase for wenzlaff.key:\r\nYou are about to be asked to enter information that will be incorporated\r\ninto your certificate request.\r\nWhat you are about to enter is what is called a Distinguished Name or a DN.\r\nThere are quite a few fields but you can leave some blank\r\nFor some fields there will be a default value,\r\nIf you enter '.', the field will be left blank.\r\n-----\r\nCountry Name (2 letter code) [AU]:DE\r\nState or Province Name (full name) [Some-State]:Niedersachsen\r\nLocality Name (eg, city) []:Langenhagen\r\nOrganization Name (eg, company) [Internet Widgits Pty Ltd]:TW-Soft\r\nOrganizational Unit Name (eg, section) []:TW-Soft\r\nCommon Name (e.g. server FQDN or YOUR name) []:www.wenzlaff.de\r\nEmail Address []:info-anfrage@wenzlaff.de\r\n\r\nPlease enter the following 'extra' attributes\r\nto be sent with your certificate request\r\nA challenge password []:\r\nAn optional company name []:\r\n<\/pre>\n<p>Es wurde eine <strong>wenzlaff.csr<\/strong> (Base64-kodierter Zertifizierungsanfrage des \u00f6ffentlichen Schl\u00fcssels, plus weitere Metadaten des Besitzers, an eine CA, umschlossen von \u201e&#8212;&#8211;BEGIN CERTIFICATE REQUEST&#8212;&#8211;\u201c und \u201e&#8212;&#8211;END CERTIFICATE REQUEST&#8212;&#8211;\u201c erzeugt. Dies kann mit <strong>cat wenzlaff.csr<\/strong> angeschaut bzw. ausgegeben werden.<\/p>\n<p>Nun haben wir in der Datei <strong>wenzlaff.csr<\/strong> die CSR-Anforderung und den public Key. <\/p>\n<p>Wir erzeugen uns ein selbst signiertes Zertifikat das ein Jahr g\u00fcltig sein soll, mit unseren privaten Key (wenzlaff.key und Passwort) und der CSR-Datei (wenzlaff.csr) mit:<br \/>\n<strong><br \/>\nopenssl x509 -signkey wenzlaff.key -in wenzlaff.csr -req -days 365 -out wenzlaff.crt<\/strong><\/p>\n<p>Ausgabe, nach der Passwort eingabe des privaten Keys:<\/p>\n<pre class=\"lang:default decode:true \" >Signature ok\r\nsubject=C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de\r\nGetting Private key\r\nEnter pass phrase for wenzlaff.key:<\/pre>\n<p>Das Ergebnis bzw. das Selbst-Signierte-Zertifikat finden wir dann in der <strong>wenzlaff.crt<\/strong> Datei.<\/p>\n<p>Das Zertifikat k\u00f6nnen wir uns wie folgt als Text ansehen:<br \/>\n<strong><br \/>\nopenssl x509 -text -noout -in wenzlaff.crt<\/strong><\/p>\n<p>Ausgabe:<\/p>\n<pre class=\"minimize:true lang:default decode:true \" >\r\nCertificate:\r\n    Data:\r\n        Version: 1 (0x0)\r\n        Serial Number:\r\n            2a:e2:ff:d7:d8:16:ea:a3:75:8f:d0:56:2b:e9:5a:fd:d5:48:00:de\r\n        Signature Algorithm: sha256WithRSAEncryption\r\n        Issuer: C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de\r\n        Validity\r\n            Not Before: Jul 24 21:02:40 2021 GMT\r\n            Not After : Jul 24 21:02:40 2022 GMT\r\n        Subject: C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de\r\n        Subject Public Key Info:\r\n            Public Key Algorithm: rsaEncryption\r\n                RSA Public-Key: (2048 bit)\r\n                Modulus:\r\n                    00:ba:ec:16:f3:d6:24:48:b0:d2:74:b2:39:05:4b:\r\n                    da:48:58:c1:a0:f4:67:6f:bd:7a:a7:9d:b4:6e:4b:\r\n                    ed:ba:49:cc:95:a6:03:60:9d:b7:73:df:f4:04:6b:\r\n                    4f:a0:41:65:19:f3:6d:d8:c6:17:6d:76:c0:9d:78:\r\n                 ...\r\n                    5a:85:38:ce:cd:03:dd:83:34:8c:90:32:52:a4:25:\r\n                    43:a9:b0:5f:26:13:67:a8:e0:d2:dc:4d:52:1e:ae:\r\n                    b8:8b:1c:4c:de:d7:ee:e7:19:42:c4:29:63:86:30:\r\n                    2e:f4:09:b1:f1:19:e0:8b:b5:04:16:88:0a:82:7b:\r\n                    65:4d:81:97:f7:41:18:0a:0b:ce:02:cb:c9:be:28:\r\n                    2b:3e:cc:86:28:25:84:24:5e:86:b5:4d:fd:2e:b3:\r\n                    f9:06:37:14:d0:d9:61:18:75:51:db:8b:3b:21:f6:\r\n                    0a:39:cf:b2:a0:b8:47:99:08:e3:92:59:97:a6:df:\r\n                    14:73\r\n                Exponent: 65537 (0x10001)\r\n    Signature Algorithm: sha256WithRSAEncryption\r\n         78:85:03:19:2d:3c:14:94:4c:60:06:3e:f0:aa:03:56:83:7c:\r\n         3d:c0:1a:db:98:5e:13:21:c7:6a:c2:60:e5:2a:dc:be:0c:0a:\r\n         8f:00:68:73:1a:aa:2e:5d:59:ee:74:7b:1e:91:10:43:52:1a:\r\n         9d:ba:ec:a9:f7:12:4d:01:33:e5:5d:34:12:5f:75:35:44:7d:\r\n        ...\r\n         4a:36:45:08:85:b4:0d:d1:e5:d0:dd:11:45:9d:6e:08:de:7c:\r\n         ce:60:31:e1:a0:ee:30:80:6e:5d:c6:23:74:d3:6c:d6:fb:f4:\r\n         17:3e:e4:34:2c:ec:83:d2:1f:86:7c:c4:bf:35:ad:a2:b6:fe:\r\n         37:0a:7b:06:ec:b9:7e:6e:2e:d0:60:ff:bd:7c:d2:10:76:54:\r\n         9a:7f:95:03:53:45:80:ef:d9:0d:b5:ae:2d:9d:14:7b:34:4d:\r\n         2f:6d:4f:d7<\/pre>\n<p>Wir sehen nun die <strong>Serial Number<\/strong> und auch die Antragsdaten unter <strong>Issuer<\/strong>. Unter <strong>Validity<\/strong> finden wir die G\u00fcltigkeit des Zertifikats von einem Jahr. Unter DNS finden wir den \u00fcbergebenen FQDN.<\/p>\n<p>Wir k\u00f6nnen aber auch eine eigene selbst-signierte CA nutzen, um unseren CSR mit dieser Root CA zu signieren. Diese Selbst-Signierte-Root CA Zertifikat k\u00f6nnen wir dann lokal im Browser installieren.<\/p>\n<p>Das h\u00f6rt sich ja gut an. <\/p>\n<p>Also erste eine eigenen Root CA erstellen und selbst signieren und dann unser CSR signieren.<\/p>\n<p>Zuerst brauchen wir einen privaten RSA Key (2048-Bit), der 5 Jahre (-days 1825) g\u00fcltig sein soll (rootCA.key) und das Selbst-Signierte-Root-CA-Zerfifikat (rootCA.crt)<\/p>\n<p><strong>openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt<\/strong><\/p>\n<p>Ausgabe:<\/p>\n<pre class=\"minimize:true lang:default decode:true \" >Generating a RSA private key\r\n...............+++++\r\n.........+++++\r\nwriting new private key to 'rootCA.key'\r\nEnter PEM pass phrase:\r\nVerifying - Enter PEM pass phrase:\r\n-----\r\nYou are about to be asked to enter information that will be incorporated\r\ninto your certificate request.\r\nWhat you are about to enter is what is called a Distinguished Name or a DN.\r\nThere are quite a few fields but you can leave some blank\r\nFor some fields there will be a default value,\r\nIf you enter '.', the field will be left blank.\r\n-----\r\nCountry Name (2 letter code) [AU]:DE\r\nState or Province Name (full name) [Some-State]:Niedersachsen\r\nLocality Name (eg, city) []:Langenhagen\r\nOrganization Name (eg, company) [Internet Widgits Pty Ltd]:TW-Soft Root-CA\r\nOrganizational Unit Name (eg, section) []:TW-Soft Root-CA\r\nCommon Name (e.g. server FQDN or YOUR name) []:pi-zero\r\nEmail Address []:info-anfrage@wenzlaff.de<\/pre>\n<p>Zum signieren des csr mit der Root-CA brauchen wir eine Konfigurations-Datei mit Namen <strong>wenzlaff.ext<\/strong> und folgenden Inhalt:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nauthorityKeyIdentifier=keyid,issuer\r\nbasicConstraints=CA:FALSE\r\nsubjectAltName = @alt_names\r\n[alt_names]\r\nDNS.1 = www.wenzlaff.de<\/pre>\n<p>Der DNS.1 Eintrag muss den Domain Name der Webseite enthalten.<br \/>\nNun k\u00f6nnen wir unseren wenzlaff.csr Antrag mit der Root-CA-Zertifikat f\u00fcr ein Jahr und den privaten Key signieren:<\/p>\n<p><strong>openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in wenzlaff.csr -out wenzlaff.crt -days 365 -CAcreateserial -extfile wenzlaff.ext<\/strong><br \/>\nAusgabe:<\/p>\n<pre class=\"lang:default decode:true \" >Signature ok\r\nsubject=C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de\r\nGetting CA Private Key\r\nEnter pass phrase for rootCA.key:<\/pre>\n<p>Das Ergebnis, das selbst signierte CSR steht im <strong>wenzlaff.crt<\/strong> File und ist nun von einer eigenen Root CA (selbst signiert) signiert. Cool, das wollen wir uns gleich mal anschauen:<\/p>\n<p><strong>openssl x509 -text -noout -in wenzlaff.crt<\/strong><\/p>\n<p>Ergebnis:<\/p>\n<pre class=\"minimize:true lang:default decode:true \" >\r\nCertificate:\r\n    Data:\r\n        Version: 3 (0x2)\r\n        Serial Number:\r\n            4e:e7:42:9c:23:c7:f9:b3:d1:57:eb:80:50:62:fb:a8:7b:4b:70:e4\r\n        Signature Algorithm: sha256WithRSAEncryption\r\n        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\r\n        Validity\r\n            Not Before: Jul 24 21:10:07 2021 GMT\r\n            Not After : Jul 24 21:10:07 2022 GMT\r\n        Subject: C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de\r\n        Subject Public Key Info:\r\n            Public Key Algorithm: rsaEncryption\r\n                RSA Public-Key: (2048 bit)\r\n                Modulus:\r\n                    00:ba:ec:16:f3:d6:24:48:b0:d2:74:b2:39:05:4b:\r\n                    da:48:58:c1:a0:f4:67:6f:bd:7a:a7:9d:b4:6e:4b:\r\n                    ed:ba:49:cc:95:a6:03:60:9d:b7:73:df:f4:04:6b:\r\n                    4f:a0:41:65:19:f3:6d:d8:c6:17:6d:76:c0:9d:78:\r\n                    52:fc:a0:20:09:1c:49:95:91:69:17:86:17:22:68:\r\n                    c1:c0:35:92:5e:f3:45:56:c4:66:f7:55:18:7d:1e:\r\n                ...\r\n                    43:a9:b0:5f:26:13:67:a8:e0:d2:dc:4d:52:1e:ae:\r\n                    b8:8b:1c:4c:de:d7:ee:e7:19:42:c4:29:63:86:30:\r\n                    2e:f4:09:b1:f1:19:e0:8b:b5:04:16:88:0a:82:7b:\r\n                    65:4d:81:97:f7:41:18:0a:0b:ce:02:cb:c9:be:28:\r\n                    2b:3e:cc:86:28:25:84:24:5e:86:b5:4d:fd:2e:b3:\r\n                    f9:06:37:14:d0:d9:61:18:75:51:db:8b:3b:21:f6:\r\n                    0a:39:cf:b2:a0:b8:47:99:08:e3:92:59:97:a6:df:\r\n                    14:73\r\n                Exponent: 65537 (0x10001)\r\n        X509v3 extensions:\r\n            X509v3 Authority Key Identifier:\r\n                keyid:6A:CB:B6:40:EA:2E:47:D8:6B:9D:4C:A4:ED:33:DC:6E:B1:D8:C3:E7\r\n\r\n            X509v3 Basic Constraints:\r\n                CA:FALSE\r\n            X509v3 Subject Alternative Name:\r\n                DNS:pi-zero\r\n    Signature Algorithm: sha256WithRSAEncryption\r\n         3f:bb:b6:69:cf:e5:69:63:62:41:3c:b8:a5:d5:a6:71:f0:20:\r\n         27:c5:37:b4:e8:10:17:a6:52:d5:ea:5b:fb:39:f1:f3:6d:87:\r\n         d3:51:cd:a4:ca:23:52:20:2b:3c:3a:24:56:3c:07:69:34:12:\r\n        ...\r\n         8b:ed:e1:89:65:a7:b6:a8:b5:a1:a4:ca:c3:cb:2b:e9:98:87:\r\n         47:a9:f8:a2:e9:e6:9f:91:54:78:be:ec:5c:10:9c:b1:0b:a3:\r\n         e4:11:75:c8:c2:b6:50:04:9b:50:bf:e3:63:39:04:bf:bb:e4:\r\n         fc:02:b3:8b:e4:62:f2:2c:7d:37:3f:25:35:7b:4d:f2:e9:cf:\r\n         fe:d9:01:6a:a2:c7:2d:b7:e2:e6:52:aa:01:ee:55:d0:57:e2:\r\n         ff:67:14:8f:0d:ab:9b:af:35:4d:0e:15:c2:15:32:de:62:39:\r\n         cd:b7:23:07:8f:df:e5:21:f4:9b:0a:89:10:56:d5:eb:6a:7e:\r\n         b7:4d:c8:a0:6f:e6:1f:e0:2e:4a:63:5e:ba:e7:c5:4a:8e:02:\r\n         7b:19:99:ab<\/pre>\n<p>In Zeile 7 sehen wir die Signatur der eigenen Root-CA die das Zertifikat signiert hat. Und in Zeile 11 mein Zertifikat.<\/p>\n<p>Und auch gleich noch in das DER-Format umwandeln. DER steht f\u00fcr Distinguished Encoding Rules. Bei einer .der-Datei handelt es sich um die bin\u00e4re Form der Base64-kodierten .pem-Datei. Neben .der k\u00f6nnen 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\u00fctzt\u00a0die Speicherung eines einzelnen Zertifikats. Private Schl\u00fcssel oder der Zertifizierungspfad k\u00f6nnen mit diesem Format nicht gespeichert werden.<br \/>\n<strong><br \/>\nopenssl x509 -in wenzlaff.crt -outform der -out wenzlaff.der<\/strong><\/p>\n<p>Und auch in das PFX oder P12 Format. Der PKCS#12-Standard ist in RFC 7292 beschrieben. Das bin\u00e4re Format kann neben dem Zertifikat auch alle Zertifikate des Zertifizierungspfads und zudem den privaten Schl\u00fcssel enthalten. Alles in einer Datei. Dar\u00fcber hinaus ist es m\u00f6glich die\u00a0 Datei passwortgesch\u00fctzt zu speichern. Als Dateiendungen kommen .pfx oder .p12 zum Einsatz. Dieses Format wird oft zum Import und Export von Zertifikaten und privaten Schl\u00fcsseln unter Windows (MSIIS) verwendet.<\/p>\n<p>Es wird der private Key und das Zertifikate zusammen in ein PKCS12 File geschrieben.<\/p>\n<p><strong>openssl pkcs12 -inkey wenzlaff.key -in wenzlaff.crt -export -out wenzlaff.pfx<\/strong><\/p>\n<p>oder mit p12 Extension.<\/p>\n<p>F\u00fcr den Import im eigenen E-Mail Client f\u00fcgt man den privaten Schl\u00fcssel und das signiertes Zertifikat zu einer PKCS12-Datei \u201ewenzlaff.p12&#8243; zusammen. Diese passwortgesch\u00fctzte Datei kann in allen E-Mail Clients importiert werden und sollte sicher verwahrt werden. <\/p>\n<p><strong>openssl pkcs12 -inkey wenzlaff.key -in wenzlaff.crt -export -out wenzlaff.p12<\/strong><\/p>\n<p>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!<\/p>\n<p><strong>openssl pkcs12 -in wenzlaff.pfx -out wenzlaff.pem -nodes<\/strong><\/p>\n<p>Wenn wir uns das Zertifikat aus der <strong>wenzlaff.pem <\/strong>Datei mit <strong>cat wenzlaff.pem<\/strong> anschauen, sehen wir das Zertifikat, die Antragsdaten und den privaten Key:<\/p>\n<pre class=\"minimize:true lang:default decode:true \" >Bag Attributes\r\n    localKeyID: B9 96 E3 5E 36 81 91 7B 70 B5 D2 5A D9 11 50 F3 13 26 FD 3F\r\nsubject=C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft, OU = TW-Soft, CN = www.wenzlaff.de, emailAddress = info-anfrage@wenzlaff.de\r\n\r\nissuer=C = DE, ST = Niedersachsen, L = Langenhagen, O = TW-Soft Root-CA, OU = TW-Soft Root-CA, CN = pi-zero, emailAddress = info-anfrage@wenzlaff.de\r\n\r\n-----BEGIN CERTIFICATE-----\r\nMIIEHjCCAwagAwIBAgIUTudCnCPH+bPRV+uAUGL7qHtLcOQwDQYJKoZIhvcNAQEL\r\nBQAwgaoxCzAJBgNVBAYTAkRFMRYwFAYDVQQIDA1OaWVkZXJzYWNoc2VuMRQwEgYD\r\nVQQHDAtMYW5nZW5oYWdlbjEYMBYGA1UECgwPVFctU29mdCBSb290LUNBMRgwFgYD\r\nVQQLDA9UVy1Tb2Z0IFJvb3QtQ0ExEDAOBgNVBAMMB3BpLXplcm8xJzAlBgkqhkiG\r\n9w0BCQEWGGluZm8tYW5mcmFnZUB3ZW56bGFmZi5kZTAeFw0yMTA3MjQyMTEwMDda\r\n...\r\nbkvtuknMlaYDYJ23c9\/0BGtPoEFlGfNt2MYXbXbAnXhS\/KAgCRxJlZFpF4YXImjB\r\nwDWSXvNFVsRm91UYfR68Ea4qFJon2JtjGke63lnnIsbkEriUWs2htMdjIg2FGs3P\r\nQ2kGQRajgRDLZYpahTjOzQPdgzSMkDJSpCVDqbBfJhNnqODS3E1SHq64ixxM3tfu\r\n5xlCxCljhjAu9Amx8Rngi7UEFogKgntlTYGX90EYCgvOAsvJvigrPsyGKCWEJF6G\r\ntU39LrP5BjcU0NlhGHVR24s7IfYKOc+yoLhHmQjjklmXpt8UcwIDAQABo0IwQDAf\r\nBgNVHSMEGDAWgBRqy7ZA6i5H2GudTKTtM9xusdjD5zAJBgNVHRMEAjAAMBIGA1Ud\r\nEQQLMAmCB3BpLXplcm8wDQYJKoZIhvcNAQELBQADggEBAD+7tmnP5WljYkE8uKXV\r\npnHwICfFN7ToEBemUtXqW\/s58fNth9NRzaTKI1IgKzw6JFY8B2k0Em11rsx0aiII\r\nzGYB4VGuR4r+NHQlzzWUu74qK831uMsOHiMHjEwIBnBXjt6DfvM9ekEkCcfr04vt\r\n4Yllp7aotaGkysPLK+mYh0ep+KLp5p+RVHi+7FwQnLELo+QRdcjCtlAEm1C\/42M5\r\nBL+75PwCs4vkYvIsfTc\/JTV7TfLpz\/7ZAWqixy234uZSqgHuVdBX4v9nFI8Nq5uv\r\nNU0OFcIVMt5iOc23IweP3+Uh9JsKiRBW1etqfrdNyKBv5h\/gLkpjXrrnxUqOAnsZ\r\nmas=\r\n-----END CERTIFICATE-----\r\nBag Attributes\r\n    localKeyID: B9 96 E3 5E 36 81 91 7B 70 B5 D2 5A D9 11 50 F3 13 26 FD 3F\r\nKey Attributes: &lt;No Attributes&gt;\r\n-----BEGIN PRIVATE KEY-----\r\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC67Bbz1iRIsNJ0\r\nsjkFS9pIWMGg9GdvvXqnnbRuS+26ScyVpgNgnbdz3\/QEa0+gQWUZ823YxhdtdsCd\r\n...\r\n\/2OMe3MH6z4UojBWmEWthrT92NECgYEA0ogyL7Vixq9l3DY7q1sifd7O8amnLKDq\r\nXirx\/7v1Lz9tpSyhLqf4\/uJKSC96K+fjdQaPM\/tMzh5yZtdPNg4FQqsMBffZO7Am\r\nbBuR7k0GsatqkFVeizx0riX\/JMrhrAwXE0uYu0nJpcCzWGxPBwpdfAfQfn4f09SU\r\n\/k52hTHvagMCgYEAtIiqoO7J7pqdilZwTT7Gj6fGrzcAJ5kYFMeD1nAub7ohuyZr\r\nos0dK7Jrfhpj1AUldi6Z5WZyodPWeXrAzSTdLKY4nrNNOKpadqXsOBZxztbQUoBi\r\nnXdPuXqBiw7JgZL9JSMf8x+N\/VOuJT5FN5aDpB6HQLPrwbOxZHubzC6AnrECgYAz\r\nL8Xz74fqgq6jUdREH05NiCSMgRESOrWA27Qm104PhL5l0GoH6\/MQFXi2AEUV87VL\r\nuKKMoubTnnd2JZcur038HZY4xT\/d0UAmPLXIWJXuEJ1CJl9sPvCnfrl\/+ovPxsi9\r\nej3SG2iZkjaIoxy7u3trMoMwnf2jBSaMhgsu6ysofQKBgQDEczXu+EGcIc4WhQ4g\r\nJ99fK5BsDqIBNTdDkhar4bjWJ\/3Qcgqc0mb1jWzeXin4UE1tC4VtyIkGdyOlKsyv\r\nrhcV2LOdOeJTPAAOdAB4KYhke2hRiOjVOZW5DqZh\/GyRJ91rXmghMxbPLyFVOd0I\r\nuvfOLYUDBboP2xdNTffglqC52w==\r\n-----END PRIVATE KEY-----<\/pre>\n<p>Das PEM-Format ist sehr beliebt und wird auch h\u00e4ufig 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\u00fcssel 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\u00fcssel in einer Datei gespeichert werden. Dar\u00fcber hinaus hat das PEM-Format auch noch folgende Dateiendungen: .cert, .cer, .crt oder .key.<\/p>\n<p>So, das wars mit RSA nun das ganze mit eliptische Kurven. Welche gibt es auf dem System?<\/p>\n<p><strong>openssl ecparam -list_curves<\/strong><\/p>\n<p>Ausgabe der 88 M\u00f6glichkeiten in einer sch\u00f6nen Liste:<\/p>\n<pre class=\"minimize:true lang:default decode:true \" >secp112r1 : SECG\/WTLS curve over a 112 bit prime field\r\n  secp112r2 : SECG curve over a 112 bit prime field\r\n  secp128r1 : SECG curve over a 128 bit prime field\r\n  secp128r2 : SECG curve over a 128 bit prime field\r\n  secp160k1 : SECG curve over a 160 bit prime field\r\n  secp160r1 : SECG curve over a 160 bit prime field\r\n  secp160r2 : SECG\/WTLS curve over a 160 bit prime field\r\n  secp192k1 : SECG curve over a 192 bit prime field\r\n  secp224k1 : SECG curve over a 224 bit prime field\r\n  secp224r1 : NIST\/SECG curve over a 224 bit prime field\r\n  secp256k1 : SECG curve over a 256 bit prime field\r\n  secp384r1 : NIST\/SECG curve over a 384 bit prime field\r\n  secp521r1 : NIST\/SECG curve over a 521 bit prime field\r\n  prime192v1: NIST\/X9.62\/SECG curve over a 192 bit prime field\r\n  prime192v2: X9.62 curve over a 192 bit prime field\r\n  prime192v3: X9.62 curve over a 192 bit prime field\r\n  prime239v1: X9.62 curve over a 239 bit prime field\r\n  prime239v2: X9.62 curve over a 239 bit prime field\r\n  prime239v3: X9.62 curve over a 239 bit prime field\r\n  prime256v1: X9.62\/SECG curve over a 256 bit prime field\r\n  sect113r1 : SECG curve over a 113 bit binary field\r\n  sect113r2 : SECG curve over a 113 bit binary field\r\n  sect131r1 : SECG\/WTLS curve over a 131 bit binary field\r\n  sect131r2 : SECG curve over a 131 bit binary field\r\n  sect163k1 : NIST\/SECG\/WTLS curve over a 163 bit binary field\r\n  sect163r1 : SECG curve over a 163 bit binary field\r\n  sect163r2 : NIST\/SECG curve over a 163 bit binary field\r\n  sect193r1 : SECG curve over a 193 bit binary field\r\n  sect193r2 : SECG curve over a 193 bit binary field\r\n  sect233k1 : NIST\/SECG\/WTLS curve over a 233 bit binary field\r\n  sect233r1 : NIST\/SECG\/WTLS curve over a 233 bit binary field\r\n  sect239k1 : SECG curve over a 239 bit binary field\r\n  sect283k1 : NIST\/SECG curve over a 283 bit binary field\r\n  sect283r1 : NIST\/SECG curve over a 283 bit binary field\r\n  sect409k1 : NIST\/SECG curve over a 409 bit binary field\r\n  sect409r1 : NIST\/SECG curve over a 409 bit binary field\r\n  sect571k1 : NIST\/SECG curve over a 571 bit binary field\r\n  sect571r1 : NIST\/SECG curve over a 571 bit binary field\r\n  c2pnb163v1: X9.62 curve over a 163 bit binary field\r\n  c2pnb163v2: X9.62 curve over a 163 bit binary field\r\n  c2pnb163v3: X9.62 curve over a 163 bit binary field\r\n  c2pnb176v1: X9.62 curve over a 176 bit binary field\r\n  c2tnb191v1: X9.62 curve over a 191 bit binary field\r\n  c2tnb191v2: X9.62 curve over a 191 bit binary field\r\n  c2tnb191v3: X9.62 curve over a 191 bit binary field\r\n  c2pnb208w1: X9.62 curve over a 208 bit binary field\r\n  c2tnb239v1: X9.62 curve over a 239 bit binary field\r\n  c2tnb239v2: X9.62 curve over a 239 bit binary field\r\n  c2tnb239v3: X9.62 curve over a 239 bit binary field\r\n  c2pnb272w1: X9.62 curve over a 272 bit binary field\r\n  c2pnb304w1: X9.62 curve over a 304 bit binary field\r\n  c2tnb359v1: X9.62 curve over a 359 bit binary field\r\n  c2pnb368w1: X9.62 curve over a 368 bit binary field\r\n  c2tnb431r1: X9.62 curve over a 431 bit binary field\r\n  wap-wsg-idm-ecid-wtls1: WTLS curve over a 113 bit binary field\r\n  wap-wsg-idm-ecid-wtls3: NIST\/SECG\/WTLS curve over a 163 bit binary field\r\n  wap-wsg-idm-ecid-wtls4: SECG curve over a 113 bit binary field\r\n  wap-wsg-idm-ecid-wtls5: X9.62 curve over a 163 bit binary field\r\n  wap-wsg-idm-ecid-wtls6: SECG\/WTLS curve over a 112 bit prime field\r\n  wap-wsg-idm-ecid-wtls7: SECG\/WTLS curve over a 160 bit prime field\r\n  wap-wsg-idm-ecid-wtls8: WTLS curve over a 112 bit prime field\r\n  wap-wsg-idm-ecid-wtls9: WTLS curve over a 160 bit prime field\r\n  wap-wsg-idm-ecid-wtls10: NIST\/SECG\/WTLS curve over a 233 bit binary field\r\n  wap-wsg-idm-ecid-wtls11: NIST\/SECG\/WTLS curve over a 233 bit binary field\r\n  wap-wsg-idm-ecid-wtls12: WTLS curve over a 224 bit prime field\r\n  Oakley-EC2N-3:\r\n\tIPSec\/IKE\/Oakley curve #3 over a 155 bit binary field.\r\n\tNot suitable for ECDSA.\r\n\tQuestionable extension field!\r\n  Oakley-EC2N-4:\r\n\tIPSec\/IKE\/Oakley curve #4 over a 185 bit binary field.\r\n\tNot suitable for ECDSA.\r\n\tQuestionable extension field!\r\n  brainpoolP160r1: RFC 5639 curve over a 160 bit prime field\r\n  brainpoolP160t1: RFC 5639 curve over a 160 bit prime field\r\n  brainpoolP192r1: RFC 5639 curve over a 192 bit prime field\r\n  brainpoolP192t1: RFC 5639 curve over a 192 bit prime field\r\n  brainpoolP224r1: RFC 5639 curve over a 224 bit prime field\r\n  brainpoolP224t1: RFC 5639 curve over a 224 bit prime field\r\n  brainpoolP256r1: RFC 5639 curve over a 256 bit prime field\r\n  brainpoolP256t1: RFC 5639 curve over a 256 bit prime field\r\n  brainpoolP320r1: RFC 5639 curve over a 320 bit prime field\r\n  brainpoolP320t1: RFC 5639 curve over a 320 bit prime field\r\n  brainpoolP384r1: RFC 5639 curve over a 384 bit prime field\r\n  brainpoolP384t1: RFC 5639 curve over a 384 bit prime field\r\n  brainpoolP512r1: RFC 5639 curve over a 512 bit prime field\r\n  brainpoolP512t1: RFC 5639 curve over a 512 bit prime field\r\n  SM2       : SM2 curve over a 256 bit prime field<\/pre>\n<p>Welchen verwenden wir? <strong>secp384r1<\/strong> das entspricht dann 7680 Bit gr\u00f6\u00dfe in RSA oder <strong>secp521r1<\/strong> mit 521-Bit, das w\u00e4hre dann 15360 Bits in RSA. <\/p>\n<p>Aber nicht mehr heute, mit Java hatte ich das <a href=\"http:\/\/blog.wenzlaff.de\/?p=16427\" rel=\"noopener\" target=\"_blank\">hier<\/a> beschrieben oder f\u00fcr den <a href=\"http:\/\/blog.wenzlaff.de\/?p=16821\" rel=\"noopener\" target=\"_blank\">Raspberry Pi hier<\/a> &#8230;<\/p>\n<p>PS: Nat\u00fcrlich werden alle hier ver\u00f6ffentlichen private\/public Keys gel\u00f6scht und nicht verwendet \ud83d\ude09 Das w\u00e4hre dann ja auch kein privater Key \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenSSL ist ein in C entwickeltes Kryptographiewerkzeug f\u00fcr das Secure Socket Layer (SSL). Es enth\u00e4lt das Mehrzweck-Befehlszeilenwerkzeug \/usr\/bin\/openssl. Das Programm eignet sich f\u00fcr kryptographische Operationen wie: Erzeugung von RSA-, DH- und DSA-Schl\u00fcssel-Parametern Erzeugung von X.509-Zertifikaten, CSRs und CRLs Berechnung von kryptographischen Einweg-Hashfunktionen Ver- und Entschl\u00fcsselung mit Chiffren Pr\u00fcfung von SSL-\/TLS-Clients und -Servern Bearbeitung von S\/MIME-signierter &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=17249\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eOpenSSL nicht nur mit dem Raspberry Pi oder wie k\u00f6nnen Zertifikate selbst signiert werden mit eigener selbst-signierter Root-CA?\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,2173,808,1319],"tags":[4970,4665,819,4969,1602,4924,739,4971,742,449],"class_list":["post-17249","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-debian","category-linux-2","category-sicherheit-2","tag-ca-selbst","tag-ecc","tag-key","tag-kurven","tag-openssl","tag-private","tag-rsa","tag-selbst-signierte-ca","tag-ssl","tag-verschluesseln"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/17249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17249"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/17249\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17249"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}