Linux als SOHO-Server

für Linux- und Windows-Clients
http://linux.eusterholz.dyndns.org

Kapitel:

Home
Debian Installation
Debian Etc.
Internet-Zugang
Telnet
FTP
r-Utilities
SSH
Printing
NTP
Nameserver
NFS/NIS/Automount
Samba (SMB-Server)
Apache (WEB-Server)
Modem / ISDN
Backup
Etc.


SSL

Installation/Konfiguration ] Status/Info ] UserDir ] Virtuelle Hosts ] Authentifizierung ] CGI ] mod_perl ] PHP ] SSI ] [ SSL ] WebDAV ] Log-Dateien ] ht://Dig ]


SSL (Secure Socket Layer) ist ein Protokoll zur verschlüsselten Datenübertragung. Für den Apache-Server gibt es ein entsprechendes SSL-Modul ('mod_ssl'), mit den es möglich ist eine gesicherte Übertragung zu gewährleisten. Dieses Prinzip der gesicherten Verbindung findet man z.B. beim Online-Shopping oder Online-Banking wieder.

SSL basiert auf einer asymmetrischer Verschlüsselung, dass bedeutet: Verschlüsselt wird mit dem einen Schlüssel (der auch öffentlich sein darf, daher: 'Public Key'), entschlüsselt wird mit einem zweiten, geheimen Schlüssel ('Secret Key').
Ein Browser, der per 'https://' einen Webserver anspricht, bekommt von diesem den öffentlichen Schlüssel. Mit diesem öffentlichen Schlüssel werden dann alle Daten vom Client zum Server verschlüsselt übertragen. Auf dieser Art kann zwar ein Mithören verhindert werden; um aber zu vermeiden, dass ein anderer Server still und heimlich die Funktion eines https-Servers übernimmt, muss der Client dem Server vertrauen können. Dieses Vertrauen gewinnt der Server (bzw. sein Betreiber) dadurch, dass er seinen Schlüssel von einer 'Certification Authority' (CA) anerkennen und bestätigen lässt.
Eine solche CA kann mittels 'OpenSSL' selbst generiert werden, oder man wendet sich an eine kommerzielle CA.

In Verlauf dieses Unterkapitels wird gezeigt, wie der Apache2 für SSL-Verbindung genutzt werden kann. In dem folgenden Beispiel wird 'OpenSSL' und das Apache Modul: 'mod_ssl' verwendet.

Installation / Konfiguration

Bevor SSL bei Apache eingesetzt werden kann, muss 'OpenSSL' installiert sein. Unter Debian wird dieses schon bei der Basis-Installation erledigt, sollte es dennoch fehlen, so kann es einfach mittels 'apt-get install openssl' nachinstalliert werden.

Nachdem 'OpenSSL' zur Verfügung steht, sollte ein Test-Zertifikat erstellt werden. Unter Debian kann diese mit dem Kommandozeilenaufruf: 'apache2-ssl-certificate' geschehen, siehe Bsp. (Für Debian 4.0 siehe Vorgehensweise unten, unter Anmerkung):

experimental:~# apache2-ssl-certificate

creating selfsigned certificate
replace it with one signed by a certification authority (CA)

enter your ServerName at the Common Name prompt

If you want your certificate to expire after x days call this programm
with -days x
Generating a 1024 bit RSA private key
..................................................................++++++
..++++++
writing new private key to '/etc/apache2/ssl/apache.pem'
-----
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) [GB]:DE
State or Province Name (full name) [Some-State]:NRW
Locality Name (eg, city) []:Paderborn
Organization Name (eg, company; recommended) []:Eusterholz
Organizational Unit Name (eg, section) []:privat
server name (eg. ssl.domain.tld; required!!!) []:ssl-test.tld
Email Address []:webmaster@localhost

Bei der Erstellung des Zertifikates werden verschiedene Parameter abgefragt. Wichtig ist vor allem, dass bei der Frage: 'server name' der vollständige Hostname der SSL-Site angegeben wird. Nach der Erstellung des Zertifikates liegen unter Debian im Verzeichnis '/etc/apache2/ssl/' zwei Dateien, wobei eine nur ein Link auf die andere mit einem zufälligen Dateinamen ist. Beide werden im Folgenden benötigt.

Als nächstes ist das Modul: 'mod_ssl' zu aktivieren, das Modul sollte bei der Basis-Installation von 'apache2' mit installiert worden sein. Die Aktivierung des Moduls geschieht mit dem Kommando:

a2enmod ssl

Da SSL über den Port: '443' betrieben wird ist dieser noch zusätzlich in der Datei 'ports.conf' einzutragen:

Auszug aus: /etc/apache2/ports.conf

Listen 80
Listen 443

Es ist einfach ein 'Listen 443' in der Datei einzufügen.

Als nächster Schritt ist eine virtueller Host zu definieren, welches die SSL-Site repräsentiert; hierzu ein Bsp:

/etc/apache2/sites-available/ssl-test.tld

NameVirtualHost *:443
<VirtualHost *:443>
        ServerName ssl-test.tld
        ServerAlias *.ssl-test.tld ssl-test.anything.dyndns.org
        ServerAdmin webmaster@localhost

        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem
        SSLCertificateKeyFile /etc/apache2/ssl/e5a243ec.0

        DocumentRoot /var/www/ssl-test.tld/html/

        <Directory /var/www/ssl-test.tld/html/>

                # SSLRequireSSL
                # Other directives here

        </Directory>

        ErrorLog /var/www/ssl-test.tld/logs/error.log
        CustomLog /var/www/ssl-test.tld/logs/access.log common
</VirtualHost>

In diesem Bsp. wird der virtuelle Host: 'ssl-test.tld' installiert, der Direktive 'NameVirtualHost' ist erforderlich bei namensbasierten virtuellen Hosts. Der Standard-TCP-Port für diese Verbindungen ist nicht der HTTP-Port: '80', sondern '443'. Innerhalb der virtuellen Hosts befinden sich die Direktive für die SSL-Funktionalität. Der Direktive 'SSLEngine' schaltet die SSL-Funktion ein, 'SSLCertifikateFile' bzw 'SSLCertificateKeyFile' verweißt auf das SSL-Zertifikat. Unter 'SSLCertificateKeyFile' ist der oben erstellte zufällige Dateiname (Link) anzugeben. Möchte man, dass ausschließlich nur gesicherte Verbindungen möglich sind so ist die Anweisung 'SSLRequireSSL' zu aktivieren.

Nach der Erstellung des virtuellen Hosts ist dieser mit:

a2ensite ssl-test

zu aktivieren, anschließend sollte ein Neustart des Apache-Servers mittels:

/etc/init.d/apache2 force-reload

erfolgen.

Test der SSL-Verbindung

Ein erster Test der SSL-Verbindung kann  mit einen Browser (in diesem Bsp. z.B. mit dem Internet-Explorer) stattfinden. Nach Eingabe der URL: 'https://ssl-test.tld' sollte nun ein Sicherheitshinweis kommen das nun über eine sichere Verbindung die Seiten angezeigt werden:

Nach der Bestätigung mit 'OK' kommt ein weitere Sicherheitshinweis. Es wird hier angezeigt, ob das Zertifikat von einer vertrauenswürdigen Firma ausgestellt wurde, ob das Datum des Zertifikat noch gültig ist und ob der Name der Site mit dem auf dem Sicherheitszertifikat angegebenen Namen übereinstimmt.

Mit dem Button 'Zertifikat anzeigen' können noch weitere Details des Zertifikates angesehen werden.
Nach dem das Zertifikat mit dem Button 'Ja' akzeptiert wurde sollte das 'geschlossene Schloss' im unteren Randbereich des Internet-Explorers erscheinen:

Während der gesamten SSL-Übertragung sollte das 'Schloss' geschlossen bleiben.

Anmerkungen

Soll ein bestehendes Zertifikat ersetzt werden, so ist die Option '--force' bei der Erstellung zu wählen, die Gültigkeitsdauer kann mit der Option '-day xxx' bestimmt werden.

apache2-ssl-certificate --force -days 365

In diesem Bsp. wird ein neues Zertifikat mit einer Gültigkeitsdauer von 365 Tagen erzeugt.

Weiter Parameter für den SSL-Betrieb lassen sich auf den entsprechenden Internetseiten nachlesen.

Unter Debian 4.0 (Etch) ist das Kommando 'apache2-ssl-certificat' wie oben beschrieben nicht mehr vorhanden. Um unter Debian 4.0 (Etch) ein Zertifikat zu erzeugen sollte 'openssl' von der Kommandozeile aus genutzt werden, hier ein Bsp.:

vision:/etc/apache2# openssl req $@ -new -x509 -days 3650 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
Generating a 1024 bit RSA private key
...........................++++++
...++++++
writing new private key to '/etc/apache2/apache.pem'
-----
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]:NRW
Locality Name (eg, city) []:Paderborn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Norbert Eusterholz
Organizational Unit Name (eg, section) []:privat
Common Name (eg, YOUR name) []:www.eusterholz.dyndns.org
Email Address []:norbert@eusterholz.com

Nach der Generierung des Zertifikates liegt eine Date 'apache.pem' im Verzeichnis '/etc/apache2/', die sollte anschließend mit den richtigen Dateirechten Versehen werden:

chmod 600 /etc/apache2/apache.pem

Nachdem das Zertifikat nun unter Debian 4.0 vorliegt kann wie oben beschrieben fortgefahren werden.

Weitere Infos

Apache SSL/TLS Encryption http://httpd.apache.org/docs-2.0/ssl/
Homepage: mod_ssl http://www.modssl.org/
Apache-SSL http://www.apache-ssl.org/
Homepage: OpenSSL http://www.openssl.org/
SSL-Apache/OpenSSL/SSLeay Handbücher http://www.dfn-pca.de/certify/ssl/handbuch/
Manualseiten zu: openssl man openssl
System-Dokumentation: openssl /usr/share/doc/openssl
RFC: 2246 http://www.faqs.org/rfcs/rfc2246.html
CAcert - Australische Nonprofit-Zertifikat-Vergabestelle http://www.cacert.org/
StartCom Free SSL Certification Authority http://cert.startcom.org/
WEB-Interface zur Anzeige von SSL - Zertifikatsinformationen http://serversniff.de/sslcheck.php

Home ] Nach oben ] Installation/Konfiguration ] Status/Info ] UserDir ] Virtuelle Hosts ] Authentifizierung ] CGI ] mod_perl ] PHP ] SSI ] [ SSL ] WebDAV ] Log-Dateien ] ht://Dig ]

letzte Änderung: 10. Februar 2008

 

Copyright © 2004 Norbert Eusterholz