Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:erweiterungen:ca]] 

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 Musterschule_CA-Zertifikat bereitgestellt1).

  1. 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.

  2. 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-- --- ---
  3. 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.

  4. 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 für alle angemeldeten Benutzer zum Lesen und den Administrator2) 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 werden3):

[ 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

1)
Es handelt sich um eine Verknüpfung zum erstgenannten Ort
2)
wwwadmin
3)
einige Einträge sind bereits vorhanden, andere sind auskommentiert oder gar nicht vorhanden
 [[anwenderwiki:erweiterungen:ca]] anwenderwiki/erweiterungen/ca.txt · Zuletzt geändert: 2015/04/26 14:20 von 127.0.0.1