Inhaltsverzeichnis

Eine eigene CA einrichten

Verschlüsseltes Verzeichnis anlegen

Um mehr Sicherheit zu erhalten lege ich die CA in einem Verschlüsselten Verzeichnis an. Siehe 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 1)
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“)

  1. Einstellungen öffnen
  2. Sicherheit und Datenschutz
  3. Andere Sicherheitseinstellungen
  4. Vom Gerätespeicher installieren
  5. CA-Zertifikat (Trotzdem installieren)
  6. 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

  1. Eine Eingabeaufforderung cmd als Administrator öffnen
  2. mmc eingeben
  3. In der Konsole Datei - Snap-In hinzufügen/entfernen wählen
  4. Zertifikate hinzufügen wählen
  5. zu Vertrauenswürdige Stammzertifizierungsstellen gehen
  6. Aktion - alle Aufgaben Importieren wählen
  7. Zertifikat für diesen Computer importieren
  8. Zertifikat auswählen

* 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 x509v3_config DESCRIPTION