SuperX

KontaktMail für InfosSuchenLogin

Einrichten von SSL beim Apache 2.x unter SuSE Linux

Das Modul ssl ist im Apache 2.x nicht mehr separat zu installieren, sondern bereits im Lieferumfang enthalten, das Modul muss nur in den entsprechenden LoadModule und Include-Abschnitten geladen werden.

Wir führen alle Schritte als user root durch, und gehen z.B. davon aus, dass wir uns im Verzeichnis /root befinden.

Zunächst muss ein Zertifikat erzeugt werden. Das öffentliche CA-Zertifikat liegt z.B. in /root/demoCA/cacert.pem und der private Schlüssel liegt in /root/demoCA/private/cakey.pem..

Nun werden die Schlüssel dem Apache2 bekannt gemacht. Die einzelnen Konfigurationsparameter werden bei SuSE Linux über die Sysconfig gesetzt:

SuSE-typisch wird die Konfiguration in einer Datei im Verzeichnis /etc/sysconfig abgelegt, nämlich in apache2. Dort setzen Sie in der Direktive

APACHE_CONF_INCLUDE_FILES="/home/superx/webserver/tomcat/conf/superx_mod_jk.conf /etc/apache2/vhosts.d/myhost-ssl.conf"

die Tomcat-Anbindung und den Virtuellen SSL-Host. Letzteren konfigurieren Sie am besten, indem Sie die Vorlage /etc/apache2/vhosts.d/vhost-ssl.template kopieren, z.b. wie oben nach myhost-ssl.conf.

Weiter unten in /etc/sysconfig/apache2 setzen Sie die Direktive

APACHE_SERVER_FLAGS="SSL"

Damit werden in verschiedenen anderen conf-Dateien die Abfragen

Nach dem Ändern der Datei /etc/sysconfig/apache2 müssen Sie als User root das Script SuSEconfig ausführen.

Bei anderen Linux-Distributionen entfällt die sysconfig. Auch unabhängig von der Distribution wird beim Apache2 nicht mehr die gesamte Konfiguration in einer großen httpd.conf gesammelt, sondern in separaten conf-Dateien. Bei virtuellen Hosts zum Beispiel befinden sich die Konfigurationen in Dateien mit der Endung *.conf im Verzeichnis vhosts.d. Der Startpunkt ist aber immer die httpd.conf (standardmäßig in /etc/apache2).

Wenn Sie keine Virtual Hosts nutzen, dann können Sie den Abschnitt, der im Konfigurationsbeispiel /etc/apache2/vhosts.d/vhost-ssl.template beschrieben ist auch in der Datei /etc/apache2/default-server.conf einfügen:

/etc/apache2/default-server.conf

##
## SSL Virtual Host Context
##
SSLCertificateFile /root/demoCA/cacert.pem
#SSLCertificateFile /etc/apache2/ssl.crt/server.crt
#SSLCertificateFile /etc/apache2/ssl.crt/server-dsa.crt
#  Server Private Key:
#  If the key is not combined with the certificate, use this
#  directive to point at the key file. Keep in mind that if
#  you've both a RSA and a DSA private key you can configure
#  both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /root/demoCA/private/cakey.pem
#SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
#SSLCertificateKeyFile /etc/apache2/ssl.key/server-dsa.key
...

Danach müssen Sie in /etc/sysconfig/apache2 die Systemvariable HTTPD_START_TIMEOUT auf einen sinnvollen Wert setzen, z.B. 10. Danach wie immer SuSEconfig ausführen.

Sie haben dann beim Start des Apache 10 Sek. Zeit, dass CA-Passwort einzugeben.

Wenn sie wünschen, dass der Apache beim Booten ohne Passwort-Abfrage startet, dann müssen Sie das CA-Passwort löschen und die Leserechte für den privaten Schlüssel ändern (nur root und der Apache-Daemon haben Leserecht)

Auch in der offiziellen Doku von mod_ssl wird dies empfohlen, mit dem Zusatz,dass nur root und der apache-daemon diese Datei lesen darf.

http://www.modssl.org/docs/2.0/#FAQ-nopass

. Dies ist allerdings ein Sicherheitsrisiko; der Server wird leichter kompromittierbar, wenn ein Hacker auf den Rechner kommt und die Datei lesen kann, kann er den Schlüssel missbrauchen. Unserer Erfahrung nach ist aber nur dieser Weg gangbar, denn bei einem Reboot nach Stromausfall würde der gesamte Webserver sonst nicht laufen!

Wir geben als root im Verzeichnis /root/demoCA/private ein:

openssl rsa -in cakey.pem -out cakey2.pem

(1x mit der Passphrase bestätigen).

Dann wird ein Schlüssel ohne Passphrase erzeugt. Wenn wir diesen dann wiederum in /etc/httpd/httpd.conf eintragen:

#SSLCertificateKeyFile /root/demoCA/private/cakey.pem
SSLCertificateKeyFile /root/demoCA/private/cakey2.pem

Dann startet der Apache ohne Passwortabfrage. In diesem Fall kann man auch die Variable HTTPD_START_TIMEOUT auf 1 zurücksetzen.

Wenn Sie Ihr Zertifikat bei einer Zertifizierungstelle signieren lassen möchten, müssen eine outline|Zertifizierungsanfrage erstellen.

Mit dem oben erstellten CA-Zertifikat können Sie Ihr http-Zertifikat folgendermaßen selbst signieren:

/usr/share/ssl/misc/CA.sh -sign

Es wird eine Datei newcert.pem erzeugt. Nachdem Sie nun ein signiertes Zertifikat für Ihre Anwendung erstellt haben, müssen Sie dieses nur noch in das entsprechende Verzeichnis kopieren und in der Konfigurationsdatei eintragen. Der Apache erwartet den privaten Schlüssel in einer separaten Datei, in solchen Fällen können Sie den privaten Schlüssel wie folgt extrahieren

openssl rsa -in newreq.pem -out newkey.pem