Good to Know Database

Raspbian Wheezy: HTTPS mit Apache2 und OpenSSL


Wie bereits in der Anleitung Raspbian Wheezy: Webserver mit Apache2, PHP und MySQL installieren beschrieben ist ein Webserver mit Apache2 sehr schnell konfiguriert. Standardmäßig lässt dieser aber nur unverschlüsselte Zugriffe über das HTTP-Protokoll (Hypertext Transfer Protocol) zu. Sollten Sie auf Sicherheit achten, können Sie Apache2 um die Unterstützung von SSL (Secure Sockets Layer) erweitern und so das HTTPS-Protokoll (Hypertext Transfer Protocol Secure) für den verschlüsselten Zugriff auf den Webserver nutzen.

Die folgende Anleitung soll Ihnen zeigen, wie Sie auf Ihrem Raspberry Pi unter Raspbian den Webserver Apache2 installieren, mit OpenSSL die benötigten Zertifikate für einen verschlüsselten Zugriff auf den Webserver erstellen und diese in Apache2 einbinden. Als Grundlage für die folgende Anleitung wurde das momentan aktuelle Raspbian Image vom 25.09.2013 (2013-09-25-wheezy-raspbian.zip) verwendet.

Apache2 installieren

Sollten Sie Apache2 noch nicht installiert haben, können Sie Apache2 wie folgt installieren. Bevor Sie jedoch mit der Installation loslegen, sollten Sie die lokale Paketdatenbank aktualisieren.

pi@raspberrypi ~ $ sudo apt-get update

Mit dem nachfolgenden Befehl können Sie jetzt den Webserver Apache2 installieren.

pi@raspberrypi ~ $ sudo apt-get install apache2

Im Anschluss an die Installation wird in der Regel der Apache2-Daemon automatisch gestartet. Dies können Sie mit dem folgenden Befehl überprüfen.

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

Eigene Certificate Authority (CA) einrichten

Zuerst erstellen Sie ein Verzeichnis in welchem die nachfolgenden Zertifikate erstellt und aufbewahrt werden.

pi@raspberrypi ~ $ sudo mkdir -p /etc/ssl/apache2/certs

Erstellen Sie jetzt mit dem folgenden Befehl einen Certificate Authority (CA) Schlüssel. Während diesem Vorgang müssen Sie ein Passwort vergeben welches Sie im weiteren Verlauf noch öfters benötigen werden.

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

Nachdem der CA-Schlüssel erstellt wurde, wird die Certificate Authority erzeugt. Mit dem Parameter -days wird angegeben wie lange der Schlüssel gültig sein soll (hier 10 Jahre).

pi@raspberrypi ~ $ sudo openssl req -new -x509 -days 3650 -key /etc/ssl/apache2/certs/ca.key -out /etc/ssl/apache2/certs/ca.crt
Enter pass phrase for /etc/ssl/apache2/certs/ca.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) []:ca.home.lan
Email Address []:root@localhost

Mit dem folgenden Befehl können Sie sich die Details des Zertifikats ansehen.

pi@raspberrypi ~ $ openssl x509 -in /etc/ssl/apache2/certs/ca.crt -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            f4:ad:29:2e:51:3f:14:99
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=DE, ST=Bayern, L=Woerth an der Donau, O=Privat, OU=IT, CN=ca.home.lan/emailAddress=root@localhost
        Validity
            Not Before: Sep 29 12:44:25 2013 GMT
            Not After : Sep 27 12:44:25 2023 GMT
        Subject: C=DE, ST=Bayern, L=Woerth an der Donau, O=Privat, OU=IT, CN=ca.home.lan/emailAddress=root@localhost
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d0:ef:67:11:83:50:09:00:4e:f0:a8:09:d8:37:
                    08:c9:13:3a:f4:41:35:0c:02:fe:7a:8e:3e:d4:7a:
                    30:75:8b:f8:ca:73:4d:18:43:04:48:8d:f2:35:80:
                    ac:20:70:82:e5:1b:bf:ed:31:b7:7c:62:2d:80:90:
                    81:c1:50:42:fe:23:33:ab:02:5a:e5:6f:a4:02:18:
                    df:b1:91:ce:da:75:e9:48:d8:2c:b8:a7:10:27:5c:
                    d0:65:3f:d9:f2:c5:14:fb:d5:6d:75:45:9c:c6:5d:
                    60:1f:41:d4:32:95:6e:26:4f:80:7a:86:2e:74:33:
                    bb:1a:41:b5:86:83:d6:a3:cd:21:09:95:cf:c5:d3:
                    29:d2:9d:49:61:10:dc:f8:31:09:38:9b:5c:d9:fc:
                    81:76:83:57:63:ed:5e:3f:8c:e3:32:89:f3:ea:5d:
                    04:7a:25:f2:31:c0:dc:29:24:55:82:a1:ba:ba:67:
                    57:c2:0f:50:d0:bd:dd:40:ca:6c:cb:9c:d6:10:f8:
                    9f:37:fe:68:40:d3:90:3f:e4:b1:68:ac:af:f6:b9:
                    b2:1f:6e:94:00:94:26:31:d4:7a:cb:cb:07:3f:62:
                    c9:d2:a9:93:8a:f5:0c:e2:85:78:88:5f:ea:06:4b:
                    91:89:70:3a:fd:c4:6d:4a:51:e9:b2:eb:ba:67:23:
                    7e:95
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                04:54:AE:09:9E:92:B7:90:71:17:6F:58:E3:DD:5B:AB:06:97:CF:1F
            X509v3 Authority Key Identifier:
                keyid:04:54:AE:09:9E:92:B7:90:71:17:6F:58:E3:DD:5B:AB:06:97:CF:1F

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha1WithRSAEncryption
         89:56:09:e9:f0:82:e3:62:1a:e8:64:42:07:39:12:50:2a:2e:
         71:b0:3b:2a:63:9c:8d:a6:cf:16:6a:cf:8f:7e:da:90:f4:c3:
         85:d3:6c:71:92:67:e0:2c:38:bd:9a:d3:db:78:5e:ea:1f:d8:
         16:b7:1d:93:a7:09:6a:05:df:5e:e9:3d:7b:20:4d:6f:51:b3:
         46:c5:c3:8f:ff:8c:77:cb:25:f0:3e:ec:74:b1:da:51:fb:79:
         83:8a:b6:59:a9:ee:31:b8:ba:f9:f6:97:ec:90:a1:29:e2:f2:
         cc:77:ed:06:63:13:64:1d:8d:e1:7f:71:48:30:c7:70:41:25:
         b3:c8:05:01:38:ea:3b:ba:84:88:2b:22:43:5d:8d:65:67:36:
         57:10:fd:67:6b:0d:87:c0:81:9d:e3:a3:4d:03:b0:fe:39:c7:
         72:67:13:fa:45:7c:39:47:b5:73:34:4f:8f:a0:25:a5:fb:96:
         a6:5a:16:c0:86:6e:fb:c7:56:93:b8:33:97:72:ef:9b:e7:65:
         cb:ae:d9:52:2c:be:6a:8e:93:e9:e1:91:c0:02:08:48:49:3d:
         76:eb:b3:7b:10:93:60:02:04:db:8e:90:02:79:5e:c0:29:b9:
         60:34:85:10:a4:f0:e7:d3:e1:90:e0:76:2f:31:a8:53:f5:33:
         3d:fc:55:fd

Schlüssel und Zertifikat für den Webserver erstellen

Nachdem Sie Ihre eigene Certificate Authority (CA) eingerichtet haben, können Sie jetzt den Schlüssel und das Zertifikat für den Webserver erstellen. Zuerst erstellen Sie einen privaten RSA-Schlüssel für den Webserver.

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

Anschließend erzeugen Sie einen Certificate Signing Request (CSR) für den Server.

Hinweis: Als Common Name müssen Sie den Domain Namen angeben über welchen der Webserver angesprochen wird.

pi@raspberrypi ~ $ sudo openssl req -new -key /etc/ssl/apache2/certs/server.key -out /etc/ssl/apache2/certs/server.csr
Enter pass phrase for /etc/ssl/apache2/certs/server.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) []:raspberrypi.home.lan
Email Address []:root@localhost

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

Mit dem nächsten Befehl wird das Zertifikat für den Webserver erzeugt.

pi@raspberrypi ~ $ sudo openssl x509 -req -in /etc/ssl/apache2/certs/server.csr -out /etc/ssl/apache2/certs/server.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=Woerth an der Donau/O=Privat/OU=IT/CN=raspberrypi.home.lan/emailAddress=root@localhost
Getting CA Private Key
Enter pass phrase for /etc/ssl/apache2/certs/ca.key:StrengGeheim

Auch hier können Sie sich die Details des Zertifikats anzeigen lassen.

pi@raspberrypi ~ $ openssl x509 -in /etc/ssl/apache2/certs/server.crt -text -noout
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            d5:a3:57:f4:2c:1a:17:3e
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=DE, ST=Bayern, L=Woerth an der Donau, O=Privat, OU=IT, CN=ca.home.lan/emailAddress=root@localhost
        Validity
            Not Before: Sep 29 12:47:11 2013 GMT
            Not After : Sep 27 12:47:11 2023 GMT
        Subject: C=DE, ST=Bayern, L=Woerth an der Donau, O=Privat, OU=IT, CN=raspberrypi.home.lan/emailAddress=root@localhost
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
                Modulus:
                    00:d2:dc:f2:67:51:d1:b5:81:e8:98:a7:b6:94:39:
                    38:e1:27:fc:47:8e:eb:0d:86:5d:b1:63:1e:1f:02:
                    fc:11:60:3b:43:1b:e1:7d:58:8e:f2:8c:2d:91:58:
                    c6:6f:de:5d:5e:2e:2a:5a:61:4c:90:bd:55:8d:27:
                    13:46:9b:01:5e:05:bb:16:15:78:15:a8:cf:76:16:
                    c0:5d:2e:c8:08:aa:9f:74:cb:d2:69:4e:f2:ca:54:
                    f4:e2:f8:54:f0:29:0d:10:04:2a:4d:67:99:c3:43:
                    c8:8e:68:7b:06:93:cf:58:52:3b:6d:00:bc:45:40:
                    8f:6b:76:b7:7d:41:12:90:19
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha1WithRSAEncryption
         ab:8e:d8:e9:59:3c:e2:10:f1:4d:47:0b:8f:96:a9:75:2e:0a:
         96:d5:0c:4f:fe:e1:2f:37:2f:0c:f3:0b:56:af:e0:60:3d:6a:
         4c:42:4f:9f:5a:06:97:5d:41:70:aa:b3:03:96:72:9f:45:48:
         aa:dd:64:91:29:f4:89:ce:c5:96:66:73:db:c4:2b:c0:1b:1f:
         37:aa:c0:4d:47:06:3a:14:cb:ac:3e:99:39:80:29:44:64:d5:
         73:1d:98:52:73:3c:9e:e0:da:68:6c:67:3f:95:ed:0f:10:94:
         f1:fa:cb:92:90:d4:dd:07:19:65:c2:5f:f0:27:51:28:e4:88:
         2a:ba:ed:9c:e7:41:47:f3:96:ed:07:29:5c:3a:74:2d:cb:17:
         bb:e0:12:93:29:04:e1:90:cf:72:ce:3f:5f:c5:65:ca:a2:70:
         a4:5a:f9:95:03:7b:15:76:04:de:f5:eb:e8:4e:f8:b9:26:43:
         8f:98:79:98:53:db:29:c6:32:67:c4:d8:6c:68:00:ba:cd:2e:
         a6:39:34:ec:6e:31:1f:c3:19:3f:0f:c4:76:00:50:8f:d9:cb:
         54:e4:44:f8:ef:e0:30:8a:ef:39:eb:3e:62:be:45:91:a8:40:
         25:78:6d:25:3f:85:d7:3c:66:95:94:24:c0:67:53:eb:63:d5:
         0c:9f:42:f4

Wenn Sie den soeben erstellen Server-Schlüssel einsetzen, werden Sie bei jedem (Neu-)Start des Webservers zur Eingabe des zugehörigen Passwortes aufgefordert. Dies ist eine Sicherheitsfunktion welche Sie aber wie folgt umgehen können. Dadurch ist es dann wieder möglich, dass der Webserver wieder automatisch gestartet wird.

Erstellen Sie zuerst eine Kopie des Server-Schlüssels.

pi@raspberrypi ~ $ sudo cp /etc/ssl/apache2/certs/server.key /etc/ssl/apache2/certs/server.key.org

Anschließend rufen Sie den folgenden Befehl auf und geben das Passwort für Ihren Server-Schlüssel ein.

pi@raspberrypi ~ $ sudo openssl rsa -in /etc/ssl/apache2/certs/server.key.org -out /etc/ssl/apache2/certs/server.key
Enter pass phrase for /etc/ssl/apache2/certs/server.key.org:StrengGeheim
writing RSA key

Aus Sicherheitsgründen sollten Sie jetzt die Rechte der erzeugten Dateien ändern, damit andere Benutzer diese nicht lesen beziehungsweise kopieren können.

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

Apache2 konfigurieren

Da Sie jetzt alle benötigten Schlüssel und Zertifikate erstellt haben, kommen wir nun zur Apache2-Konfiguration. Zuerst erstellen Sie ein Verzeichnis in welches anschließend die von Apache2 benötigten Schlüssel und Zertifikate kopiert werden.

pi@raspberrypi ~ $ sudo mkdir -p /etc/apache2/ssl
pi@raspberrypi ~ $ sudo cp /etc/ssl/apache2/certs/ca.crt /etc/ssl/apache2/certs/server.crt /etc/ssl/apache2/certs/server.key /etc/apache2/ssl/

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

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

Suchen Sie nach der Option SSLCertificateFile und geben hier das Server Zertifikat an.

        SSLCertificateFile /etc/apache2/ssl/server.crt

Mit der Option SSLCertificateKeyFile müssen Sie den privaten Server Schlüssel angeben.

        SSLCertificateKeyFile /etc/apache2/ssl/server.key

Ihr Certificate Authority Zertifikat müssen Sie bei der Option SSLCertificateChainFile angeben.

        SSLCertificateChainFile /etc/apache2/ssl/ca.crt

Auch bei der Option SSLCACertificateFile wird das Certificate Authority Zertifikat eingetragen.

        SSLCACertificateFile /etc/apache2/ssl/ca.crt

Nachdem Sie diese Änderungen vorgenommen und abgespeichert haben, aktivieren Sie mit dem folgenden Befehl die VHost-Konfiguration default-ssl.

pi@raspberrypi ~ $ sudo a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
  service apache2 reload

Das SSL-Modul für den Apache2-Webserver müssen Sie noch mit dem folgenden Befehl aktivieren.

pi@raspberrypi ~ $ sudo a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  service apache2 restart

Nachdem Sie die SSL-Unterstützung konfiguriert haben, müssen Sie den Apache2-Daemon neu starten.

Hinweis: Sollten Sie das Passwort des Server-Schlüssels nicht entfernt haben, müssen Sie dieses eingeben bevor der Webserver gestartet wird.

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

Zur Kontrolle ob der Webserver auch auf dem TCP-Port 443 lauscht und so den Zugriff über HTTPS erlaubt, können Sie den folgenden Befehl aufrufen. In der Ausgabe sollten Sie einen entsprechenden Eintrag für den TCP-Port 443 vorfinden.

pi@raspberrypi ~ $ sudo netstat -tulpen
Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      0          4078        2494/apache2
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          4076        2494/apache2
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          2645        2132/sshd
udp        0      0 192.168.10.52:123       0.0.0.0:*                           0          2610        2098/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           0          2609        2098/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           0          2605        2098/ntpd
udp        0      0 0.0.0.0:68              0.0.0.0:*                           0          2363        2001/dhclient
udp        0      0 0.0.0.0:39509           0.0.0.0:*                           0          2342        2001/dhclient

Weiterführende Tutorials

Raspbian Wheezy: HTTPS mit Client-Zertifikaten
Raspbian Wheezy: Apache2 meldet "Could not reliably determine the server's fully qualified domain name"
Raspbian Wheezy: Zugriff auf den Apache2-Webserver nur über HTTPS erlauben


Dieser Eintrag wurde am 01.10.2013 erstellt und zuletzt am 25.09.2016 bearbeitet.

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

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer