====== Eine eigene CA einrichten ====== ===== Verschlüsseltes Verzeichnis anlegen ===== Um mehr Sicherheit zu erhalten lege ich die CA in einem Verschlüsselten Verzeichnis an. Siehe [[:verschluesseltes_verzeichnis|Neues verschlüsseltes Verzeichnis anlegen]]\\ \\ **encfs ~/.MyCA ~/MyCA** encfs ~/.MyCA ~/MyCA Das Verzeichnis »/home/timo/.MyCA/« existiert nicht. Soll es angelegt werden? (y,N) y Das Verzeichnis »/home/timo/MyCA/« existiert nicht. Soll es angelegt werden? (y,N) y Neuer verschlüsselter Datenträger wird erstellt. Bitte wählen Sie eine der folgenden Optionen: »x« für den Expertenmodus, »p« für den vorkonfigurierten Paranoia-Modus, etwas anderes oder nur Drücken der Eingabetaste wählt den Standardmodus. Standardkonfiguration wurde gewählt. Konfiguration abgeschlossen. Das angelegte Dateisystem hat die folgenden Eigenschaften: Dateisystem Chiffre: "ssl/aes", Version 3:0:2 Dateinamenskodierung: "nameio/block", Version 4:0:2 Schlüssellänge: 192 Bits Blockgröße: 1024 Bytes Jede Datei enthält acht Byte Vorspann mit einmaligen IV Daten. Dateinamensverschlüsselung benutzt IV Verkettungsmodus. Dateilöcher wurden zur verschlüsselten Ausgabe durchgereicht. Nun wird ein Kennwort für das Dateisystem benötigt. Da es keinen Mechanismus zur Wiederherstellung gibt, müssen Sie sich an das Kennwort erinnern! Das Kennwort kann mit encfsctl nächträglich geändert werden. Neues EncFS-Passwort: EncFS-Passwort bestätigen: ?> Phrase eingeben ===== Anlegen der CA ===== Eine gute Beschreibung findet man unter (([[https://wiki.ubuntuusers.de/CA/#Eigene-CA-betreiben|CA bei ubuntuusers wiki]]))\\ Ich habe die im System mitgelieferte /usr/lib/ssl/misc/CA.pl nach **/usr/lib/ssl/misc/MyCA.pl** kopiert und $CATOP, sowie $CADAYS angepasst.\\ my $CATOP = "./tuxtiCA"; #my $CADAYS = "-days 1095"; # 3 years #my $CADAYS = "-days 1825"; # 5 years my $CADAYS = "-days 7300"; # 20 years Mit dem **MyCA.pl-Skript** ist die Erstellung der CA ziemlich einfach. Im Verlauf verschiedener Schritte wird man nach diversen Daten gefragt, die man eingeben kann.\\ Welche Felder letztendlich vorhanden sein müssen, wird über eine Policy in der OpenSSL-Konfiguration **/usr/lib/ssl/openssl.cnf** bestimmt. Dort wird festgelegt welche Felder in den signierten Zertifikaten denselben Wert wie im CA-Zertifikat haben müssen, da sie sonst bei der Überprüfung abgelehnt werden. Dort können noch weiter Vorbelegungen gemacht werden. # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = optional organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional ==== Nun wird die CA erstellt ==== **/usr/lib/ssl/misc/MyCA.pl -newca** timo@LinTuxedo:~/MyCA$ /usr/lib/ssl/misc/MyCA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... ==== openssl req -new -keyout ./tuxtiCA/private/cakey.pem -out ./tuxtiCA/careq.pem .......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*........+...........+.....................+...+.+.....+.........+...+..........+..+.+............+...+..+.......+..+.........+.+.....+....+..+.......+..+.+...+......+...........+...+.+...........+..........+..+.+..............+......+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.......+...+............+....+...+..+.+.....+.......+........+.......+.....+.............+..+......+.+...+...+..+................+......+.....+.............+...+.....+.........+...+.......+...+......+.....+............+....+.....+....+..............+.+..+....+...+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...+.....+....+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+......+.............................+.......+.........+.....+.+..+...+...+....+.....+...+....+......+...+.....+................+...+..+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+......+...........+.......+.....+.......+...+...+...............+.....+...+............+....+...+......+..+.......+.....+.+..............+.+.....+......................+..+.+.................+...+......+.+..+...+....+...........+...+.........+.......+.........+......+......+..............+.+..+......+.....................+...+.......+.....+.............+...+...+...........+....+..+...+.......+...+.....+......+.........+................+...+...........+.......+...+..+...+....+..+...+...+.......+..+....+......+...+......+.....+.+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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) [DE]: State or Province Name (full name) [Thueringen]: Locality Name (eg, city) []:Werra-Suhl-Tal Organization Name (eg, company) [New Narnia Network]: Organizational Unit Name (eg, section) []:Root CA Common Name (e.g. server FQDN or YOUR name) []:tuxti.th Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: ==> 0 ==== ==== openssl ca -create_serial -out ./tuxtiCA/cacert.pem -days 1825 -batch -keyfile ./tuxtiCA/private/cakey.pem -selfsign -extensions v3_ca -infiles ./tuxtiCA/careq.pem Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./tuxtiCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 59:ae:a1:74:ba:5a:26:6f:f5:8b:95:57:24:7f:a7:f8:aa:79:fa:f3 Validity Not Before: Sep 20 09:29:58 2023 GMT Not After : Sep 18 09:29:58 2028 GMT Subject: countryName = DE stateOrProvinceName = Thueringen organizationName = New Narnia Network organizationalUnitName = Root CA commonName = tuxti.th X509v3 extensions: X509v3 Subject Key Identifier: B7:98:25:3C:9A:7A:04:22:A7:64:67:80:96:5C:89:50:24:0E:1F:0C X509v3 Authority Key Identifier: B7:98:25:3C:9A:7A:04:22:A7:64:67:80:96:5C:89:50:24:0E:1F:0C X509v3 Basic Constraints: critical CA:TRUE Certificate is to be certified until Sep 18 09:29:58 2028 GMT (1825 days) Write out database with 1 new entries Data Base Updated ==> 0 ==== CA certificate is in ./tuxtiCA/cacert.pem timo@LinTuxedo:~/MyCA$ Im aktuellen Verzeichnis sollte jetzt ein neues Verzeichnis tuxtiCA mit einigen Dateien und weiteren Unterverzeichnissen entstanden sein.\\ Folgende davon sind wichtig:\\ **cacert.pem** Das öffentliche Zertifikat der CA. Diese Datei sollte auf allen Clients importiert werden. Danach vertrauen diese Clients automatisch allen von der CA ausgestellten Zertifikaten.\\ **certs/** Das Verzeichnis in dem die signierten Zertifikate untergebracht werden.\\ **private/** Das Verzeichnis für die privaten Schlüssel.\\ **private/cakey.pem** Der private Schlüssel der CA. Dieser sollte die CA nie verlassen, außer zu Backup-Zwecken. (Und auch dann gesondert gesichert werden.)\\ **index.txt** Sogenannte Datenbank der CA mit einer Liste aller ausgestellten Zertifikate und deren Status. ==== Ein Zertifikat wird angefordert ==== Mit dieser CA fängt man nun an die eigentlichen Zertifikate zu signieren, die man dann bspw. auf seinen Servern einsetzt. Auch hierfür verwendet man das CA.pl-Skript. Das Signieren läuft in zwei Stufen ab. Als erstes erstellt man einen neuen privaten Schlüssel und einen "Zertifikatsantrag" (CA.pl -newreq). Anschließend signiert man den Zertifikatsantrag (CA.pl -sign). Damit das Skript funktioniert, muss man sich im selben Verzeichnis befinden in dem man auch die CA erstellt hat, also eines oberhalb von tuxtiCA.\\ Hier wird natürlich eine andere Passphrase für dieses Zertifikat eingegeben,, nicht die der CA.\\ === Server Zertifikate erstellen=== Per Default werden Zertifikate ohne besonderen Verwendungszweck ausgestellt. Für Webserver empfiehlt es sich allerdings den Zertifikatstyp und Verwendungszweck als zusätzliche X.509 v3-Erweiterungen hinzuzufügen. Dazu muss wieder die OpenSSL-Konfiguration **/etc/ssl/openssl.cnf** angepasst werden. \\ ... extensions = v3_reg ... [ CA_default ] ... copy_extensions = copy ... # For the CA policy [ policy_match ] countryName = optional stateOrProvinceName = optional organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional ... [ req ] ... req_extensions = v3_req # The extensions to add to a certificate request .. countryName_default = DE ... stateOrProvinceName_default = Thueringen ... 0.organizationName_default = New Narnia Network ... [ usr_cert ] ... nsCertType = server keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth ... [ v3_req ] ... subjectAltName = @alt_names [alt_names] DNS.1 = ns.tuxti.th DNS.2 = ds.tuxti.th DNS.3 = nas.tuxti.th DNS.4 = mail.tuxti.th DNS.5 = www.tuxti.th DNS.6 = wiki.tuxti.th DNS.7 = narnia.tuxti.th DNS.8 = narniacloud.tuxti.th IP.1 = 192.168.178.11 IP.2 = 127.0.0.1 ... [ v3_ca ] ... basicConstraints = critical,CA:true subjectAltName = @alt_names ... [ tsa_config1 ] ... dir = ./tuxtiCA # TSA root directory ... Der Eintrag copy_extensions = copy darf beim erstllen der CA noch nicht vorhanden sein, sonst werden die Alternativen Namen in das Zertifikat der CA eingetragen.\\ **/usr/lib/ssl/misc/MyCA.pl -newreq** timo@LinTuxedo:~/MyCA$ /usr/lib/ssl/misc/MyCA.pl -newreq Use of uninitialized value $1 in concatenation (.) or string at /usr/lib/ssl/misc/MyCA.pl line 145. ==== openssl req -new -keyout newkey.pem -out newreq.pem -days 365 Ignoring -days without -x509; not generating a certificate ......+.+............+..+.........+..........+..+.......+...+..+...+....+........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+..+....+.........+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+..+..........+...+..+......+............+.......+...+..+......+....+...+........+......+...+...+.........+...+..........+......+...............+.....+.+.........+...........+.........+.+...+...+.....+..........+...+.........+........+...+.........+..........+...+.........+......+...+.....+.........+...+...........................+...+....+...+.....+......+............+...+...............+.+.....+...+..........+..+......+.............+..+.......+...+...+......+...+............+........+...+....+...+..+.+..+.......+........+...+...+.+......+..+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .......+.+..+...+.+......+..+.+.....+....+............+......+.....+...+.+...+.....+......+....+..+....+..+.......+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*....+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.........+......+....+...........+......+....+........+......+.+......+.....+...+....+.....+...+.........+.........+..........+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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) [DE]: State or Province Name (full name) [Thueringen]: Locality Name (eg, city) []:Fernbreitenbach Organization Name (eg, company) [New Narnia Network]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:nas.tuxti.th Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: ==> 0 ==== Request is in newreq.pem, private key is in newkey.pem timo@LinTuxedo:~/MyCA$ ==== Das angeforderte Zertifikat wird signiert ==== **/usr/lib/ssl/misc/MyCA.pl -sign**\\ Die Passphrase im Signierschritt ist natürlich die des privaten CA-Schlüssels, timo@LinTuxedo:~/MyCA$ /usr/lib/ssl/misc/MyCA.pl -sign ==== openssl ca -policy policy_anything -out newcert.pem -infiles newreq.pem Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./tuxtiCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 59:ae:a1:74:ba:5a:26:6f:f5:8b:95:57:24:7f:a7:f8:aa:79:fa:f4 Validity Not Before: Sep 20 09:35:59 2023 GMT Not After : Sep 19 09:35:59 2024 GMT Subject: countryName = DE stateOrProvinceName = Thueringen localityName = Fernbreitenbach organizationName = New Narnia Network commonName = nas.tuxti.th X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Subject Key Identifier: DA:1E:8D:68:98:2F:D9:B9:6C:AC:58:6A:87:98:73:D1:58:F0:2E:32 X509v3 Authority Key Identifier: B7:98:25:3C:9A:7A:04:22:A7:64:67:80:96:5C:89:50:24:0E:1F:0C Certificate is to be certified until Sep 19 09:35:59 2024 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated ==> 0 ==== Signed certificate is in newcert.pem timo@LinTuxedo:~/MyCA$ Im aktuellen Verzeichnis, immer noch das von **tuxtiCA** übergeordnete, befinden sich jetzt die Dateien:\\ **newreq.pem** Zertifikatsantrag\\ **newcert.pem** Signiertes öffentliches Zertifikat\\ **newkey.pem** Privater Schlüssel\\ \\ **//newreq.pem//** ist inzwischen nutzlos geworden und kann gelöscht werden.\\ **rm newreq.pem**\\ Wichtig sind nur die beiden Dateien **newcert.pem** und **newkey.pem**. Diesen sollte man aussagekräftigere Namen geben und sie zur Archivierung in das jeweilige tuxtiCA-Unterverzeichnis verschieben.\\ Wer das Schlüsselpaar auf einem Server benutzen möchte und nicht bei jedem Server-Start die Passphrase des privaten Schlüssels eingeben will, kann dieses noch vorher aus dem privaten Schlüssel löschen. In diesem Fall sollte man aber auf jeden Fall darauf achten, dass der private Schlüssel ohne Passphrase durch restriktive Dateirechte auf dem Server vor neugierigen Blicken geschützt wird:\\ **openssl rsa -in newkey.pem -out newkey-without-password.pem**\\ oder\\ //**openssl rsa -in newkey.pem -out tuxtiCA/private/narniacloud.tuxti.th_key.pem && rm newkey.pem**//\\ timo@LinTuxedo:~/MyCA$ openssl rsa -in newkey.pem -out newkey-without-password.pem Enter pass phrase for newkey.pem: writing RSA key **mv newkey-without-password.pem tuxtiCA/private/narniacloud.tuxti.th_key.pem**\\ **mv newcert.pem tuxtiCA/certs/narniacloud.tuxti.th_cert.pem**\\ Diese zwei Dateien sind es auch, die der betreffende Server zum SSL-Betrieb benötigt. Die Datei **newkey.pem** kann jetzt ebenfalls gelöscht werden (nachdem man sich davon überzeugt hat, dass mit der Umwandlung alles geklappt hat, und narniacloud.tuxti.th_key.pem nicht etwa leer ist).\\ Auser Sie wurde gleich mit dem Umwandeln gelöscht. (Variante 2) **rm newkey.pem**\\ ===== Zertifikat integrieren ===== ==== CA Zertifikat in Ubuntu hinzufügen ==== CA-Zertifikate sind entweder bereits im Betriebssystem vorinstalliert (für allgemein anerkannte CAs), oder müssen von der Webseite der CA heruntergeladen und manuell installiert werden. In diesem Fall sollte das CA-Zertifikat sorgfältig geprüft werden, z.B. per telefonischem Abgleich des Fingerprints.\\ Abgesehen davon, dass man Zertifikate auch als einfacher Benutzer über Importfunktionen oder Konfigurationsdirektiven in den diversen Client-Programmen nutzen kann, kann man ein CA-Zertifikat auch systemweit installieren. Als erstes muss man dafür die CA-Zertifikatsdatei im **.pem-Format**, aber mit der **.crt** Endung nach **/usr/local/share/ca-certificates/** kopieren. Am Besten denkt man sich ggf. noch einen aussagekräftigeren Namen für die Datei aus, z.B. organisationsname.crt. **Wichtig** ist aber, dass die Dateiendung **.crt** verwendet wird. Dann wird folgender Befehl ausgeführt: sudo dpkg-reconfigure ca-certificates Auf die Frage ob neue Zertifikate akzeptiert werden sollen, antwortet man entweder mit "Ja", dann wird das neue Zertifikat ohne weitere Rückfrage in die Liste aufgenommen\\ Bei allen Zertifikaten in /usr/local/share/ca-certificates/ wird davon ausgegangen, dass diese nachträglich manuell hinzugefügt wurden und daher auf jeden Fall mit installiert werden sollen.\\ === CA Zertifikat aus Ubuntu löschen === Für das Löschen von CAs gilt dasselbe wie für das Hinzufügen von CAs in Ubuntu. Wegen der Vielzahl an Möglichkeiten an welchem Ort CAs im System hinterlegt werden können, bezieht sich das Löschen hier nur auf CA-Zertifikate unterhalb von /etc/ssl/certs/ und solche die über Update-Hooks in /etc/ca-certificates/update.d/ verwaltet werden. Um selbst installierte CA-Zertifikate zu entfernen, müssen diese zunächst aus dem Verzeichnis /usr/local/share/ca-certificates/ gelöscht werden. Anschließend ruft man folgenden Befehl auf: sudo dpkg-reconfigure ca-certificates ==== Zertifikat in Firefox einbinden ==== Die Einstellungen von Firefox aufrufen.\\ Datenschutz & Sicherheit auswählen\\ Scrollen bis Zertifikate\\ Zertifikate anzeigen\\ Reiter Zertifizierungsstelle auswählen und auf Importieren klicken\\ Hier das Zertifikat der CA (Standartname cacert.pem öffnen.\\ Dann noch die Häkchen für das vertrauen wählen.\\ ==== CA Zertifikats Integration in Android ==== Hier am Beispiel Android 13\\ Für Android wird das Zertifikat der CA im .crt Format benötigt. (siehe unten: "Hilfreiche Befehle") - Einstellungen öffnen - Sicherheit und Datenschutz - Andere Sicherheitseinstellungen - Vom Gerätespeicher installieren - CA-Zertifikat (Trotzdem installieren) - Den Speicherort wählen. Die **.crt** sollte erkannt werden und muss ausgewählt werden. === Firefox unter Android === Wenn der Firefox das Zertifikat nicht annimmt, muss die Verwendung von Drittanbieter-CA-Zertifikaten in Firefox aktiviert werden.\\ \\ Gehe dazu in die Einstellungen > Über Firefox. Tippe fünf Mal auf das Firefox-Logo. Gehe zurück in die Einstellungen und du siehst einen neuen Menü-Eintrag: **Secret Settings**. Dort gibt es die Option **"Use third party CA certificates"**. Diese muss aktiviert sein. ==== CA Zertifikats Integration in Windows ==== -Eine Eingabeaufforderung **cmd** als Administrator öffnen -**mmc** eingeben -In der Konsole Datei - Snap-In hinzufügen/entfernen wählen -Zertifikate hinzufügen wählen -zu Vertrauenswürdige Stammzertifizierungsstellen gehen -Aktion - alle Aufgaben Importieren wählen -Zertifikat für diesen Computer importieren -Zertifikat auswählen * [[tuxedo:ein_zertifikat_auf_der_synology_ds_einbinden|Zertifikat auf der Synology DS]]\\ ===== Wiederrufen eines Zertifikates ===== Manchmal kann es nötig sein ein Zertifikat zu widerrufenen.\\ Die Zertifikats sperren wir durch den Aufruf:\\ **openssl ca -revoke userCert.pem** (z.B.nas.tuxti.th_cert.pem)\\ Er markiert in der index.txt das entsprechende Zertifikat als ungültig, was allerdings erst bei der nächsten Aktualisierung der CRL zum Tragen kommt.\\ Wenn die Zertifikatsdatei nicht mehr vorhanden ist kann man auch die Seriennummer nutzen.\\ Alle erstellten Zertifikate werden in der index.txt aufgelistet. Dort findet man auch die Seriennummer. Mit dieser und dem Befehl openssl ca -revoke, kann das Zertifikat widerrufen werden.\\ **openssl ca -revoke tuxtiCA/newcerts/20DF70641DC738C6F6B76E2B5CF2A8890505B53E.pem**\\ timo@LinTuxedo:~/MyCA$ openssl ca -revoke tuxtiCA/newcerts/20DF70641DC738C6F6B76E2B5CF2A8890505B53E.pem Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./tuxtiCA/private/cakey.pem: Revoking Certificate 20DF70641DC738C6F6B76E2B5CF2A8890505B53E. Data Base Updated timo@LinTuxedo:~/MyCA$ Das wiederrrufene Zertifikat wird dann in der index.txt mit einem R gekennzeichnet.\\ Beispiel:\\ V 280916184227Z 20DF70641DC738C6F6B76E2B5CF2A8890505B53D unknown /C=DE/ST=Th\xC3\x83\xC2\xBCringen/O=New Narnia/CN=tuxti.th R 240917185154Z 230918195037Z 20DF70641DC738C6F6B76E2B5CF2A8890505B53E unknown /C=DE/ST=Th\xC3\x83\xC2\xBCringen/L=Werra-Suhl-Tal/O=Internet Widgits Pty Ltd/CN=nas.tuxti.th V 240917194102Z 20DF70641DC738C6F6B76E2B5CF2A8890505B53F unknown /C=DE/ST=Thueringen/L=Werra-Suhl-Tal/O=New Narnia Network/CN=nas.tuxti.th ==== Certificate Revocation List ==== Die CRL generieren wir als CA mit:\\ **openssl ca -gencrl -out crl/crl.pem**\\ timo@LinTuxedo:~/MyCA$ openssl ca -gencrl -out tuxtiCA/crl/crl.pem Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./tuxtiCA/private/cakey.pem: ===== Hilfreiche Befehle ===== Zertifikat anzeigen lassen: openssl x509 -in tuxtiCA/certs/ds.tuxti.th_cert.pem -noout -text Alle Zertifiakte des Systems anzeigen: locate .pem | grep "\.pem$" | xargs -I{} openssl x509 -issuer -enddate -noout -in {} Ein .pem Zertifikat in das .crt Format wandeln openssl x509 -outform der -in cacert.pem -out cacert.crt ===== Hilfen ===== Eine gute Beschreibung zu Openssl findet man unter [[https://www.openssl.org/docs/man3.0/man5/x509v3_config.html|x509v3_config DESCRIPTION]]