Good to Know Database

Raspbian Jessie: HTTPS mit Client-Zertifikaten


Das folgende Tutorial baut auf dem Tutorial Raspbian Jessie: HTTPS mit Apache2 und OpenSSL auf und zeigt Ihnen wie Sie einen HTTPS-Server zusätzlich mit Client-Zertifikaten absichern können.

Client-Zertifikate erstellen

Zuerst erstellen Sie einen privaten RSA-Schlüssel für den Benutzer.

pi@raspberrypi ~ $ sudo openssl genrsa -des3 -out /etc/ssl/apache2/certs/kainzbauerge.key 1024
Generating RSA private key, 1024 bit long modulus
...++++++
...++++++
e is 65537 (0x10001)
Enter pass phrase for /etc/ssl/apache2/certs/kainzbauerge.key:StrengGeheim
Verifying - Enter pass phrase for /etc/ssl/apache2/certs/kainzbauerge.key:StrengGeheim

Anschließend wird ein Certificate Signing Request (CSR) erzeugt.

pi@raspberrypi ~ $ sudo openssl req -new -key /etc/ssl/apache2/certs/kainzbauerge.key -out /etc/ssl/apache2/certs/kainzbauerge.csr
Enter pass phrase for /etc/ssl/apache2/certs/kainzbauerge.key:StrengGeheim
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) [AU]:DE
State or Province Name (full name) [Some-State]:Bayern
Locality Name (eg, city) []:Woerth an der Donau
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Privat
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:Georg Kainzbauer
Email Address []:georg@home.lan

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Der nächste Befehl generiert das Zertifikat.

pi@raspberrypi ~ $ sudo openssl x509 -req -in /etc/ssl/apache2/certs/kainzbauerge.csr -out /etc/ssl/apache2/certs/kainzbauerge.crt -sha1 -CA /etc/ssl/apache2/certs/ca.crt -CAkey /etc/ssl/apache2/certs/ca.key -CAcreateserial -days 3650
Signature ok
subject=/C=DE/ST=Bayern/L=Brennberg/O=Privat/OU=IT/CN=Georg Kainzbauer/emailAddress=georg@home.lan
Getting CA Private Key
Enter pass phrase for /etc/ssl/apache2/certs/ca.key:StrengGeheim

Jetzt müssen Sie noch eine PKCS#12 (Public Key Cryptography Standards #12) Datei erstellen in welcher der private Schlüssel und das zugehörige Zertifikat passwortgeschützt gespeichert wird.

Hinweis: Das Export Password benötigen Sie später beim Importieren des Zertifikats wieder.

pi@raspberrypi ~ $ sudo openssl pkcs12 -export -in /etc/ssl/apache2/certs/kainzbauerge.crt -inkey /etc/ssl/apache2/certs/kainzbauerge.key -name "Georg Kainzbauer" -out /etc/ssl/apache2/certs/kainzbauerge.p12
Enter pass phrase for /etc/ssl/apache2/certs/kainzbauerge.key:StrengGeheim
Enter Export Password:StrengGeheim
Verifying - Enter Export Password:StrengGeheim

Die Details der PKCS#12 Datei können Sie sich mit dem folgenden Befehl ansehen.

pi@raspberrypi ~ $ openssl pkcs12 -in /etc/ssl/apache2/certs/kainzbauerge.p12 -clcerts -nokeys -info
Enter Import Password:StrengGeheim
MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
    localKeyID: B5 D6 02 8C AD 36 86 A8 66 47 AF A9 0F 3C 48 82 53 63 B0 50
    friendlyName: Georg Kainzbauer
subject=/C=DE/ST=Bayern/L=Brennberg/O=Privat/OU=IT/CN=Georg Kainzbauer/emailAddress=georg@home.lan
issuer=/C=DE/ST=Bayern/L=Brennberg/O=Privat/OU=IT/CN=ca.home.lan/emailAddress=root@localhost
-----BEGIN CERTIFICATE-----
MIIDCTCCAfECCQCBjJf32mH40DANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMC
REUxDzANBgNVBAgMBkJheWVybjESMBAGA1UEBwwJQnJlbm5iZXJnMQ8wDQYDVQQK
DAZQcml2YXQxCzAJBgNVBAsMAklUMRQwEgYDVQQDDAtjYS5ob21lLmxhbjEdMBsG
CSqGSIb3DQEJARYOcm9vdEBsb2NhbGhvc3QwHhcNMTYxMTIyMTk0MzMzWhcNMjYx
MTIwMTk0MzMzWjCBijELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJheWVybjESMBAG
A1UEBwwJQnJlbm5iZXJnMQ8wDQYDVQQKDAZQcml2YXQxCzAJBgNVBAsMAklUMRkw
FwYDVQQDDBBHZW9yZyBLYWluemJhdWVyMR0wGwYJKoZIhvcNAQkBFg5nZW9yZ0Bo
b21lLmxhbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvDCYGjkpYrrdr7dR
u9HLQK7xcQ98r7nWNJRnsSjjw4yVbIM7ptFwWDeXhHS/qsBX3hTJ/nb5XwYGV3th
ni6XxxqN0uKbhKTcUZSOFDqXyqsu7fnYF6csvO0PutT9ryo7e7Uof6X7YCgvrHsN
JSakfLin9pebbJDXq0kksPn29BECAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAr+M1
AysnReO8EyGJb1Vrl+mrgDDCvEpfsCuCUnFUHPMRyfVnKYpJ2qAU5U8vuCxRjs8f
/Ks6Rdl/5IBEgE7I5rqG8ad1LVIgqKZUOf8J1muJdaLTLdYMOoi7WmHAXZ03bTwS
4RwbiqUJ2zBJvmA0SZZwXZkcq6WNtd6m61TuJ22wHHmk5g/3sHWHK9fQhLGlEj1a
e13iXMHxcnLQzKX8LfFrELjbISXd8P+AUarjO6bllnbUWU7Ph41AyJFd28TBPCIU
B3eQyX22WY0o8/O84mm6vzshTQGjh7o2XlrjkXrbrr6BuDVUa76HgXCXaiFVm3Gw
sFciwSljiVaMym28jA==
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048

Aus Sicherheitsgründen sollten Sie jetzt wieder die Rechte der erzeugten Dateien ändern.

pi@raspberrypi ~ $ sudo chmod 0600 /etc/ssl/apache2/certs/*

Apache2 konfigurieren

Öffnen Sie die Konfigurationsdatei /etc/apache2/sites-available/default-ssl.conf mit einem Editor.

pi@raspberrypi ~ $ sudo vi /etc/apache2/sites-available/default-ssl.conf

Suchen Sie hier nach dem folgenden Abschnitt.

#   Client Authentication (Type):
#   Client certificate verification type and depth.  Types are
#   none, optional, require and optional_no_ca.  Depth is a
#   number which specifies how deeply to verify the certificate
#   issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth  10

Ändern Sie die Optionen SSLVerifyClient und SSLVerifyDepth wie folgt ab.

SSLVerifyClient require
SSLVerifyDepth  1

Nachdem Sie die Änderungen gespeichert haben, müssen Sie den Webserver neu starten.

pi@raspberrypi ~ $ sudo /etc/init.d/apache2 restart

Client-Zertifikate importieren

Bevor Sie wieder auf Ihren HTTPS-Webserver zugreifen können, müssen Sie das Client-Zertifikat im Browser importieren. Dazu müssen Sie zuerst die Datei /etc/ssl/apache2/certs/kainzbauerge.p12 auf einem sicheren Weg (z.B. SCP, verschlüsselte E-Mail, USB-Stick, ...) auf Ihren Client kopieren.

Ich möchte Ihnen hier nur kurz die Schritte zeigen, wie Sie das Client-Zertifikat im Firefox 24 importieren.

Firefox 50

Nachdem Sie Firefox gestartet haben, öffnen Sie das Menü Extras (unter Windows) beziehungsweise Bearbeiten (unter Linux) und wählen Einstellungen aus. Öffnen Sie jetzt das Register Erweitert und anschließend das Register Zertifikate. Klicken Sie nun auf Zertifikate anzeigen. Im Register Ihre Zertifikate klicken Sie auf Importieren... und öffnen die Datei kainzbauerge.p12. Geben Sie das Passwort ein und schließen danach alle Fenster mit OK. Zum Abschluss rufen Sie eine Webseite auf Ihrem HTTPS-Webserver auf und akzeptieren das Server-Zertifikat.


Dieser Eintrag wurde am 23.11.2016 erstellt.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2862.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer