{{tag> ca certificates needs_translation_en}} {{indexmenu_n>10}} ====== Eigene Zertifizierungsstelle ====== Im Beispiel wird folgende Bezeichnung verwendet. Schulname: Musterschule Ort: Musterstadt Bundesland: Musterland Interne Domain: musterschule.de Externer Name: musterschule.extern.de Weiterer Name: musterschule.extern2.de ====== Zertifikate ====== Die SSL-Kommunikation für gesicherte Web-Verbindungen, aber nicht nur dafür, läuft über Zertifikate, die von einer Zertifizierungsstelle ausgestellt werden, denen der Client-Rechner vertraut. Man kann in der Schule eine eigene Zertifizierungsstelle betreiben, da die verfügbaren Zertifizierungsstellen mit erheblichen Kosten für die Schule verbunden sind. **Hinweis:** Die hier durchgeführten Änderungen können eventuell durch Teilprogramme der Musterlösung torpediert werden. Insbesondere wird bei einer Änderung des Servernamen oder des IPFIRE-Namen oder der Domäne bestimmt eine Neuerstellung der Zertifikate durchgeführt. ===== Zertifizierungsstelle ===== Eine Zertifizierungsstelle basiert auf einem geheimen Schlüssel und einem mit diesem Schlüssel ausgestellten Zertifikat. Der geheime Schlüssel muss sicher verwahrt werden. Er wird benötigt, um Server-Zertifikate zu signieren. ==== Dateistruktur ==== Die Dateistruktur befindet sich unter ''/etc/ssl/Musterschule_CA''. === index.txt === Hier werden alle signierten Zertifikate registriert. === serial === Hier wird eine Seriennummer vergeben. Diese Datei muss mit einer Zeichenkette initialisiert werden, das kann im einfachsten Fall die ''01'' sein. ==== Musterschule_CA ==== Der Schlüssel und das Zertifikat befinden sich an einem sicheren Ort (Safe der Schulleitung). Außerdem befindet sich das Zertifikat unter ''/etc/ssl/certs/Musterschule_CA.crt'' zur Nutzung auf dem Server. Es wird außerdem über das Doku-Wiki zum Herunterladen unter [[#zertifikat|Musterschule_CA-Zertifikat]] bereitgestellt((Es handelt sich um eine Verknüpfung zum erstgenannten Ort)). - Erzeugung eines Verzeichnisses für die Zertifizierungsstelle. mkdir /etc/ssl/Musterschule_CA mit den Rechten chmod 755 /etc/ssl/Musterschule_CA und der Gruppe ''ssl-cert''. chgrp ssl-cert /etc/ssl/Musterschule_CA Der Schlüssel wird mit einem Passwort gesichert. Das ist wichtig, um eine nicht bestimmungsgemäße Verwendung verhindern zu können. So ist der Schlüssel mehrfach gesichert durch eingeschränkte Zugriffsrechte und ein Passwort. Alle weiteren Befehle werden in diesem Verzeichnis ausgeführt, um die Dateien hier zusammenzuhalten. - Erstellung des privaten Schlüssels der Zertifizierungsstelle. openssl genrsa -des3 -out Musterschule_CA.key 1024 mit den Rechten. Musterschule_CA.key root:ssl-cert r-- --- --- - Erstellung eines Zertifikats für die Zertifizierungsstelle. openssl req -new -key Musterschule_CA.key -x509 -days 3650 -out ../certs/Musterschule_CA.crt Dieses Zertifikat ist das Stammzertifikat, das alle weiteren Zertifikate als gültig ausweist. Es wird wie oben beschrieben veröffentlicht. - Fingerabdruck zur Veröffentlichung / Kontrolle im Doku-Wiki bereitstellen. openssl x509 -fingerprint -noout -in ../certs/Musterschule_CA.crt gibt diesen Fingerabdruck auf der Konsole aus. Dieser Fingerabdruck wird am besten auf einer Doku-Wiki-Seite namens [[#zertifikat|zertifikat]] für alle angemeldeten Benutzer zum Lesen und den Administrator((wwwadmin)) zum Schreiben freigegeben. ===== Zertifikate ===== Mit dem Schlüssel der Zertifizierungsstelle werden jetzt mehrere Zertifikate erstellt. Diese müssen zwei Alternativnamen enthalten, nämlich ''server.musterschule.de'' und ''musterschule.extern.de'', weil der Server unter beiden Namen angesprochen werden kann. ==== Zertifizierungsstelle ==== Dazu müssen in der Datei ''/etc/ssl/openssl.cnf'' folgende Einträge gemacht werden: [ ca ] default_ca = Musterschule_CA [ Musterschule_CA ] dir = /etc/ssl/Musterschule_CA certificate = /etc/ssl/certs/Musterschule_CA.pem private key = $dir/private/Musterschule_CA.key RANDFILE = $dir/private/.srl ==== Request mit subjectAltName ==== Dazu müssen in der Datei ''/etc/ssl/openssl.cnf'' folgende Einträge gemacht werden: [ req ] req_extensions = v3_req [ v3_req ] subjectAltName = DNS:server.musterschule.de, DNS:musterschule.extern2.de, IP:10.16.1.1, DNS:musterschule.extern.de ==== Signierung mit subjectAltName ==== Dazu müssen in der Datei ''/etc/ssl/openssl.cnf'' folgende Einträge gemacht werden((einige Einträge sind bereits vorhanden, andere sind auskommentiert oder gar nicht vorhanden)): [ usr_cert ] basicConstraints = CA:FALSE nsCertType = server subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always issuerAltName = issuer:copy [ Musterschule_CA ] copy_extensions = copy Die Einstellung **copy_extensions** sollte nur konkret für die Erstellung eines Zertifikats aktiviert und danach wieder auskommentiert werden, da es sich um eine **Sicherheitslücke** handelt. ==== Signierung des Zertifikats ==== Die Erstellung und Signierung des Zertifikats erzeugt die Datei, die schließlich zur Identifikation des Servers verwendet wird. Die Kurzversion nach entsprechender Konfiguration der CA in der Datei ''/etc/ssl/openssl.cnf'' lautet: openssl ca -in server.csr -out server.crt Der Dialog lautet: Signature ok subject=/C=DE/ST=Musterland/L=Musterstadt/O=Musterschule/OU=Server/\ CN=server.musterschule.de/emailAddress=administrator@musterschule.de Getting CA Private Key Enter pass phrase for /etc/ssl/Musterschule_CA/private/Musterschule_CA.key: ==== Kontrolle des Zertifikats ==== Mit dem Befehl openssl x509 -in server.crt -noout -text wird der Inhalt überprüft, insbesondere das Vorhandensein von **subjectAltName**. Certificate: Data: Version: 3 (0x2) Serial Number: ... Signature Algorithm: sha1WithRSAEncryption Issuer: C=DE, ST=Musterland, L=Musterstadt, O=Musterschule, OU=Certificate Authority,\ CN=Musterschule_CA/emailAddress=root@musterschule.de Validity Not Before: ... Not After : ... Subject: C=DE, ST=Musterland, O=Musterschule, OU=Server, \ CN=server.musterschule.de/emailAddress=administrator@musterschule.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): .... Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Server Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: ... X509v3 Authority Key Identifier: keyid:... DirName:/C=DE/ST=Musterland/L=Musterstadt/O=Musterschule/OU=Certificate \ Authority/CN=Musterschule_CA/emailAddress=root@musterschule.de serial:... X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Subject Alternative Name: DNS:server.musterschule.de, DNS:musterschule.extern.de Signature Algorithm: sha1WithRSAEncryption ... ==== Server-Zertifikate ==== Zunächst muss jeweils eine Schlüsseldatei erstellt werden: Erstellung des privaten Schlüssels des Servers. openssl genrsa -des3 -out server.key 1024 mit den Rechten. server.key root:ssl-cert rw- r-- --- ==== Server-Zertifikat ==== Dieses Zertifikat wird unter ''/etc/ssl/private'' gespeichert und wird unter anderem für den LDAP-Server verwendet. **Hinweis:** Die Server-PEM-Datei muss den server.key ohne Verschlüsselung enthalten. Andernfalls startet der LDAP-Server nicht mehr. Der Befehl ist: openssl req -new -key server.key -out server.csr Der Zertifizierungsdialog ist wie folgt: 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) [Musterland]: Locality Name (eg, city) [Musterstadt]: Organization Name (eg, company) [Musterschule]: Organizational Unit Name (eg, section) []:Server Common Name (eg, YOUR name) []:server.musterschule.de Email Address []:administrator@musterschule.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: === Installation === Das Zertifikat muss unter ''/etc/ssl/private'' installiert werden. -rw-r--r-- 1 root ssl-cert 1131 12. Jan 14:50 server.crt -r-------- 1 root ssl-cert 887 12. Jan 14:39 server.key -rw-r----- 1 root ssl-cert 2018 12. Jan 14:50 server.pem ==== Webserver-Zertifikat ==== Dieses Zertifikat ist unter ''/etc/apache2/ssl'' gespeichert und identifiziert den Webserver. Der zunächst generierte Schlüssel darf kein Passwort enthalten, da dieses sonst beim Webserver-Start abgefragt wird. Das erreicht man, indem man bei **genrsa** die Option **-des3** weglässt. Der Dialog lautet: 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) [Musterland]: Locality Name (eg, city) [Musterstadt]: Organization Name (eg, company) [Musterschule]: Organizational Unit Name (eg, section) []:Webserver Common Name (eg, YOUR name) []:server.musterschule.de Email Address []:postmaster@musterschule.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: === Installation === Das Zertifikat muss unter ''/etc/apache2/ssl'' installiert werden. -rw-r--r-- 1 root ssl-cert 1131 12. Jan 14:50 server.crt -r-------- 1 root ssl-cert 887 12. Jan 14:39 server.key -rw-r----- 1 root ssl-cert 2018 12. Jan 14:50 server.pem ==== CUPS-Zertifikat ==== In der Datei **cups-files.conf** wird auf das Zertifikat und den Schlüssel verwiesen. Dort müssen die Zeilen # server certificate location ServerCertificate /etc/ssl/private/webserver/dynaccess.crt ServerKey /etc/ssl/private/webserver/dynaccess.key angepasst werden. Momentan wird hier auf /etc/ssl/private/webserver/... verwiesen. Abschließend muss der CUPS-Dämon mit service cups restart neu gestartet werden. === Installation === Das Zertifikat muss unter ''/etc/webmin'' installiert werden. Dazu werden Schlüssel und Zertifikat zunächst in einer Datei zusammengefasst: cat miniserv.key miniserv.crt >miniserv.pem und diese Datei dann mit den richtigen Rechten gespeichert. Die weiteren Dateien können dann gelöscht werden. -rw------- 1 root root 1131 12. Jan 14:50 miniserv.pem ==== IPCOP-Zertifikat (veraltet) ==== === Patchen des IPCOP === Der IPCOP akzeptiert normalerweise nur ein selbst erstelltes Zertifikat. Ein signiertes akzeptiert er nach folgendem Patch: --- /usr/local/bin/httpscert.bak 2008-11-01 13:03:06.000000000 +0100 +++ /usr/local/bin/httpscert 2012-01-14 12:35:35.000000000 +0100 @@ -28,7 +28,7 @@ ;; read) if [ -f /etc/httpd/server.key -a -f /etc/httpd/server.crt -a -f /etc/httpd/server.csr ]; then - ISSUER=`openssl x509 -in /etc/httpd/server.crt -text -noout | grep Issuer | /usr/bin/cut -f2 -d '='` + ISSUER=`openssl x509 -in /etc/httpd/server.crt -noout -text|grep "Subject:" |cut -d\, -f5|cut -d\/ -f1|cut -d\= -f2` HOSTNAME=`/bin/hostname -f` if [ "$ISSUER" != "$HOSTNAME" ]; then echo "Certificate issuer '$ISSUER' is not the same as the hostname'$HOSTNAME'" === Erstellung === Das IPCOP-Zertifikat liegt unter ''/etc/httpd/'' auf dem IPCOP. Es ist erstaunlicherweise von allen lesbar und es müssen alle drei Dateien, also server.key, server.csr und server.crt zur Verfügung stehen, andernfalls wird das Zertifikat gnadenlos neu erstellt. Dazu dient in ''rc.sysinit'' der Befehl ''httpdcert new'' an Stelle von ''httpscert read''. Der Dialog lautet: 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) [Musterland]: Locality Name (eg, city) [Musterstadt]: Organization Name (eg, company) [Musterschule]: Organizational Unit Name (eg, section) []:Proxyserver Common Name (eg, YOUR name) []:ipcop.musterschule.de Email Address []:postmaster@musterschule.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: === Installation === Mit ''scp -P 222 server.* ipcop:/etc/httpd'' die drei Dateien auf den IPCOP kopieren. Die Rechte lauten erstaunlicherweise: -rw-r--r-- 1 root root 4225 2012-01-14 12:09 server.crt -rw-r--r-- 1 root root 936 2012-01-14 12:09 server.csr -rw-r--r-- 1 root root 887 2012-01-14 12:09 server.key ===== Mozilla Firefox ===== Mozilla Firefox benutzt einen eigenen Zertifikatspeicher, der für jeden Benutzer aus den Dateien ''cert8.db'', ''key3.db'' und ''secmod.db'' besteht. Dieser Speicher kann auf dem Server mit dem Programm ''certutil'' aus dem Debian-Paket ''libnss3-tools'' bearbeitet werden. === Installationsorte === Das Zertifikat muss an mehreren Stellen installiert werden, weil die Mozilla-Datenbank an verschiedenen Stellen ist. /etc/skel/Einstellungen/... /etc/skel/.mozilla/... /home/samba/progs/Voreinstellungen/... Außerdem befindet sich in jedem User-Verzeichnis eine oder mehrere von diesen Datenbanken. Diese können am besten durch das Skript /usr/local/bin/home_reinigen.sh aktualisiert werden. Dazu werden folgende Zeilen eingefügt: gruppe=`id --name -g $user` ... # Zertifikate verteilen for f in `find .mozilla/firefox/*/cert8.db Einstellungen/firefox/cert8.db`; do DIR=`dirname $f` echo " -> Mozilla-DB in Verzeichnis($DIR)" install -o $user -g $gruppe -m 600 /etc/skel/.mozilla/firefox/standard/cert8.db $DIR/cert8.db install -o $user -g $gruppe -m 600 /etc/skel/.mozilla/firefox/standard/key3.db $DIR/key3.db install -o $user -g $gruppe -m 600 /etc/skel/.mozilla/firefox/standard/secmod.db $DIR/secmod.db if [ -e $DIR/cert_override.txt ]; then rm -f $DIR/cert_override.txt; fi done; === Installation === Dazu wechsel man in das Verzeichnis mit der Datenbank und führt folgenden Befehl aus, um das Zertifikat hinzuzufügen: certutil -d . -A -t "CT,c,c" -n "Musterschule_CA - Musterschule" -i /etc/ssl/certs/Musterschule_CA.pem ===== Quellen ===== * Die Schritte zur Erstellung sind auf der Internetseite [[http://gagravarr.org/writing/openssl-certs/ca.shtml|Zertifikate erstellen]] beschrieben. * Informationen zu alternativen Namen findet man unter [[http://techblog.lucidillusion.org/2007/10/13/ssl-certificates-with-dns-aliases/09:22/0|Alternativnamen]] und [[http://www.openssl.org/docs/apps/x509v3_config.html]]. * Allgemeine Informationen befinden sich unter [[www.absolute-cool.de/dokus/ssl/openssl|OpenSSL-Handbuch]]. * Dokumentation zu einzelnen Befehlen z.B. req, ca, x509 unter [[http://www.openssl.org/docs/apps|OpenSSL-Apps]].