| Mit dem Apache Webserver kann man u.a. auch einen SSL-Webserver konfigurieren, der mit dem verschlüsselten (sicheren) HTTPS-Protokoll arbeitet. | Meistens werden beide Protokolle (HTTP und HTTPS) gleichzeitig von je einem eigenen virtuellen Webserver unterstützt. |
Apache |
Der weltweit erfolgreichste Standard Webserver (Linux, Windows) |
| SSL, TLS, HTTPS | Minimal-Information zu den verwendeten Technologien und Begriffen. |
| Voraussetzungen | Administrations-Rechte, Software, Daten, Vorarbeiten |
| Linux CA | Herstellung einer 'virtuellen' Certificate Authority |
| Linux Server | Herstellung und Selbst-Beglaubigung eines Schlüssels für den eigenen Server |
| Windows-Umgebung | Vorarbeiten auf Windows |
| Windows Server | SSL-Schlüssel für einen Apache Webserver auf Windows |
| Prüfung | Gültigkeit und die in den Schlüsseln enthaltenen Daten |
| Apache-SSL | Anpassung der Konfiguration des Apache Webservers |
| Verwandte Themen | Zugriffs-Schutz (Anmeldung mit Name und Passwort) |
| Links |
Ausgewählte
|
Secure Sockets Layer (SSL, TLS, HTTPS) |
|
SSLDas Protokoll Secure Sockets Layer (SSL) ist eine Vorschrift (Sammlung von Regeln) zur sicheren Übertragung von verschlüsselten Daten im Netzwerk. Seit Version 3.0 wird das Protokoll unter dem kaum bekannten Namen Transport Layer Security (TLS) weiter entwickelt. |
♦ Details zum SSL Protokoll finden sie in Artikeln zur Netzwerk-Technik und zur Verschlüsselung (Kryptografie). SSL wird auf dieser Seite nicht erklärt, sondern 'so wie verfügbar' für einen eigenen Webserver verwendet. |
HTTPSDas Protokoll HyperText Transfer Protocol Secure (HTTPS) verknüpft die beiden Protokolle HTTP und SSL zur sicheren Übertragung von Daten im Netzwerk (sowohl im eigenen lokalen Netzwerk LAN als auch im globalen Internet).Zur Kommunikation wird das bewährte → HTTP-Protokoll verwendet, welches Anweisungen aus einfachem (lesbaren) Text verwendet. Diese Anweisungen werden jedoch vor dem Absenden mit SSL verschlüsselt und nach Ankunft decodiert. Einen Webserver muss man dafür jedoch konfigurieren, d.h. der Server muss seine Identität mit Hilfe eines beglaubigten Schlüssels eindeutig und überprüfbar nachweisen. |
Die hohe Sicherheit wird durch ein System von verteilten Schlüsseln (Keys) erreicht. Jeder Webserver, welcher HTTPS anbietet, verfügt über einen eigenen (privaten, eindeutigen) Schlüssel, mit dessen Hilfe ein Client (Browser) das Vertrauen zum Server herstellen und die von ihm erhaltenen Daten decodieren kenn. Um Missbrauch zu vermeiden, muss der Server-Schlüssel von einer Certificate Authority (CA) beglaubigt (zertifiziert) werden. Die Funktion der CA ist ähnlich der eines Notars. CA's sind gegen Angriffe sehr aufwändig abgesichert. Damit ist die Methode nur wenig von der oft zweifelhaften Sicherheit der einzelnen Server abhängig. ● Jeder Browser kann die Echtheit eines Server-Schlüssels sehr rasch feststellen und verweigert die Verbindung bei Verdacht auf Probleme. Wenn man auf der zweifelhaften Verbindung besteht, dann muss man ausdrücklich eine Ausnahme genehmigen - Das ist für die selbst-beglaubigten Schlüssel dieser Seite notwendig. |
Selbst-BeglaubigungAuch im nicht-professionellen Bereich hat sich ein zunehmender Bedarf nach sicherer Übertragung von Daten ergeben, und zwar nach Möglichkeit auch ohne die kostenpflichtige Beglaubigung durch eine CA. |
Dazu wurden Möglichkeiten zur Selbst-Beglaubigung (self-sign) geschaffen und hier vorgestellt. Man umgeht damit allerdings wesentliche Elemente dieser sicheren Technik. Es ist sinnvoll, selbst beglaubigte Schlüssel im eigenen lokalen Netzwerk zu verwenden, aber man sollte die Grenzen kennen. |
Aktuelle ZeitJeder SSL-Schlüssel hat eine begrente Gültigkeit, die normalerweise als ganze Zahl in Tagen angegeben wird.Typische Werte sind 365 (1 Jahr), 999, 3650 (10 Jahre) oder 9999 |
Ein SSL-Programm versucht, bei Herstellung eines SchlÜssels einen vertrauenswürdigen → NTP-ZeitServer zu erreichen. Das ist nur möglich, wenn der verwendete PC während dieser Arbeit mit dem Internet verbunden ist. ♣ Versuchen sie besser nicht, auf ihrem PC ein anderes Datum vorzutäuschen. |
Eigener WebserverDie Hinweise dieser Seite gelten ausnahmslos für eigene Webserver im lokalen Netzwerk (LAN) bzw. für experimentelle Webserver.♣ Zur Ausbildung und zum Ausprobieren sind → Virtuelle Computer am besten geeignet. Probieren sie die HTTPS-Technik zuerst an einem virtuellen PC, den sie mit dem gleichen Betriebssystem und mit der gleichen Webserver-Version einrichten, die sie in ihrem realen LAN verwenden ! Insbesondere wird auf die kostenpflichtige Dienstleistung einer Certificate Authority (CA) verzichtet, und die Schlüssel werden selbst signiert (self-signed). Mit kleinen Einschränkungen kann man so die HTTPS-Technik im eigenen Netzwerk ausprobieren. Die Sicherheit wird damit allerdings nur wenig erhöht, allenfalls nur das unbefugte Abhören anderer LAN-TeilnehmerInnen erschwert. |
Die Praxis zeigt, dass die Konfiguration des Webservers für SSL als relativ komplex empfunden wird. Sie sollten daher einige Erfahrung mit Webservern (insbesondere mit → virtuellen Webservern) haben, bevor sie einen virtuellen SSL-Server einrichten. Insbesondere sollten sie mit einem totalen Ausfall ihres bestehenden Webservers rechnen und in Kauf nehmen, diesen im schlimmsten Fall komplett neu einzurichten. Wenn man zum Experimentieren einen virtuellen PC verwendet, dann fällt dieses Problem weg: Der virtuelle PC wird bei Problemen einfach gelöscht und man arbeitet mit einer neuen Kopie weiter. Die Schwiergkeit liegt u.a. darin, dass die Konfiguration auf verschiedenen Betriebssystemen und mit verschiedenen Server-Versionen unterschiedlich erfolgt, und dass die meisten bereits laufenden Webserver individuell an den Bedarf eines bestimmten LAN angepasst sind. Es gibt daher kaum allgemein gültige Rezepte, und man muss die Aufgabe verstehen, um die Anweisungen sinnvoll auf das eigene System anzuwenden. |
Professionelle AnwendungWenn sie im Internet sichere Kommunikation mit HTTPS anbieten wollen, dann gelten wesentlich höhere Anforderungen bzw. strengere Regeln als hier vorgestellt. |
Die Konfiguration erfordert professionelles Wissen und so viel Erfahrung wie möglich. Insbesondere sollten sie nicht versuchen, illegale (selbst signierte) Schlüssel im globalen Internet zu verwenden. |
Voraussetzungen |
|
Administrator (root)Für alle hier vorgestellten Arbeiten brauchen sie Administrator-Rechte. Melden sie sich als Administrator an.Auf Linux können sie alle Arbeiten an einer Shell-Konsole ausführen, und zwar mit einem SSH-Client-Programm auch mittels Fernsteuerung (z.B. PuTTY). In diesem Fall können sie sich als beliebiger User (der sudoer-Gruppe) anmelden und mit Anweisung su temporär als Administrator root arbeiten. |
OpenSSLAn ihrem PC muss ein SSL Programm-Paket installiert sein. Auf dieser Seite wird das ausgezeichnete kostenfreie Programm OpenSSL verwendet.• Auf Linux laden sie das Programm-Paket OpenSSL. Verwenden sie die Software-Verwaltung des Systems, z.B. Synaptic, YAST, apt, aptitude, zypper ... • Auf Windows verwenden sie die SSL-Version des Apache Webservers, in welche eine Mini-Version von OpenSSL integriert ist, z.B. httpd-*-win32-x86-openssl-*.msi |
Auf ihrem Server-PC sollte bereits ein Webserver installiert sein
und problemlos (!) laufen. Auf dieser Seite werden nur Beispiele mit dem
meist-verwendeten →
Apache Webserver vorgestellt. |
Apache-Upgrade auf Windows
Wenn bereits ein Apache Webserver ohne SSL installiert ist,
dann können sie ihn unter Beibehaltung der Konfiguration austauschen:
Stoppen sie den Webserver, z.B. mit dem Apache-Tray-Programm oder
mit services.msc Starten sie den Installer httpd-*-win32-x86-openssl-*.msi und verwenden sie die Option, den Server zu de-installieren. Starten sie danach nochmals den gleichen Installer und installieren sie die SSL-Version. Sicherung auf Windows
Man kopiert am einfachsten das gesamte Apache-Verzeichnis, z.B.
C:\> copy "C:\Programme\Apache Software Foundation\Apache2.2"
"C:\Programme\Apache Software Foundation\Apache-Backup"
oder (sparsamer) lediglich das UnterVerzeichnis config Auf Windows sind noch einige weitere Arbeiten zur ↓ Vorbereitung der Arbeits-Umgebung sinnvoll. |
Vorbereiteter TextWährend der Installation der SSL-Schlüssel werden vom Programm (OpenSSL) einige Fragen gestellt. Bereiten sie die Antworten vor: Man kann sich dann wesentlich besser auf die Arbeit konzentrieren. Speichern sie die Antworten in einer Datei oder drucken sie den Text aus.Sie müssen anschließend 2 verschiedene Organisationen beschreiben und daher 2 verschiedene Versionen des rechts vorgestellten Antwort-Musters vorbereiten: • Die Certificate Authority (CA) ist jenes Dienstleistungs-Unternehmen, welches ihren Schlüssel beglaubigen soll. Die CA hat einen Sitz, einen Namen und einen Domain-Namen. Verwenden sie zwar frei erfundene, jedoch halbwegs sinnvolle Daten, die nach ihrem bestem Wissen nicht real vorkommen. überlegen sie auch ein beliebiges Passwort (Passphrase) mit mindestens 4 Zeichen. Keiner der Antwort-Texte sollte Sonderzeichen (ÄÖÜäöü߀...) enthalten ! • Ihre eigene Organisation hat ebenfalls Sitz, Namen und - vor allem - einen eindeutigen Domain-Namen. Auch dafür brauchen sie eine Passphrase. Die Antwort-Daten und die Passphrases der beiden Muster müssen sich unterscheiden, d.h. man darf nicht die gleichen Antwort-Daten für CA und die eigene Organisation (den eigenen Server) verwenden. |
Typischer Dialog:
Country Name (2 letter code) [US]:AT
State or Province Name (full name) [Some-State]:Wien Locality Name (eg, city) [Newbury]:Wien Organization Name (eg, company) [My Company]:MeinLAN Organizational Unit Name (eg, section) []: Common Name (eg, your server's hostname) []:mein.lan.at Email Address []:boss@mein.lan.at A challenge password []: An optional company name []: Die (hier als Muster blau eingetragenen) Antwort-Daten sollten keine Sonderzeichen enthalten und der realen Situation nahekommen. Wenn eine Antwort nicht sinnvoll ist, darf das Feld leer bleiben. Tragen sie keine schlechten Scherze ein: Diese Daten könnten unabsichtlich ins Internet gelangen ! Die Angabe des Common Name ist kritisch: Es muss sich um einen (theoretisch) möglichen 'voll qualifizierten' Domain-Namen handeln. Verwenden sie keinesfall den Namen einer existierenden Domain: Es kann zu Problemen kommen, wenn sie später diese Domain besuchen wollen. Bereiten sie zusätzlich je eine Passphrase mit mindestens 4 Zeichen ohne Sonderzeichen vor, z.B. Passphrase: geheim
Die Passphrase für die CA und für den eigenen Server müssen
sich unterscheiden !
|
Schlüssel-PfadeInformieren sie sich vor Beginn der SSL-Installation, in welchen Pfaden ihr System / Webserver die hergestellten Schlüssel-Dateien erwartet.Die Tipps dieser Seite sind nur ein unverbindlicher Hinweis ! In der Dokumentation ihrer installierten Software und / oder im Internet finden sie dazu Informationen. Sehen sie nach, ob die angegebenen Pfade auf ihrem Server-PC existieren, und ob sich darin evtl. bereits (gleichnamige) Dateien befinden. |
Arbeits-VerzeichnisÜberlegen sie, in welchem Verzeichnis (Ordner) sie die folgenden Arbeiten ausführen werden.● Auf Linux kann man den Pfad meist frei wählen oder erzeugen, z.B. /home/ich/ssl
♣
Erzeugen sie dafür am besten ein neues Verzeichnis,
das keine anderen Dateien enthält.● Auf Windows muss man sich notgedrungen an jenen Pfad halten, in dem sich openssl.exe befindet, z.B. C:\Programme\Apache...\bin\openssl.exe
|
Eigener Server-Schlüssel auf Linux |
|
| Wenn man die CA-Schlüssel erzeugt und beglaubigt hat, kann man damit beliebige andere Schlüssel zertifizieren, z.B. einen Schlüssel für den eigenen Server, so wie in diesem Kapitel beschrieben. |
Auf Linux setzen sie einfach die im vorigen Kapitel beschriebene Arbeit
mit der Shell-Konsole im gleichen Verzeichnis fort. Bereiten sie die Antworten für den eigenen Server sowie die Passphrases für die CA und für den eigenen Server vor. |
Erzeugung des eigenen Server-Schlüssels(Create a private key)# openssl genrsa -des3 -out server.key 4096
An Stelle von der Zahl 4096 kann man auch 2048 oder 1024 zur Erzeugung schwächerer Schlüssel angeben. Der erzeugte Schlüssel (Datei server.key) ist mit sehr großer Wahrscheinlichkeit weltweit eindeutig, jedoch nirgends registriert. |
Die Anweisung verlangt die 2malige Eingabe der Server-Passphrase und erzeugt im Arbeits-Verzeichnis eine Text-Datei server.key von ca. 3.2kB mit diesem Inhalt:
-----BEGIN RSA PRIVATE KEY-----
... -----END RSA PRIVATE KEY----- |
Erzeugung eines Zertifizierungs-Ansuchens(Certificate Signing Request, CSR)
# openssl req -new -key server.key -out server.csr
Das Ansuchen (die erzeugte Text-Datei server.csr) enthält den eigenen Schlüssel (server.key) und die Angaben zur eigenen Organisation (wie vorbereitet). Zur kommerziellen Anwendung sendet man dieses Ansuchen zur Beglaubigung (Zertifizierung) an eine offizielle CA-Organisation. Zum eigenen Gebrauch kann man den Schlüssel selbst zertifizieren (nächster Absatz). |
Die Anweisung verlangt die Eingabe der vorbereiteten Server-Antwort-Daten und erzeugt eine Text-Datei server.csr von ca. 2kB mit diesem Text:
-----BEGIN CERTIFICATE REQUEST-----
... -----END CERTIFICATE REQUEST----- |
Beglaubigung, Herstellung des Server-Zertifikats(Sign the Certificate)Die Beglaubigung (Autorisierung, Zertifizierung) des eigenen privaten Schlüssels erfolgt durch die (selbst erfundene) CA.
# openssl x509 -req -days 9999 -in server.csr -CA ca.crt
-CAkey ca.key -set_serial 01 -out server.crt
Eine reale Certificate Aurthority (CA) prüft die im Ansuchen enthaltenen Daten des Antragstellers und beglaubigt dessen Schlüssel, wenn die Angaben korrekt sind. Danach ist der Schlüssel nicht nur eindeutig, sondern weltweit registriert: Jeder Browser kann einen Webserver mit Hilfe des Schlüssels sehr rasch identifizieren. Erst dann, wenn dieser Test absolviert wurde, werden vertrauliche Daten verschlüsselt und übertragen. |
Die Anweisung verlangt die Eingabe der CA-(!)-Passphrase und erzeugt als Zertifikat eine Text-Datei server.crt von ca. 2kB mit diesem Text:
-----BEGIN -----
... -----END ----- Im Falle der eigenen (selbst erfundenen) CA entfällt die Prüfung und man beglaubigt das eigene Ansuchen unmittelbar. |
| Der Server-Schlüssel server.key, das Ansuchen server.csr und das Zertifikat server.sct sind in dieser Form bereits für einen SSL-Webserver verwendbar. Der Server fragt allerdings bei jedem Start nach der Passphrase. | Das ist unbrauchbar, weil viele Server unbeaufsichtigt und unzugänglich arbeiten. Deshalb wird in einem weiteren Schritt aus dem Server-Schlüssel server.key eine Variante ohne Passphrase erzeugt. |
Herstellung einer Schlüssel-Variante ohne Passphrase(Remove Passphrase from Key)
# openssl rsa -in server.key -out server.key.insecure
# mv server.key server.key.secure # mv server.key.insecure server.key Damit wird eine aus dem Server-Schlüssel server.key eine Variante mit den gleichen Daten, jedoch ohne Passphrase erzeugt Danach werden die Namen der beiden Versionen geändert. Dazu wird nicht rename sondern mv (move) verwendet, weil die von Windows abweichende Syntax zu Verwechslungen führen kann. |
Die Anweisungen erzeugen eine 'unsichere' Schlüssel Variante und ändern die Namen der beiden Versionen. Nach Abschluss erhält man diese beiden Schlüssel-Dateien: server.key - Ohne Passphrase, wird (nur) für den SSL-Server verwendet. server.key.secure - Mit Passphrase, wird aufbewahrt. |
Zugangs-RechteAuf Linux werden die Zugangs-Rechte streng verwaltet.Weisen sie den server.* Dateien den User root und die Gruppe root zu und vergeben sie restriktive Zugangsrechte:
# chusr root server.*
Kontrolle mit
# chgrp root server.* # chmod 0600 server.* # ls -l
Man kann die server.* Dateien umbenennen, wenn z.B. schon andere Schlüssel dieses Namens in Gebrauch sind. Alle 3 Dateien sollten jedoch (abgesehen von der Erweiterung) gleich benannt sein, z.B. firma.* |
VerwendungZur Konfiguration des SSL-Webservers verwendet man Kopien (!) dieser Dateien:server.key, server.csr, server.crt
Je nach System und Server werden sie in jenes Verzeichnis kopiert, wo sie vom Server
erwartet werden. Sie werden vom Server zunächst ignoriert und erst dann verwendet,
wenn das in der
↓ Server-Konfiguration festgelegt wurde.ArchivDie erzeugten Dateien ca.*, server.* und die Text-Datei mit den verwendeten Passphrases und Antwort-Daten werden am besten temporär archiviert. Wenn der SSL-Server funktioniert, kann man das Archiv löschen (sicherer) oder für eine Wiederholung der Arbeiten aufbewahren (bequemer). |
Windows Vorbereitung |
|
| Die oben angegebenen Tipps zu ↑ allgemeinen Vorbereitungen gelten für alle Betriebssysteme - auch für Windows. | Zusätzlich sollte man auf Windows einige empfehlenswerte Arbeiten ausführen. Sie wirken sich auf SSL aber auch auf viele andere Programme positiv aus. |
Anzeige versteckter DatenWindows Systeme neigen dazu, viele wichtige Informationen zu verstecken.So machen sie zumindest die meisten Dateien sichtbar: Menü Die Verwirrung ist besonders groß, weil die Optionen in umgekehrter Logik miteinander vermischt werden: ► Kreuzen sie alle Optionen an, mit denen Daten angezeigt werden, z.B. ► Entfernen sie das Kreuz von allen Optionen, die irgend etwas verstecken, z.B. ► Klicken sie zuletzt den Button . Damit sehen sie immerhin die meisten Dateien und ihre (für die System-Verwaltung unentbehrlichen) Endungen. |
Um auch diesen Unsinn abzustellen, verwenden sie Menü Suchen und markieren sie CNF (Zielwahl)
Klicken sie den Button und markieren sie
das Kästchen
|
Dateien und PfadeDiese Dateien sollten sich an ihrem Server-PC befinden, wenn eine Version des Apache Webservers mit SSL-Option installiert wurde:
C:\Programme\Apache...\bin\openssl.exe
C:\Programme\Apache...\modules\mod_ssl.so C:\Programme\Apache...\conf\openssl.cnf C:\Programme\Apache...\conf\extra\httpd-ssl.conf |
Die Pfade sind teilweise von System und Apache-Version abhängig. Es ist lediglich wichtig, dass man diese Dateien findet und die Pfade kennt. |
Umgebungs-(System)-VariableJedes Betriebssystem verwaltet einige wichtige Daten, die allen Programmen zur Verfügung gestellt werden. Jedes Programm kann diese Daten lesen und sich damit im System und im Netzwerk zurechtfinden.Viele wichtigen Daten werden auf Windows jedoch in der Registry-Datenbank verwaltet und sind nur mit speziellen Methoden zugänglich. Es ist daher sinnvoll (und manchmal notwendig), mindestens jene Umgebungs-Variablen auch auf Windows einzurichten, die von Standard-Programmen erwartet werden: ► Menü. (Nur im unteren Teil des Fensters !). Hier finden sie die Liste der Variablen und deren aktuelle Werte. Das Programm-Fenster ist winzig und die Arbeit damit nicht einfach. Das dient vermutlich zur Abschreckung. ► Tragen sie hier die empfohlenen Variablen ein. (Nur) auf Windows ist es gleichgültig, ob man für ihre Namen Groß- oder Kleinbuchstaben verwendet. ► Nach allen Änderungen sollten sie das System neu starten und kontrollieren. Öffnen sie eine Konsole cmd.exe und geben sie ein: C:\> set
Sie erhalten eine Liste der Umgebungs-Variablen und ihrer Werte. Damit
C:\> set > c:\set.txt
erhalten sie eine Text-Datei, die man bequemer ansehen kann.♦ Details zu Windows Umgebungs-Variablen. |
Router / Proxy-Server
Diese Umgebungs-Variablen geben den Weg ins Internet an. Die Daten enthalten
Protokoll, IP-Adresse und Port des
→
Routers / Proxy-Servers, z.B.
HTTP_PROXY=http://192.168.0.1:8080
Wenn ihr Router / Proxy-Server eine Anmeldung verlangt, dann definieren
sie zusätzlich die Variablen
HTTPS_PROXY=http://192.168.0.1:8080 FTP_PROXY=http://192.168.0.1:8080 NO_PROXY=http://192.168.0.0/24,127.0.0.1/8,localhost
PROXY_USER=UserName
oder eine kombinierte Variante wie z.B.
PROXY_PASSWD=PassWort HTTP_PROXY=http://UserName:PassWort@192.168.0.1:8080
Hinweis: Das Betriebsystem erhält zwar diese Daten (meist von einem
→
DHCP-Server). Das nützt jedoch nichts, wenn es diese Daten nicht
an gestartete Programme weitergibt...Zeitzone
Die Interpretation der
→ Windows Systemzeit wird vom Betriebssystem eher behindert,
als dass z.B. die Umrechnung auf die Weltzeit UTC unterstützt wird.
Viele Programme können sich helfen, wenn wenigstens diese Variable
definiert ist:
TZ=Europe/Berlin
Sie finden die Angabe ihrer Zone im Internet (oder auf jedem Linux-PC),
z.B. Europe/Berlin, Europe/Vienna, Europe/Zurich, ... OpenSSL
Benötigt den Pfad zur Datei openssl.cnf, z.B.
OPENSSL_CONF=C:\Programme\Apache...\conf\openssl.cnf
System-Pfade
Die Variable PATH enthält eine Liste aller Pfade,
in denen ausführbare Programme (z.B. openssl.exe)
gesucht werden.• Sie können an die Liste einen Strichpunkt als Trennzeichen und danach den Pfad zum OpenSSL-Programm anfügen. Wenn sie sich diese Mühe machen, dann lässt sich das Programm ebenso wie auf Linux aus jedem beliebigen Pfad starten, z.B. C:\> openssl /?
•
Wenn sie darauf verzichten, dann müssen sie vor der Verwendung
von openssl.exe mit der Konsole in das Verzeichnis
dieses Programms navigieren.
|
Eigener Server-Schlüssel auf Windows |
|
| Auch auf Windows kann man den Schlüssel für einen SSL-Server selbst herstellen und beglaubigen. | Das hier vorgestellte Minimal-Verfahren hat sich für einfache experimentelle Server bewährt. Als echten Netzwerk- und Webserver sollten sie aber besser einen Linux-PC einsetzen. |
KonsoleStarten sie eine Windows → Konsole (Eingabe-Aufforderung) cmd.exeWenn sie die Umgebungs-Variable PATH so ergänzt haben wie in den ↑ Windows-Vorbereitungen beschrieben, dann können sie die folgenden Arbeiten in jedem beliebigen Pfad ausführen. Ideal ist ein leeres Verzeichnis (Ordner), das eigens für diesen Zweck erstellt wurde, z.B. C:\ssl |
Wenn die Umgebungs-Variable PATH nicht verändert wurde, dann müssen sie mit der Konsole in das Verzeichnis des Programms openssl.exe navigieren, z.B. mit
C:\> cd Programme
bis zuletzt
C:\> cd "Apache..." C:\> cd bin
|
Programm openssl.exeGeben sie die rechts gezeigten Anweisungen ein.Dieses und alle folgenden Beispiele wird nur mit dem Konsolen-Pfad C:\> angezeigt. Dieser ist wesentlich länger, wenn sie vorher ins Programm-Verzeichnis von openssl.exe navigiert haben. |
Kontrolle der Programm-Version und -Funktion:
C:\> openssl version
C:\> openssl /? |
Erzeugung eines AnsuchensC:\> openssl req -new -out server.csr
Geben sie in den Dialogen die vorbereiteten Antwort-Daten ihres Servers ein. |
Die Anweisung erzeugt die Text-Dateien privkey.pem (Private Key, ca. 1000 Byte) und server.csr (Certificate Request, ca. 700 Byte) |
Erzeugung des privaten Server-Schlüssels
C:\> openssl rsa -in privkey.pem -out server.key
|
Die Anweisung erzeugt die Text-Datei server.key (RSA Private Key, ca. 900 Byte) |
Beglaubigung des Server-Schlüssels
C:\> openssl x509 -in server.csr -out server.cert
-req -signkey server.key -days 999
|
Die Anweisung erzeugt die Text-Datei server.cert (Certificate, ca. 900 Byte) |
AbschlussDie beiden fertig gestellten Dateien werden hierher kopiert:
C:\Programme\Apache...\conf\server.cert
C:\Programme\Apache...\conf\server.key |
Die Dateien werden vom Server zunächst ignoriert und erst dann verwendet, wenn das in der ↓ Server-Konfiguration festgelegt wurde. |
Prüfung der SSL-Schlüssel |
|
| OpenSSL bietet u.a. auch Möglichkeiten, um die Gültigkeit von Schlüsseln zu prüfen und die angegebenen Daten auszugeben. | Sie können damit u.a. jene Daten kontrollieren, die jeder Client erhält, der von ihrem Server mit HTTPS Daten anfordert. |
Privater SchlüsselSo wird ein Schlüssel kontrolliert und seine Daten angezeigt:# openssl rsa -check -in server.key
Das Ergebnis unterscheidet sich von einer Text-Ausgabe (mit Linux
cat oder Windows type) durch den Text
'RSA key ok' wenn der Schlüssel in Ordnung ist.Der gleiche Test mit dem 'sicheren Schlüssel' stellt vor der Ausgabe noch die Frage nach der Passphrase: # openssl rsa -check -in server.key.secure
|
ZertifikatSo wird ein Zertifikat angezeigt:# openssl x509 -text -noout -in server.crt
Die Ausgabe enthält u.a. alle bei der Erzeugung angegebenen Daten:
•
Issuer = Daten der Certificate Authority (CA)
• Subject = Ihre eigene Organisation (Ihr Server) • Zeitraum der Gültigkeit • Öffentlicher Schlüssel ihres Servers. |
AnsuchenSo wird ein Ansuchen (Certificate Request) geprüft:# openssl req -text -noout -verify -in server.csr
Auch in diesem Fall werden alle eingegebenen Daten angezeigt. Das ist zur Kontrolle durch die CA notwendig, aber bei Selbst-Beglaubigung nicht sinnvoll. |
OpenSSL bietet darüber hinaus viele Optionen für die professionelle Anwendung. Konsultieren sie das Internet, insbesondere die Dokumentation von OpenSSL. |
Apache Konfiguration |
|
| Die erforderlichen Arbeiten an der Konfiguration des Apache Webservers werden hier nur in Stichworten angegeben. | Es wird vorausgesetzt, dass sie die einzelnen Anweisungen verstehen und sinngemäß an den eigenen Server anpassen können. |
SSL-ModulDer Apache Webserver muss dieses Modul beim Start ladenJe nach System sind dazu unterschiedliche Maßnahmen erforderlich, z.B.: • Auf SuSE-Linux: Suchen sie diese Text-Datei, erzeugen sie eine Sicherungs-Kopie und öffnen sie die Datei mit einem Text-Editor: /etc/sysconfig/apache2
Die Variable APACHE_MODULES enthält eine mit
Leerzeichen getrennte Liste der zu ladenden Module. Fügen
sie ssl ein, z.B.
APACHE_MODULES="actions ... ssl status ... "
Die Variable APACHE_SERVER_FLAGS
muss SSL enthalten, z.B.
APACHE_SERVER_FLAGS="SSL STATUS"
Durch diese Maßnahme werden die entsprechenden
LoadModule-Anweisungen automatisch erzeugt.
|
Auf Windows suchen sie die Konfiguration der Module, z.B. in der Datei /conf
Aktivieren sie diese Zeile
LoadModule ssl_module modules/mod_ssl.so
z.B. durch Entfernen des führenden Kommentar-Zeichens.In jedem anderen Fall müssen sie durch geeignete Maßnahmen für das SSL-Modul sorgen. ♣ Tipp: Lassen sie (mindestens temporär) auch das Info-Modul laden. Dann erhalten sie mit dieser Anforderung u.a. eine Liste aller wirklich geladenen Module: http://localhost/server-info
|
Standard SSL-KonfigurationFast jede Apache+SSL Konfiguration enthält u.a. eine Datei zur Standard-Konfiguration des SSL-Moduls, meist mit einem Namen wie ssl-global.confSie müssen diese Konfigurations-Datei einbinden, z.B. durch Aktivierung oder Einfügen einer Zeile Include /etc/apache2/ssl-global.conf
|
Noch besser ist es, nicht die Original-Datei ssl-global.conf zu verwenden, sondern eine Kopie, die man ungestraft verändern und notfalls wieder löschen kann. |
ListenSie müssen den Server anweisen, nicht nur am HTTP Standard-Port 80 sondern auch am SSL-Port 443 zu 'horchen', d.h. Aufträge entgegen zu nehmen.Das kann u.a. in einer Datei httpd.conf, default-server.conf, listen.conf, ... erfolgen. |
Anweisung:
Listen 443
Diese Anweisung ist evtl. in einen oder mehrere
<IfModule mod_ssl.*> ... </IfModule>
bedingte Anweisungs-Blöcke eingeschlossen oder auf eine von mehreren
IP-Adressen beschränkt, z.B.
Listen 192.168.0.1:443
|
NameVirtualHostDie beiden Webserver für HTTP (Port 80) und HTTPS (Port 443) werden parallel betrieben. Dazu wird je 1 eigener → virtueller Webserver deklariert und konfiguriert.Virtuelle Server bieten eine sehr große Vielfalt an möglichen Optionen. |
So werden (mindestens) die beiden angegebenen virtuellen Server deklariert:
NameVirtualHost *:80
Aktivieren sie diese Anweisungen, wenn vorhanden (oft in der
Datei listen.conf), oder fügen sie die
beiden Zeilen ein.
NameVirtualHost *:443 |
<VirtualHost *:80>... </VirtualHost>Wenn ein virtueller Server *:80 (am Standard HTTP-Port 80) deklariert wurde, dann muss die weitere Konfiguration einen derartigen Block enthalten.Innerhalb des Blocks sind alle Anweisuntgen enthalten, um diesen virtuellen HTTP-Server zu konfigurieren. Die allgemeinen Anweisungen (z.B. aus den Dateien httpd.conf, global-server.conf, etc.) werden dadurch überschrieben. |
Die Apache Server enthält meist ein Verzeichnis vhosts.d, in dem sich Muster-Dateien zur Konfiguration virtueller Server befinden, z.B. vhost.template Am einfachsten kopieren sie ein Muster und ändern den datei-Namen, z.B. auf /etc/apache2/vhosts.d/vhost_80.conf
Meist genügt es, die allgemeinen Anweisungen des bisherigen HTTP-Servers in diesen Block einzutragen: Der virtuelle Server verhält sich dann (ununterscheidbar) genauso wie vorher der einfache HTTP-Server. |
<VirtualHost *:443>... </VirtualHost>Wenn ein virtueller Server *:443 (am Standard HTTPS-Port 443) deklariert wurde, dann muss die weitere Konfiguration einen derartigen Block enthalten.Innerhalb des Blocks sind alle Anweisuntgen enthalten, um diesen virtuellen HTTPS-Server zu konfigurieren. Am einfachsten kopieren sie ein SSL-Muster vhost-ssl.template und ändern den Datei-Namen, z.B. auf /etc/apache2/vhosts.d/vhost_443.conf
|
Sie können in diesen Block die gleichen Konfigurations-Anweisungen eintragen wie im Block *:80 - Der SSL-Server zeigt dann die gleichen Dateien an, allerdings nach verschlüsseltem Transport. Wenn sie bei sonst identischer Konfiguration lediglich dei Variable DocumentRoot ändern, dann zeigt der SSL-Server andere Dateien (Webseiten), und zwar jene, die sich im angegebenen DocumentRoot Verzeichnis befinden. |
NeustartÄnderungen der Apache Konfiguration treten erst (nur) nach einem Neustart auf, z.B. auf Linux# /etc/init.d/apache2 restart
|
Wenn der Server nicht so arbeitet wie erwartet, dann kehren sie zur letzten gut
funktionierenden Version zurück und starten sie erneut. Ändern sie danach so wenig wie möglich, z.B. nur eine einzige Anweisung und testen sie jeweils nach Neustart. |
LogDer Apache Webserver führt - wie die meisten anderen Server-Programme - ein Log. Bei Problemen ist das Fehler-Log besonders aufschlussreich. Dieses Log wird sogar dann geführt, wenn der Server nicht einmal starten kann.Die Log-Dateien befinden sich meistens hier (Linux, Windows):
/var/log/apache2
C:\Programme\Apache...\ ♣ Tipp: Erstellen sie durch beide virtuelle Server getrennte Log-Dateien. Das macht es einfacher, Fehler des SSL-Servers zu analysieren, wenn der Standard-Server korrekt funktioniert, was oft der Fall ist. (Beispiel rechts). |
Beispiel: Jeder virtuelle Server führt ein eigenes Log
<VirtualHost *:80>
ErrorLog /var/log/apache2/error_80.log
...</VirtualHost> <VirtualHost *:443> ErrorLog /var/log/apache2/error_443.log
...</VirtualHost> |
|
|
|
Apache-Dokumentation zum SSL-Modul Univ. Minnesota / Paul Bramscher: Creating Certificate Authorities and self-signed SSL certificates Akadia: How to create a self-signed SSL Certificate Debian Administration: Creating and Using a self signed SSL Certificates in Debian OpenSuSe / Scott Morris: Creating Self-Signed SSL Certificates Ubuntu Documentation: Certificates |
Wikipedia: SSL, TLS,
HTTPS,
Digitales Zertifikat,
Self-signed certificate,
Zertifizierungs-Stelle
(Certificate Authority, CA),
CAcert, CAcert - Stellt kostenfreie Zertifikate aus, allerdings mit reduzierter Prüfung der Identität. |