Truststores and Keystores done right

Java bringt seit jeher sämtliche Mittel zu Verschlüsselung des Netzwerkverkehrs mittels SSL mit. Leider ist die Konfiguration nicht immer trivial und gerade Anfänger tun sich mit der Ablage von Schlüsseln und Zertifikaten in ihren Anwendungen schwer, sodass durch leicht zugängliche Schlüssel jegliche Sicherheitsbemühungen ad absurdum geführt werden. An dieser Stelle möchte ich deshalb einige Best Practices zur Verwendung von Keystores und Truststores vermitteln, die sich dem Einsteiger aus der Java-Documentation nicht immer sofort erschließen. Die programmatische Vorbereitung und Verwendung von SSL-Verbindungen klammere ich allerdings bewusst aus, weil es dazu Unmengen an Tutorials und Dokumentationen gibt. Vielmehr möchte ich auf die Keystores und Truststores eingehen, die immer mal wieder zum Stolperstein werden.

Zertifikate und Truststores

Öffnet man mit Java eine Verbindung zu einer SSL-gesicherten Ressource (z. B. ein simpler Download über HTTPS), so ist Java selbst in der Lage, die von der Gegenstelle ausgelieferten Zertifikate zu validieren. Dazu bringt jede JRE einen eigenen Zertifikatespeicher mit, der sämtliche Root-Zertifikate großer Zertifizierungsorganisationen zusammenfasst. Dieser sogenannte Truststore liegt jeder Java-Installation unter /jre/security/cacerts bei. Die Datei cacerts ist eine Binärdatei im Java Keystore Format (JKS) und kann mit dem „keytool“, das jeder Java-Installation beiliegt, verwaltet werden. Wichtig zu wissen ist, dass jede Neuinstallation von Java als auch jedes Java-Update neue Zertifikate mit neuen Zertifizierungsstellen als auch zurückgezogene Zertifikatslisten mitbringt. Deshalb ist es ungemein wichtig, die cacerts der jeweils verwendeten JRE oder gleich das komplette JRE immer aktuell zu halten. (Wie man die von der gestarteten JVM verwendete JRE-Installation aufspürt, ist unter „Determine Version and Path of your Java Virtual Machine“ beschrieben)

Weil jede JVM-Instanz automatisch die cacerts der installierten JRE verwendet, muss man als Anwender üblicherweise wenig tun, um diesen Zertifikatespeicher zu nutzen. Alle Anwendungen vertrauen auf den Zertifikatespeicher und die Zertifikate der JRE, mit der die Anwendung ausgeführt wird.

pic-cacerts.png

Hat man jedoch seine eigene CA aufgebaut und möchte nun, dass die eigenen Java-Anwendungen allen damit ausgestellten Zertifikaten vertrauen, dann muss das entsprechende Root-Zertifikat in den Zertifikatespeicher aufgenommen werden. Sinnvollerweise bestückt man dazu die cacerts der verwendeten JREs und rollt die cacerts beispielsweise per Ferninstallation auf die entsprechenden Systeme aus. Alternativ kann man der JVM mit dem folgenden JVM-Parameter auch jeden anderen beliebigen Truststore im JKS-Format unterschieben:

-Djavax.net.ssl.trustStore=/path/to/myowntruststore

Umgekehrt kann man natürlich auch die cacerts selbst von sämtlichen Zertifikaten befreien und ausschließlich das Root-Zertifikat der eigenen CA dort installieren, um beispielsweise allen Zertifikaten außerhalb des eigenen Unternehmens zu misstrauen. Ohne gute Gründe ist davon jedoch eher abzuraten.

Schlüssel und Keystores

Möchte man hingegen in seinen eigenen Anwendungen selbst verschlüsseln, benötigt man natürlich seinen eigenen Schlüssel. Und auch wer seine eigene Tomcat-Instanz per HTTPS betreiben möchte, benötigt einen entsprechenden Schlüssel, um per SSL mit den Clients zu kommunizieren. Allerdings müssen die dazu notwendigen Schlüssel den jeweiligen Anwendungen bzw. der JVM übergeben werden, und zwar egal, ob es sich dabei um eine Desktop- oder Web-Anwendung handelt. Dazu übergibt man den Keystore im JKS-Format mit seinen Schlüsseln per JVM-Parameter an die JRE:

-Djavax.net.ssl.keyStore=/path/to/mykeystore.jks

Nicht selten laufen auf einem Host mehrere Anwendungen und Serverinstanzen und recht schnell hat man es aufgrund unterschiedlicher Vertrauensketten für die Keys der einzelnen Serverinstanzen mit mehreren Keys in mehreren Keystores zu tun. Dabei empfehle ich, für einen bestimmten Anwendungsbereich bzw. einen Besitzer immer einen separaten Keystore anzulegen. Kommuniziert eine Anwendung mit mehreren anderen Anwendung und benötigt dazu für jede Anwendung einen eigenen Schlüssel, so packt man alle Schlüssel in einen Keystore, der ausschließlich von dieser Anwendung verwendet wird. Läuft die Anwendung im Kontext eines bestimmten Users, ist es auch sinnvoll, den Keystore mit diesen Keys im Benutzerverzeichnis des Users abzulegen. Damit ist der Key nicht nur durch sein Passwort, sondern darüber hinaus auch auf File-Ebene vor Missbrauch geschützt. Um die Keystores identifizieren zu können, sollte man diese dann auch so benennen, dass aus dem Namen des Keystores der Besitzer oder die Java-Instanz hervorgehen, die diesen Keystore benutzen bzw. denen der Keystore gehört.

pic-keystores.png

Betreiben Sie beispielsweise einen Tomcat (Dienst) mit dem User „tomcat“ (Besitzer) dann bezeichnen Sie den Keystore am sinnvollsten so:

	/home/tomcat/tomcat.jks

Betreiben Sie dagegen mit dem User „servicerunner“ (Besitzer) einen Tomcat (Dienst) und außerdem mit dem gleichen User eine separate Anwendung xyApp (Dienst/Anwendung), dann packen Sie alle mit dem Tomcat in Verbindung stehenden Keys (erste JVM-Instanz) in einen Keystore; Alle Schlüssel, die für den Betrieb der Anwendung xyApp benötigt werden (zweite JVM-Instanz), packen Sie dagegen in einen zweiten Keystore. Beispielsweise so:

	/home/servicerunner/tomcat.jks
	/home/servicerunner/xyapp.jks

Betreiben Sie dagegen mit unterschiedlichen Usern gleichzeitig auf einem System mehrere Java-Anwendungen und beispielsweise auch mehrere Tomcat-Instanzen mit mehreren Connectoren bzw. Ports (z. B. weil sie eine eigene Testinstanz für eigene Servererweiterungen verwenden wollen und diese unter Port 9443 mit selbstsignierten Zertifikaten betreiben wollen), dann bezeichnen und bestücken Sie die Keystores beispielsweise so:

	/home/servicerunner/tomcat-prod-port8443.keystore für die Tomcat-Instanz PROD
	/home/servicerunner/xyapp.jks für die Anwendung xyApp
	/home/tomcat-test/tomcat-test-port9443.jks für die Tomcat-Instanz TEST

Resultierend daraus wissen Sie genau, welche User welchen Key verantworten und welche JVM-Instanzen damit betrieben werden. Diese Vorgehensweise lässt sich natürlich auch auf andere Java-basierte Anwendungen und Produkte adaptieren, sei es nun ein Produkt mit Eclipse-Basis oder ein schlichtes Tomcat-basiertes Produkt wie Atlassian JIRA oder Sonatype Nexus.

Ergänzend sei noch erwähnt, dass man mehrere Keys eines Anwenders oder Dienstes auch in einem Keystore zusammenfassen kann, dann aber muss die Anwendung in der Lage sein, aus mehreren Keys anhand eines vorgegebenen Key-Namen, den richtigen Key für den jeweiligen Verschlüsselungsfall auszuwählen. Bei der Konfiguration von Tomcat-Connectoren geht das beispielsweise über das Property „keyAlias“.

Truststores vs. Keystores

Wie oben aufgezeigt ist es dringend zu empfehlen, die Truststores mit den Zertifikaten von den Keystores mit den Schlüsseln strikt zu trennen. In der Regel ist es sinnvoll einen unternehmensweiten Truststore mit allen vertrauenswürdigen Zertifikaten zu pflegen und diesen auf alle Systeme auszurollen. Sofern eine Anwendung eigene Schlüssel verwenden soll, z. B. um eine SSL-Verschlüsselte Anwendung auf einem Tomcat anzubieten, sollten die dafür notwendigen Keys so auf unterschiedliche Keystores verteilt werden, dass immer nur der verantwortliche Dienst oder User darauf zugreifen kann. Damit wird ein Missbrauch deutlich erschwert. Es ist daher ratsam, sich vor dem Betrieb von eigenen Anwendungen nochmals zu vergewissern, dass die Keystores und Truststores wirklich nur die relevanten Schlüssel bzw. notwendigen Zertifikate enthalten und diese passend geschützt abgelegt sind.

Einsteigern empfehle ich den sehr komfortablen http://keystore-explorer.org/ von dem auch die Screenshots stammen. Gerade wen man anfangs mit sehr vielen Key- und Truststores operiert, gestaltet sich die Verwaltung damit wesentlich übersichtlicher und intuitiver als mit dem Kommandozeilenwerkzeug „keytool“. Das JDK-eigene „keytool“ spielt seine Stärken nämlich vorallem auf Servern aus, auf denen man in der Regel mit der Kommandozeile besser unterwegs ist.

Subversion + Apache + SSL + Authentifizierung

Vor einiger Zeit stand ich wieder vor der Aufgabe einen Subversion-Server mit SSL und Authentifizierung zu konfigurieren. Zwar existieren mittlerweile auch einige kostenpflichtige Out-of-the-box-Server oder Hosting-Lösungen; wer sich diese Kosten aber sparen möchte, kommt mit ein paar Handgriffen auch sehr schnell zu seiner eigenen Installation. Weil das dafür notwendige Know-How recht weit übers Internet verteilt ist und selbst nach erfolgreicher Erstkonfiguration schnell wieder in Vergessenheit gerät, habe ich dieses kleine HOWTO entwickelt.

Was ist das Ziel?
Wir wollen einen Subversion Server installieren. Allerdings wollen wir den Benutzern das Browsen durch das Repository auf einfachste Weise ermöglichen und wollen das Repository deshalb über einen Webserver bereitstellen, sodass die Benutzer auch mit einem gewöhnlichen Webbrowser darauf zugreifen können. Dabei wollen wir nur angemeldeten Benutzern Zugriff auf das Repository gewähren. Um die Passwort- und Datenübertragung zwischen Client und Server abzusichern, soll die Kommunikation zwischen Client und Server verschlüsselt erfolgen. Darüber hinaus soll sichergestellt werden, dass immer verschlüsselt kommuniziert wird. Das heißt, dass der Webserver alle Anfragen gegebenenfalls von HTTP zu HTTPS umleiten muss.

Weil Subversionen keinen eigenen Webserver mitbringt, kommt hier folglich nur die Installation von Subversion in Verbindung mit einem SSL-fähigen Apache HTTP Server in Frage. Weil wir mittels HTTPS auf den Server zugreifen wollen, brauchen wir des weiteren ein SSL-Zertifikat. Dieses Zertifikat werden wir selbst erzeugen und auch selbst signieren, um die Kosten durch eine Zertifizierungsstelle zu sparen.

Wie gehen wir dazu im Groben vor?
Zunächst besorgen wir uns die einzelnen Installationspakete. Im Beispiel werden wir dazu den Apache HTTP Server 2.2.22 mit Subversion 1.7.3 verwenden. Für andere Versionen von Apache und Subversion ist die Anleitung analog anwendbar. Anschließend werden wir die Teilsysteme installieren und so konfigurieren, dass wir in den folgenden Schritten die gewünschten Authentifizierungs- und Verschlüsselungsmechanismen integrieren können.

Los geht’s!

1. Subversion
Subversion kann von http://subversion.apache.org/ bezogen werden. Zu empfehlen sind die unter http://sourceforge.net/projects/win32svn/ bereitgestellten Windows-Installer. Ich habe mich für „Subversion 1.7.3“ entschieden und es von http://sourceforge.net/projects/win32svn/files/1.7.3/ heruntergeladen. Der Installer des Paketes „Setup-Subversion-1.7.3.msi“ sollte selbsterklärend sein. Nach der Installation öffnet man die Kommandozeile und gibt dort svn --version ein.
Erscheint dort die Version 1.7.3, ist Subversion richtig installiert.

2. Apache HTTP Server
Apache httpd kann von http://httpd.apache.org/ bezogen werden. Der Apache HTTP Server wird in unterschiedlichen Packages bereitgestellt. Ich empfehle den Windows-Installer mit OpenSSL, weil dieser die später notwendigen Module für die SSL-Unterstützung bereits enthält. Ich habe mich für den „Apache HTTP Server 2.2.22 Win32 Binary including OpenSSL 0.9.8t (MSI Installer)“ entschieden. Auch hier sollte die Installation des Packages „httpd-2.2.22-win32-x86-openssl-0.9.8t.msi“ selbsterklärend sein. Nach der Installation öffnet man seinen Browser und navigiert zur Adresse http://localhost/. Erscheint eine Website mit den Worten „It works“, läuft der Apache HTTP Server korrekt.

3. Konfiguration Subversion
Man öffnet die Kommandozeile und erzeugt mit svnadmin create <path-to-repo> ein neues Repository an der gewünschten Stelle.

    svnadmin create C:\svn\mainrepo

Das SVN-Repository ist damit schon einsatzbereit. Alle weiteren Einstellungen nehmen wir im Apache HTTP Server vor.

4. Konfiguration Apache HTTP Server
Um mögliche Konfigurationsfehler wieder rückgängig machen zu können, empfehle ich dringendst zuerst das Verzeichnis <apachehome>/conf zu sichern. Danach kann man die Konfigurationsdatei <apachehome>/conf/httpd.conf gefahrlos öffnen und gegebenenfalls wieder zurücksetzen. Weil die SVN-Module zuletzt geladen werden sollen, navigieren wir zum Ende des Abschnitts, der die LoadModule-Direktiven enthält. Dort ergänzen wir zwei Direktiven, die für das Laden der Subversion-Module verantwortlich sind. Bei der Einbindung der Subversion-Module empfehle ich allerdings entgegen einiger im Internet kursierender Beschreibungen die beiden .so-Dateien nicht von Subversion ins Verzeichnis von Apache zu kopieren, sondern innerhalb der Subversion-Installation zu belassen. In einigen Fällen stört sich der Apache Server daran, wenn das Verzeichnis <svn_home>/bin mit den darin enthaltenen SVN-Apache-Modulen in der PATH-Umgebungsvariable definiert war und gleichzeitig in httpd.conf die beiden kopierten SVN-Apache-Module im modules-Verzeichnis des Apache Servers referenziert werden. Der Apache Server startet dann unter Umständen nicht. Stattdessen referenzieren wir die SVN-Module in <apachehome>/conf/httpd.conf auf folgende Weise:

    LoadModule dav_svn_module "C:/Programme/Subversion/bin/mod_dav_svn.so"
    LoadModule authz_svn_module "C:/Programme/Subversion/bin/mod_authz_svn.so"

Wichtig ist dabei, dass die Pfadangaben mit Slashes notiert werden. Sind im Pfad Leerzeichen enthalten, muss der Pfad außerdem in Anführungszeichen eingefasst sein. Außerdem aktiviert man in <apachehome>/conf/httpd.conf das WebDav-Modul, indem man den Kommentar vor der entsprechenden Zeile entfernt:

    LoadModule dav_module modules/mod_dav.so

Jetzt überprüft man in <apachehome>/conf/httpd.conf die Directory-Permissions, und zwar für root und für das htdocs-Verzeichnis:

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order Allow,Deny
        Allow from All
    </Directory>
    <Directory "C:/Program Files/Apache Software foundation/Apache2.2/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from All
    </Directory>

Jetzt ist die Konfiguration von SVN zu erledigen, dazu legen wir zunächst unter der Apache-Installation das Verzeichnis <apachehome>/svn an. Dort legen wir alle Einstellungen und Konfigurationen für SVN ab, die der Apache HTTP Server benötigt.

Die erste Konfiguration betrifft die Passwörter. Diese legen wir der Einfachheit so an, dass wir die zukünftigen Benutzer nacheinander zur Konsole bitten und mit den folgenden Statements die jeweiligen Zugangsdaten anlegen.

    <apachehome>/bin> htpasswd -cm C:\Programme\Apache Software Foundation\Apache2.2\svn\svn-auth alice
    <apachehome>/bin> htpasswd -m C:\Programme\Apache Software Foundation\Apache2.2\svn\svn-auth bob
    <apachehome>/bin> htpasswd -m C:\Programme\Apache Software Foundation\Apache2.2\svn\svn-auth john

Die Option -c im ersten Kommando erzeugt das Passwort-File, während die folgenden Statements dafür sorgen, dass die Passwörter nur hinzugefügt werden. Die Option -m gibt an, dass das Passwort mit dem MD5-Algorithmus verschlüsselt werden soll. (Sehr viel schöner ist natürlich die Anbindung unseres Servers an ein LDAP. Wie man das genau macht, werde ich vielleicht später noch ergänzen, ansonsten sei an dieser Stelle auf entsprechende Tutorials im Internet verwiesen.)

Die zweite Konfiguration betrifft die Vergabe der Benutzerberechtigungen. Im Verzeichnis <apachehome>/svn legen wir dazu die Datei svn-acl mit folgendem Inhalt an:

    ###
    # group definition
    [groups]
    superusers = alice, bob
    otherusers = john

    ###
    # superusers have a read/write access to mainrepo
    # all other users have read access
    [mainrepo:/]
    @superusers = rw
    * = r

    ###
    # create another repository with svnadmin create
    # john has read/write access to johnsproject
    # bob has read access
    [johnsproject:/]
    john = rw
    bob = r

Die Datei entspricht dem üblichen Berechtigungsschema von Subversion und kann entsprechend angepasst werden.

Die dritte Konfiguration legt fest, wie das SVN-Repository von Apache publiziert werden soll. Dazu legt man im Verzeichnis <apachehome>/conf/extra die Datei httpd-svn.conf mit folgendem Inhalt an:

    <Location /mainrepo>
        DAV svn
        SVNPath C:/svn/mainrepo

        AuthType Basic
        AuthName "Subversion Main Repository"
        AuthUserFile "C:/Programme/Apache Software Foundation/Apache2.2/svn/svn-auth"

        Require valid-user

        AuthzSVNAccessFile "C:/Programme/Apache Software Foundation/Apache2.2/svn/svn-acl"
    </Location>

Jetzt muss die SVN-Konfiguration nur noch in die Apache-Konfiguration eingebunden werden. Dazu öffnet man wieder <apachehome>/conf/httpd.conf und fügt am Ende die folgende Zeile ein:

    Include conf/extra/httpd-svn.conf"

Nach diesem etwas komplizierterem Teil ist ein Neustart des Apache notwendig. Sobald der Apache wieder läuft, öffnet man wieder seinen Browser und navigiert zur Adresse http://localhost/. Erscheint wieder die Website mit den Worten „It works“, läuft der Apache HTTP Server korrekt. Anschließend ruft man die Adresse http://localhost/mainrepo auf. Je nachdem wie man die Berechtigungen in Apache gesetzt hat, sollte nun eine Eingabemaske für Login und Passwort erscheinen. Hat man Login und Passwort korrekt eingegeben, sollte das SVN-Root-Verzeichnis erscheinen. Unser Subversion Server auf Basis des Apache HTTP Server ist fertig konfiguriert.

5. Konfiguration von SSL in Apache
Für die Verschlüsselung muss zunächst ein entsprechender Key und ein Zertifikat erstellt werden. Dazu bringt Apache das Werkzeug OpenSSL mit, das wir für die Erzeugung des Keys und der Zertifikate benutzen können. Es ist unter <apachehome>/bin/openssl.exe zu finden. Für die Generierung ist eine entsprechende Konfigurationsdatei notwendig. Sie befindet sich bereits unter <apachehome>/conf/openssl.cnf und kann für unsere Zwecke sofort verwendet werden. Wir öffnen die Kommandozeile und feuern folgende Kommandos ab:

    openssl genrsa -des3 -out server.key 1024 -config "C:\Programme\Apache Software Foundation\Apache2.2\conf\openssl.cnf"

Generiert uns einen Key.

    openssl rsa -in server.key -out server.pem

Erzeugt einen unverschlüsselten Key.

    openssl req -new -key server.key -out server.csr -config "C:\Programme\Apache Software Foundation\Apache2.2\conf\openssl.cnf"

Erzeugt ein unsigniertes Zertifikat, das wir zur Signierung auch an eine Zertifizierungsstelle zur Signierung senden könnten. Wir wollen aber ein selbstsigniertes Zertifikat und feuern noch folgendes Kommando hinterher:

    openssl x509 -req -days 30 -in server.csr -signkey server.key -out server.crt

Die einzelnen Kommandos habe ich mit der Option -config "C:\Programme\Apache Software Foundation\Apache2.2\conf\openssl.cnf" ausgeführt. Wird die Option vergessen, weigert sich OpenSSL die Befehle auszuführen, weil es die Datei im Standardverzeichnis /usr/lib/ssl/openssl.cnf nicht finden kann. Zur Erzeugung des Zertifikats sind unter anderem einige Angaben bezüglich der Firmenbezeichnung notwendig. Für Testzwecke kann man diese auch leer lassen.

Die beiden generierten Dateien server.crt and server.pem kopiert man in das Verzeichnis <apachehome>/conf. Anschließend aktiviert man in <apachehome>/conf/httpd.conf das SSL-Module, indem man den Kommentar vor den folgenden Zeilen entfernt:

    Loadmodule ssl_module modules/mod_ssl.so
    ...
    Include conf/extra/httpd-default.conf

Anschließend ändert man die SSL-Konfiguration unter <apachehome>/conf/extra/httpd-ssl.conf und referenziert das Zertifikat und das Key-File, indem man die folgenden Zeilen anpasst:

    SSLCertificateFile "C:/Programme/Apache Software Foundation/Apache2.2/conf/server.crt"
    ...
    SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server.pem"

Nach der Konfiguration ist wieder ein Neustart des Apache notwendig. Sobald der Apache wieder bereit ist, öffnet man wie gewohnt seinen Browser und steuert die Adresse https://localhost/mainrepo an. Wichtig ist die Angabe des Zugriffsschemas HTTPS am Beginn der URL. Man erhält die obligatorische Frage, ob man das Zertifikat akzeptieren möchte und bestätigt diese. Erscheint das SVN-Root-Verzeichnis, läuft der Apache HTTP Server mit HTTPS korrekt.

6. Konfiguration der HTTP-zu-HTTPS-Umleitung in Apache
Um sicherzustellen, dass alle Benutzer nur über eine verschlüsselte Verbindung mit unserem Server kommunizieren, richten wir einen HTTP-Rewrite ein, der alle Anfragen zur jeweiligen HTTPS-Adresse umleitet, wenn ein Benutzer aus Versehen doch einmal die HTTP-Adresse ansteuern sollte. Dazu öffnet man wieder die Konfiguration <apachehome>/conf/httpd.conf und aktiviert dort das Module für den Rewrite von Anfragen, indem man den Kommentar vor der betreffenden Zeile entfernt:

    LoadModule rewrite_module modules/mod_rewrite.so

Anschließend ergänzt man am Ende von <apachehome>/conf/httpd.conf die Zeilen, die für den Rewrite von HTTP-Anfragen sorgen.

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Nun öffnet man seinen Browser und navigiert zur Adresse http://localhost/mainrepo. Wichtig ist die Angabe des Zugriffsschemas für unseren kleinen Test, und zwar diesmal HTTP. Erscheint nach Eingabe der Logindaten das SVN-Root-Verzeichnis und in der Adresszeile des Browsers steht vor der Adresse https://localhost/mainrepo das Zugriffsschema HTTPS, funktioniert unser HTTPS-Rewrite mit dem Apache HTTP Server wie gewünscht.

7. Browser konfigurieren
Weil wir mit einem selbstsignierten Zertifikat arbeiten, erhalten die Benutzer beim Zugriff auf die HTTPS-URLs eine Warnung, dass dem Zertifikat nicht vertraut wird. Weil wir davon ausgehen, dass die Benutzer unseres Servers dem Zertifikat vertrauen, wollen wir diese Warnung vermeiden. Dazu müssen alle Benutzer das Zertifikat in ihren Browser importieren und die Vertrauenseinstellung entsprechend konfigurieren:

  • Im Firefox navigiert man dazu über das Menü „Extras > Einstellungen > Erweitert > Register Verschlüsselung > Zertifikate anzeigen“ zur Zertifikatsverwaltung.
  • Dort öffnet man den Register „Server“ und erhält einen Überblick über alle Zertifikate. Über die Schaltfläche „Importieren…“ fügt man das generierte Zertifikat server.crt den bereits vorhandenen Zertifikaten hinzu.
  • Um dem Zertifikat zu vertrauen, markiert man es in der Liste, öffnet anschließend mit „Vertrauen bearbeiten…“ die Vertrauenseinstellungen und setzt die Einstellung auf „Der Echtheit dieses Zertifikats vertrauen“ um.

Benutzer die mit Microsoft Internet Explorer oder Google Chrome arbeiten, gehen ähnlich vor.

8. Wie weiter bei Problemen?
Die meisten Probleme ergeben sich aus der falschen Konfiguration des Servers. Um diesen Problemen auf den Grund zu gehen, sollte man den Apache HTTP Server mit folgender Zeile auf der Konsole starten:

    <apachehome>/bin> httpd -e debug -w

Die Ausgaben auf der Konsole sollten recht schnell zur Problemursache und dessen Lösung führen. Darüberhinaus findet man unter <apachehome>/logs die Logfiles des Servers, die ebenso Aufschluss über mögliche Fehlerquellen geben. Ein guter Ansatz zur Fehlerbehebung ist es außerdem, die einzelnen Apache-Module nicht gleichzeitig auf einmal sondern wie oben gezeigt jeweils nacheinander zu aktivieren, um herauszufinden welches Modul zu Problemen führt. Anschließend kann man sich der Konfiguration des betreffenden Moduls zuwenden.