{"id":525,"date":"2021-03-10T23:28:51","date_gmt":"2021-03-10T22:28:51","guid":{"rendered":"https:\/\/www.haschick.de\/?p=525"},"modified":"2021-03-16T22:45:24","modified_gmt":"2021-03-16T21:45:24","slug":"eigenes-zertifikat-inkl-rootca","status":"publish","type":"post","link":"https:\/\/www.haschick.de\/?p=525","title":{"rendered":"Eigenes Zertifikat inkl. RootCA"},"content":{"rendered":"\n<p>Bestimmt kennt ihr das &#8230; ihr setzt eine eigene, lokale Nextcloud auf (z.B. auf einem Raspi mit <a href=\"https:\/\/ownyourbits.com\/nextcloudpi\/\" target=\"_blank\" rel=\"noreferrer noopener\">NextCloudPi<\/a>), funktioniert alles wunderbar. Aber in der URL meckert Chrome, Vivaldi oder Firefox, dass das https-Zertifikat nicht g\u00fcltig ist.<\/p>\n\n\n\n<p>Die L\u00f6sung: wir erstellen unsere eigene RootCA und ein Zertifikat f\u00fcr unseren raspi.<\/p>\n\n\n\n<p>Hier eine hoffentlich Schritt-f\u00fcr-Schritt-Anleitung:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vorbereiten &#8211; ein Linux<\/h2>\n\n\n\n<p>Wir brauchen ein Linux-System f\u00fcr openssl. Ich habe Windows10 und mache es mir daher einfach &#8230; WSL (Windows Subsystem f\u00fcr Linux) installiert und dann Ubuntu darauf laufen lassen. Ein Linux innerhalb von Windows, l\u00e4uft wunderbar.<\/p>\n\n\n\n<p>Falls ihr das auch wollt:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/de-de\/windows\/wsl\/install-win10#manual-installation-steps\" target=\"_blank\">WSL2 f\u00fcr Windows installieren<\/a><\/li><li><a href=\"https:\/\/www.microsoft.com\/store\/apps\/9n6svws3rx71\" target=\"_blank\" rel=\"noreferrer noopener\">Ubuntu 20.04 installieren aus dem Windows Shop<\/a><\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Zertifikate erzeugen<\/h2>\n\n\n\n<p>Zuerst ben\u00f6tigen ben\u00f6tigen wir einen privaten Schl\u00fcssel f\u00fcr unserer rootCA (hei\u00dft bei mir haschickCA). Also einfach eingeben:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl genrsa -aes256 -out haschickCA.key 4096<\/code><\/pre>\n\n\n\n<p>Dabei wird ein Passwort abgefragt. Dieses (wie auch die haschickCA.key) unbedingt geheim halten. Am besten in eurem Passwort-Manager (bspw. <a rel=\"noreferrer noopener\" href=\"https:\/\/keepass.info\" target=\"_blank\">KeePass<\/a>) speichern.<\/p>\n\n\n\n<p>Dann ben\u00f6tigen wir das Root-Zertifikat (was wir in Windows, im Android, &#8230; installieren werden):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl req -x509 -new -nodes -extensions v3_ca -key haschickCA.key -sha256 -days 2136 -out haschickCA.crt<\/code><\/pre>\n\n\n\n<p>Jetzt haben wir unser Root-Zertifikat (in diesem Fall die Datei haschickCA.crt).<\/p>\n\n\n\n<p>Nun weiter im Text mit dem eigentlichen Zertifikat f\u00fcr unseren raspi.<\/p>\n\n\n\n<p>Die Logik ist fast analog:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>privaten Schl\u00fcssel erzeugen, aber diesmal ohne Passwort<\/li><li>Zertifikatsanfrage erzeugen, von der CA signieren lassen -&gt; das Ergebnis ist unser SSL-Zertifikat<\/li><\/ol>\n\n\n\n<p>F\u00fcr Schritt 1 (privaten Schl\u00fcssel ohne Passwort erzeugen)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl genrsa -out raspi.key 4096<\/code><\/pre>\n\n\n\n<p>F\u00fcr Schritt 2:<\/p>\n\n\n\n<p>Zertifikatsanforderung (CSR &#8211; Certificate Signing Request) erzeugen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl req -new -sha256 \\\n    -key raspi.key \\\n    -subj \"\/C=DE\/ST=SN\/O=Frank Haschick\/OU=raspi\/CN=raspi\" \\\n    -reqexts SAN \\\n    -config &lt;(cat \/etc\/ssl\/openssl.cnf &lt;(printf \"\\n&#91;SAN]\\nsubjectAltName=DNS:raspi\")) \\\n    -out raspi.csr<\/code><\/pre>\n\n\n\n<p> CSR signieren und damit Zertifikat anlegen<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 -req -extfile &lt;(printf \"subjectAltName=DNS:raspi\\r\\nextendedKeyUsage=serverAuth\") -days 825 -in raspi.csr -CA haschickCA.crt -CAkey haschickCA.key -CAcreateserial -out raspi.crt -sha256<\/code><\/pre>\n\n\n\n<p>Die CSR-Datei ben\u00f6tigt man nicht mehr, die kann man wieder l\u00f6schen<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rm raspi.csr<\/code><\/pre>\n\n\n\n<p>Fertig, SSL-Zertifikat ist da \ud83d\ude42<\/p>\n\n\n\n<p>Falls ihr das Ubuntu auf dem WSL laufen habt (wie oben geschrieben), k\u00f6nnt ihr einfach<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>explorer.exe .<\/code><\/pre>\n\n\n\n<p>eingeben, und der Windows-Explorer wird gestartet mit genau dem Verzeichnis wo ihr gerade drin gewesen seid, wo also eure Zertifkate liegen.<\/p>\n\n\n\n<p>Alternativ kann man im Windows Explorer auch &#8222;\\wsl$\\&#8220; eingeben und dann zu seiner Linux-Distribution und seinem Verzeichnis wechseln<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zertifikat in raspi \/ Nextcloud hinterlegen<\/h2>\n\n\n\n<p>Jetzt wo ihr euer Zertifikat habt, m\u00fcsst ihr es auf dem raspi hinterlegen.<\/p>\n\n\n\n<p>Ihr ben\u00f6tigt euer rootCA (haschickCA.crt bei mir), die raspi.crt und die raspi.key.<\/p>\n\n\n\n<p>Die auf den raspi kopieren und dann per SSH auf den raspi einloggen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">RootCA hinterlegen<\/h3>\n\n\n\n<p>Ihr solltet die RootCA nicht nur im Windows hinterlegen (dort bitte &#8222;Vertrauensw\u00fcrdige Stammzertifizierungsstellen&#8220; als Speicher ausw\u00e4hlen), sondern auch im raspi.<br>Dazu die RootCA an die richtige Stelle kopieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp haschickCA.crt \/usr\/share\/ca-certificates\/haschickCA.crt<\/code><\/pre>\n\n\n\n<p>Und dann die CA-Pakete neu einlesen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dpkg-reconfigure ca-certificates<\/code><\/pre>\n\n\n\n<p>Dort dann das Zertifikat mit Leertaste ausw\u00e4hlen und mit ENTER best\u00e4tigen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zertifikat in Apache hinterlegen<\/h3>\n\n\n\n<p>Erstmal kopieren wir unsere raspi-Schl\u00fcssel und das Zertifikat an die richtige Stelle:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp raspi.crt \/etc\/ssl\/certs\/raspi.crt\nsudo cp raspi.key \/etc\/ssl\/private\/raspi.key<\/code><\/pre>\n\n\n\n<p>Welche Zertifikate von Apache genutzt werden, steht in der nextcloud.conf &#8230; also passieren wir die an:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo vi \/etc\/apache2\/sites-enabled\/nextcloud.conf<\/code><\/pre>\n\n\n\n<p>Wer mit vi nicht so gut umgehen kann &#8230; &#8222;i&#8220; dr\u00fccken zum einf\u00fcgen.<\/p>\n\n\n\n<p>Dann die 2 Zeilen austauschen (bei mir Zeile 7 und 8):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    SSLCertificateFile      \/etc\/ssl\/certs\/raspi.crt\n    SSLCertificateKeyFile \/etc\/ssl\/private\/raspi.key<\/code><\/pre>\n\n\n\n<p>Zum Speichern &#8222;Escape&#8220; dr\u00fccken, dann &#8222;:wq!&#8220; (alles ohne die &#8222;).<\/p>\n\n\n\n<p>Dann noch von Apache die Config neu einlesen lassen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl reload apache2<\/code><\/pre>\n\n\n\n<p>Dann probiert es im Browser aus: https:\/\/raspi sollte keine Fehlermeldung mehr erzeugen.<\/p>\n\n\n\n<p>Viel Erfolg!<\/p>\n\n\n\n<p><strong>Update 16.03.2021<\/strong><\/p>\n\n\n\n<p>Das oben beschriebene funktioniert mit Windows und Android, aber nicht mit iOS. Dort gibt es seit iOS 13 <a rel=\"noreferrer noopener\" href=\"https:\/\/support.apple.com\/de-de\/HT210176\" target=\"_blank\">neue Regeln<\/a> (825 Tage G\u00fcltigkeit und extendedKeyUsage erg\u00e4nzt) -> geht jetzt auch auf iOS<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bestimmt kennt ihr das &#8230; ihr setzt eine eigene, lokale Nextcloud auf (z.B. auf einem Raspi mit NextCloudPi), funktioniert alles wunderbar. Aber in der URL meckert Chrome, Vivaldi oder Firefox, dass das https-Zertifikat nicht g\u00fcltig ist. Die L\u00f6sung: wir erstellen unsere eigene RootCA und ein Zertifikat f\u00fcr unseren raspi. Hier eine hoffentlich Schritt-f\u00fcr-Schritt-Anleitung: Vorbereiten &#8211; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":529,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-525","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it"],"_links":{"self":[{"href":"https:\/\/www.haschick.de\/index.php?rest_route=\/wp\/v2\/posts\/525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.haschick.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.haschick.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.haschick.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.haschick.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=525"}],"version-history":[{"count":5,"href":"https:\/\/www.haschick.de\/index.php?rest_route=\/wp\/v2\/posts\/525\/revisions"}],"predecessor-version":[{"id":533,"href":"https:\/\/www.haschick.de\/index.php?rest_route=\/wp\/v2\/posts\/525\/revisions\/533"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.haschick.de\/index.php?rest_route=\/wp\/v2\/media\/529"}],"wp:attachment":[{"href":"https:\/\/www.haschick.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.haschick.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.haschick.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}