Zertifikate sperren

Aus OpenVPN Wiki

Wechseln zu: Navigation, Suche

In Firmen ist es häufig nötig, erstellte Zertifikate wieder einzuziehen, z.B. wenn ein Notebook geklaut wurde oder wenn ein Mitarbeiter geht.

Um sich das Leben einfacher zu machen, gibt es eine CRL (Certificate Revocation List), die überprüft ob ein Zertifikat noch gültig ist. Dabei holt sie sich in Periodischen Abständen ihre Informationen aus der index.txt. Ich mache es absichtlich etwas ausführlicher, um auch Einsteigern, das Leben zu erleichtern.


Wir kopieren uns zuerst die openssl.cnf in ein Arbeitsverzeichnis, wer Probleme mit dem Auffinden hat benutzt 'find'.


Erstellen eines Arbeitsverzeichnises zwecks Übersichtlichkeit

mkdir /opt/sslcnf


Suchen der openssl.cnf (bei mir /etc/ssl/ )

find / -name openssl.cnf


Kopieren ins Arbeitsverzeichnis

cp /etc/ssl/openssl.cnf /opt/sslcnf/


Damit Openssl auch weiß, welche Konfig wir nun verwenden:

export OPENSSL_CONF=/opt/sslcnf/openssl.cnf

Kleiner Nachtrag: Linux hat die Angewohntheit bei neuen Shells den neuen eintrag einfach rauszukicken. Wer sichergehen will, dass immer die OPENSSL_CONF verwendet wird, wechselt nach /etc und legt eine profile.local an in die er dann den "export ..." Befehl hineinschreibt.

Überprüfung, ob OPENSSL_CONF richtig gesettz wurde

env | grep OPENSSL_CONF


Nun erstellen wir uns eine index.txt und serial, falls noch nicht geschehen (sollte aber jeder haben, wenn man sich ans OpenVPN Tutorial gehalten hat)

ovpn:/opt/sslcnf # touch index.txt
ovpn:/opt/sslcnf # touch serial && echo 01 >> serial

Die Serial wird mit jedem erstellten Zertifikat hochgezählt, wir beginnen bei 1 Smile

Dannach gehts weiter mit ein paar Anpassungen der openssl.cnf, dabei gehe ich aber nur auf die Grundlegenden Einstellungen für unsere CRL ein

dir             = /opt/sslcnf              # Die Variable für unser AV
certs           = /pfad zu certs            # Wo liegen unsere Certs?
crl_dir         = $dir/crl              # Da liegt unsere crl
database        = $dir/index.txt        # Unsere index.txt
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = /pfad zur vpn-ca      # unser stammzertifikat
serial          = $dir/serial           # unsere serial datei
#crlnumber      = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CR
L
crl             = $dir/crl.pem          # die CRL Datei
private_key     = $dir/private/cakey.pem# unser privater Key
RANDFILE        = $dir/private/.rand    # private random number file


Wollen wir schon ein Zertifikat verbieten, dann machen wir das mit dem Befehl:

ovpn:/opt/sslcnf # openssl ca -revoke /opt/openvpn/certs/client1_cert.pem


Daraufhin ein paar Meldungen und die Bitte, das Passwort für unseren cakey einzugeben:

Using configuration from /opt/openssl.cnf
5194:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:329:group=CA_default name=unique_subject
Enter pass phrase for /opt/openvpn/certs/vpn-cakey.pem:
DEBUG[load_index]: unique_subject = "yes"
Adding Entry with serial number 03 to DB for /C=DE/ST=Some-State/L=munic/O=bea/CN=04
Revoking Certificate 03.
Data Base Updated


Daraufhin wird die index.txt automatisch erweitert:

R       160515125947Z   060531105703Z   03      unknown /C=DE/ST=Some-State/L=munic/O=bea/CN=04

Das R steht für Revoked, V für Valid und E für Expired.

Nachdem dies geschehen ist, erstellen wir uns die CRL. Mit -crlhours 1 geben wir an, wie oft diese aktualisiert wird (jede Stunde..)

ovpn:/opt/sslcnf # openssl ca -gencrl -crlhours 1 -out crl.pem


Da man mit 'less crl.pem' nur kryptisches gekürzel erhält sehen wir uns die Datei mit folgedem Befehl an:

openssl crl -in crl.pem -noout -text


Das ganze sollte dann ungefähr so aussehen:

Certificate Revocation List (CRL):
        Version 1 (0x0)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: /C=DE/L=munic/O=bea/CN=02
        Last Update: May 31 09:29:18 2006 GMT
        Next Update: Jun 30 09:29:18 2006 GMT
Revoked Certificates:
    Serial Number: 03
        Revocation Date: May 31 08:16:21 2006 GMT
    Signature Algorithm: md5WithRSAEncryption
        12:e3:03:df:55:a0:5b:37:93:8a:48:43:00:c3:fc:b4:e8:fd:
        e3:f9:c0:29:2e:da:b6:a8:ef:d1:f0:6b:a9:5b:b6:9c:d9:4c:
        df:a1:87:e6:cd:f0:5d:cd:58:25:41:eb:9a:a2:73:ce:41:ae:
        1c:82:c5:ba:f6:6b:b8:7a:7b:b8:49:82:cc:63:32:d7:9e:4d:
        88:46:86:11:4c:82:1c:58:b8:b7:ad:1a:ca:4c:af:fd:dd:8a:
        c1:c3:7f:2d:46:da:24:2c:59:6e:4e:c9:16:a3:79:27:95:82:
        dc:7d:44:b3:95:38:0f:71:bf:6f:e3:66:d8:1e:3b:d6:27:14:
        94:75:39:51:51:b8:c8:19:9c:8e:22:8b:b7:f0:19:0f:bd:db:
        05:24:db:23:e8:25:6a:28:ca:38:cc:ea:3a:ea:0a:c0:51:04:
        5f:df:ad:63:58:ca:be:c9:01:2d:e4:40:7a:ba:15:30:04:c5:
        1a:e9:7a:cc:2c:05:39:5b:86:46:0a:87:f5:17:15:5e:78:64:
        98:6d:25:93:11:39:e5:a7:43:e6:db:f0:21:30:4d:8f:34:e2:
        8c:d6:22:c5:68:d9:f6:6a:c9:b7:6f:5c:b0:0b:a5:5e:75:00:
        af:65:70:60:8f:05:8e:95:03:10:75:05:06:6d:60:1f:69:1b:
        12:68:12:c1


Als letztes sagen wir unserem VPN Server noch, dass wir mit einer CRL Liste arbeiten, die er sich doch bitte ansehen soll. Dazu fügen wir folgende Zeile in die VPN-Konfig

crl-verify /opt/sslcnf/crl.pem


Wenn wir nun mit dem revoke-befehl (siehe oben) Zertifikate aussperren, wird diese in einer Stunde in unsere CRL eingetragen. Wer nicht warten will, erstellt sich nach dem revoke eine neue CRL mit gleichem Namen, die alte wird überschrieben.

Sollte aus Versehen ein Zertifikat gesperrt werden, löscht man den entsprechenden Eintrag aus der index.txt, wartet auf die nächste Aktualisierung oder erstellt die CRL neu.

Persönliche Werkzeuge