Kapitel 3. Einen Server einrichten

Inhaltsverzeichnis

Apache als Server
Einleitung
Apache installieren
Subversion installieren
Konfiguration
Mehrere Projektarchive
Pfadbasierte Autorisierung
Anmeldung an einer Windows Domäne
Mehrere Anmeldequellen
Den Server mit SSL sichern
Client-Zertifikate mit virtuellen SSL Hosts verwenden
Svnserve als Server
Einleitung
Svnserve installieren
Svnserve starten
Einfache Anmeldung mit Svnserve
Bessere Sicherheit mit SASL
Anmeldung mit svn+ssh
Pfadbasierte Autorisierung mit svnserve

Um TortoiseSVN (oder einen anderen Subversion Client) nutzen zu können, benötigen Sie einen Ort, an dem Ihre Projektarchive liegen. Sie können diese entweder lokal anlegen und mit dem file:// Protokoll darauf zugreifen oder Sie können die Projektarchive auf einem Server anlegen und mit den http:// oder svn:// Protokollen darauf zugreifen. Die beiden Serverprotokolle können zusätzlich verschlüsselt werden. Dazu verwenden Sie entweder https:// oder svn+ssh://. Diese Kapitel zeigt Ihnen Schritt für Schritt, wie Sie einen Server auf einem Windows Rechner einrichten.

Detaillierte Informationen über Subversion Serveroptionen und wie Sie die beste Architektur für Ihre Situation wählen, finden Sie in Server Configuration.

Wenn Ihnen kein Server zur Verfügung steht oder Sie sowieso nur alleine arbeiten, sind lokale Projektarchive für Sie die beste Wahl. Sie können dieses Kapitel überspringen und direkt zu Kapitel 4, Das Projektarchiv gehen.

Falls Sie in Erwägung gezogen haben, ein Projektarchiv für mehrere Benutzer auf einer Netzwerkfreigabe anzulegen, sollten Sie dies noch einmal überdenken. Lesen Sie in „Projektarchiv auf einer Netzwerkfreigabe“ nach, warum wir glauben, dass das eine schlechte Idee ist.

Apache als Server

Einleitung

Der vielseitigste aller Server für Subversion ist der auf Apache basierende Server. Obwohl er ein wenig schwieriger einzurichten ist, bietet er den anderen Varianten gegenüber einige Vorteile:

WebDAV

Der Apache-basierte Subversion Server nutzt das WebDAV Protokoll, das auch von vielen anderen Programmen unterstützt wird. Sie können ein solches Verzeichnis zum Beispiel als „Web-Ordner“ im Windows Explorer einbinden und wie jeden anderen Ordner im Dateisystem benutzen.

Das Projektarchiv betrachten

Sie können Ihren Web-Browser per http:// auf die URL des Projektarchivs zeigen lassen und dessen Inhalt betrachten, ohne einen Subversion Client zu installieren. Dies ermöglicht einem großen Anwenderkreis auf Ihre Daten zuzugreifen.

Anmeldung

Sie können jedes Anmeldeverfahren nutzen, das von Apache unterstützt wird, zum Beispiel SSPI und LDAP.

Sicherheit

Da Apache sehr stabil und sicher ist, bekommen Sie damit automatisch die gleiche Sicherheit (zum Beispiel SSL Verschlüsselung) für Ihr Projektarchiv.

Apache installieren

Für die Installation von Apache unter Windows benötigen Sie zumindest Windows2000 / WinXP+SP1 oder Windows2003,Vista oder Server 2008.

Warnung

Bitte beachten Sie, dass Windows XP ohne Servicepack 1 zu fehlerhaften Netzwerkdaten führt und dadurch Ihr Projektarchiv beschädigt werden kann!

  1. Laden Sie die neueste Version des Apache Web-Servers von http://httpd.apache.org/download.cgi. Achten Sie darauf, dass Sie Version 2.2.x oder neuer herunterladen - Die 1.3.xx arbeiten nicht mit Subversion zusammen!

    Den MSI Installer für Apache finden Sie, indem Sie auf other files klicken und dann zu binaries/win32 navigieren. Wenn Sie SSL benötigen sollten Sie apache-2.2.x-win32-x86-openssl-0.9.x.msi herunterladen.

  2. Sobald Sie den Apache 2 Installer haben, können Sie ihn mit einem Doppelklick starten. Sie werden Schritt für Schritt durch den Installationsprozess geführt. Stellen Sie sicher, dass Sie die Server URL korrekt eingeben. Wenn Sie keinen DNS Server haben, nehmen Sie stattdessen einfach die IP Adresse. Wir raten dazu, Apache für Alle Benutzer, auf Port 80, als Dienst zu installieren. Achtung: Wenn Sie bereits IIS oder ein anderes Programm installiert haben, dass auf Port 80 lauscht, kann die Installation fehlschlagen. Wenn das passiert, gehen Sie in C:\Programme\Apache Group\Apache2\conf und öffnen Sie dort die Datei httpd.conf. Suchen Sie den Eintrag Listen 80 und ändern Sie diesen in eine freie Portnummer, z.B. Listen 81. Starten Sie die Installation erneut - Diesmal sollte sie ohne Probleme durchlaufen.

  3. Testen Sie nun, ob Apache korrekt installiert ist, indem Sie in Ihren Web-Browser die URL http://localhost/ eingeben. Eine Standard Webseite sollte angezeigt werden.

Achtung

Wenn Sie sich entscheiden, Apache als Dienst zu installieren, beachten Sie bitte dass er dann mit den lokalen SYSTEM Berechtigungen läuft. Es ist wesentlich sicherer, wenn Sie für Apache ein eigenes Benutzerkonto anlegen in dessen Kontext der Dienst dann läuft.

Stellen Sie sicher, dass das Konto unter dem der Apache Server läuft, einen eigenen Eintrag in der Zugriffskontrollliste des übergeordneten Verzeichnisses für die Projektarchive hat (Rechtsklick Verzeichnis | Eigenschaften | Sicherheit), der dem Konto vollen Zugriff auf das Verzeichnis gestattet. Andernfalls können Anwender keine Änderungen zum Projektarchiv übertragen.

Selbst wenn Apache als „Lokales System“ läuft, brauchen Sie immer noch einen solchen Eintrag (der in diesem Fall das SYSTEM-Konto sein wird).

Wenn Apache diese Berechtigung nicht gesetzt hat, werden Ihre Benutzer „Zugriff verweigert“-Fehlermeldungen erhalten, die im Apache-Fehlerlog als Fehler 500 erscheinen.

Subversion installieren

  1. Laden Sie die neuste Version von Subversion für Apache unter Win32 herunter. Stellen Sie sicher, dass sie die richtige Version für Ihren Apachen wählen, da Sie sonst seltsame Fehlermeldungen beim Neustart erhalten. Für Apache Version 2.2.x gehen Sie zu http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100.

  2. Starten Sie den Subversion-Installer und folgen Sie den Anweisungen. Wenn der Subversion-Installer bemerkt, dass Sie Apache installiert haben, haben Sie es fast geschafft. Wenn er keinen Apache-Server finden konnte, müssen Sie einige zusätzliche Schritte durchführen.

  3. Gehen Sie mit dem Windows Explorer ins Installationsverzeichnis von Subversion (für gewöhnlich c:\Programme\Subversion) und finden Sie die Dateien /httpd/mod_dav_svn.so und mod_authz_svn.so. Kopieren Sie diese Dateien ins Apache-Modulverzeichnis (für gewöhnlich c:\Programme\apache group\apache2\modules ).

  4. Kopieren Sie die Dateien /bin/libdb*.dll und /bin/intl3_svn.dll aus dem Subversion-Installationsverzeichnis in dass Apache /bin Verzeichnis.

  5. Bearbeiten Sie die Konfigurationsdatei von Apache (für gewöhnlich C:\Programme\Apache Group\Apache2\conf\httpd.conf) mit einem Texteditor wie Notepad und nehmen Sie die folgenden Änderungen vor:

    Entfernen Sie den Kommentar (d.h. das '#'-Zeichen) in den folgenden Zeilen:

    #LoadModule dav_fs_module modules/mod_dav_fs.so
    #LoadModule dav_module modules/mod_dav.so

    Fügen Sie die folgenden zwei Zeilen an das Ende des LoadModule-Abschnittes ein.

    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    

Konfiguration

Jetzt haben Sie Apache und Subversion eingerichtet, aber Apache weiß noch nicht, wie mit Subversion-Clients wie TortoiseSVN umzugehen ist. Um Apache beizubringen, welche URL für Subversion-Projektarchive benutzt werden soll, müssen Sie die Apache-Konfigurationsdatei (für gewöhnlich platziert in c:\Programme\apache group\apache2\conf\httpd.conf) mit einem beliebigen Texteditor (z.B. Notepad) bearbeiten:

  1. Am Ende der Konfigurationsdatei fügen Sie die folgenden Zeilen hinzu:

    <Location /svn>
      DAV svn
      SVNListParentPath on
      SVNParentPath D:\SVN
      #SVNIndexXSLT "/svnindex.xsl"
      AuthType Basic
      AuthName "Subversion-Projektarchive"
      AuthUserFile passwd
      #AuthzSVNAccessFile svnaccessfile
      Require valid-user
    </Location>
    

    Dies konfiguriert Apache so, dass alle Ihre Subversion-Projektarchive physikalisch unterhalb von D:\SVN liegen. Die Projektarchive werden der Außenwelt unter folgender URL zu Verfügung gestellt: http://MyServer/svn/. Der Zugriff ist auf bekannte Benutzer/Passwörter beschränkt, die in der passwd-Datei aufgelistet sind.

  2. Um die passwd-Datei zu erstellen, öffnen Sie den Kommandozeilenprompt (DOS-Box) noch einmal, wechseln in den apache2 Ordner (für gewöhnlich c:\Programme\apache group\apache2) und erstellen Sie die Datei, indem Sie

    bin\htpasswd -c passwd <username>

    eintippen. Dies wird eine Datei mit dem Namen passwd erstellen, die für die Anmeldung verwendet wird. Zusätzliche Benutzer können mit

    bin\htpasswd passwd <username>

    hinzugefügt werden.

  3. Starten Sie den Apache-Dienst noch einmal neu.

  4. Öffnen Sie mit Ihrem Web-Browser die URL http://MeinServer/svn/MeinNeuesProjektarchiv (wobei MeinNeuesProjektarchiv der Name des Subversion-Projektarchivs ist, das Sie zuvor erstellt haben). Wenn alles gut gegangen ist, sollten Sie nach einem Benutzernamen und Passwort gefragt werden und können dann den Inhalt Ihres Projektarchivs sehen.

Eine kurze Erklärung dessen was Sie gerade eingegeben haben:

Tabelle 3.1. Apache httpd.conf Einstellungen

EigenschaftErklärung
<Location /svn>bedeutet, dass die Projektarchive unter der URL http://MyServer/svn/ aufrufbar sind.
DAV svnteilt Apache mit, welches Modul (in diesem Fall das Subversion Modul), für diese URL zuständig ist.
SVNListParentPath onFür Subversion 1.3 und neuer ermöglicht diese Direktive, die verfügbaren Projektarchive unter SVNParentPath aufzulisten.
SVNParentPath D:\SVNteilt Apache mit, dass die Projektarchive unterhalb von D:\SVN liegen.
SVNIndexXSLT "/svnindex.xsl"XML Stylesheet, mit dem die Standardansicht des Projektarchivs im Web-Browser formatiert wird.
AuthType Basiczur Anmeldung wird ein einfaches Verfahren mit Name / Passwort verwendet.
AuthName "Subversion repositories"wird als Information an das Programm (z.B. Web-Browser, TortoiseSVN) weitergereicht, mit dem sich der Benutzer am Projektarchiv anmeldet.
AuthUserFile passwdgibt die Passwortdatei für die Anmeldung an.
AuthzSVNAccessFileName der Datei in der die Zugriffsrechte innerhalb der Subversion Projektarchive festgelegt sind.
Require valid-userlegt fest, dass nur Personen, die sich korrekt angemeldet haben, auf die URL zugreifen dürfen.


Aber das ist nur ein Beispiel. Der Apache Web-Server bietet Ihnen viele weiter Möglichkeiten.

  • Wenn Sie möchten, dass Ihr Projektarchiv für jedermann Lesezugriff bietet, aber der Schreibzugriff bestimmten Benutzern vorbehalten bleibt, können Sie die Zeile

    Require valid-user

    in

    <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
    </LimitExcept>
    

    ändern.

  • Mit einer passwd Datei können Sie den Zugriff auf alle Ihre Projektarchive zentral steuern. Wenn Sie genau einstellen wollen, welche Benutzer / Gruppen welche Berechtigungen in Ihren Projektarchiven haben sollen, entfernen Sie das Kommentarzeichen vor

    #AuthzSVNAccessFile svnaccessfile

    und legen Sie die Subversion Zugriffsdatei svnaccessfilean. Apache stellt sicher, dass nur angemeldete Benutzer auf Ihre /svn Location zugreifen können und wird dann den Benutzernamen an das Subversion AuthzSVNAccessFile Modul weiterreichen, das die Benutzerrechte fein gegliedert anhand der Regeln in der Subversion Zugriffsdatei steuert. Beachten Sie, dass die Pfade entweder als Projektarchiv:Pfad oder einfach als Pfad angegeben werden. Wenn Sie kein Projektarchiv angeben, wird die Regel auf alle Projektarchive unterhalb SVNParentPath angewendet. Das Format der von mod_authz_svn verwendeten Berechtigungsdatei ist in „Pfadbasierte Autorisierung“ beschrieben.

  • Um die Ansicht des Projektarchivs im Web-Browser 'schöner' zu formatieren, kommentieren Sie die Zeile

    #SVNIndexXSLT "/svnindex.xsl"

    aus und kopieren die Dateien svnindex.xsl, svnindex.css und menucheckout.ico in das Document Root Verzeichnis des Apache Servers (normalerweise C:/Programme/Apache Group/Apache2/htdocs). Dieses Verzeichnis wird mit der DocumentRoot Anweisung in der Apache Konfigurationsdatei eingestellt.

    Sie können diese drei Dateien direkt aus unserem Projektarchiv http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk/contrib/other/svnindex herunterladen. Falls sie nach einer Anmeldung gefragt werden, geben Sie einfach guest als Benutzername ein und lassen das Passwort frei.

    Die XSL Datei aus dem TortoiseSVN Projektarchiv enthält einen netten Kniff. Wenn Sie das Projektarchiv mit ihrem Web-Browser betrachten, wird neben jedem Ordner Ihres Projektarchivs ein Symbol angezeigt. Wenn Sie auf dieses Symbol klicken, wird sofort der Auschecken-Dialog von TortoiseSVN für die entsprechende URL aufgerufen.

Mehrere Projektarchive

Wenn Sie die SVNParentPath-Direktive benutzt haben, brauchen Sie die Apache-Konfigurationsdatei nicht jedes Mal zu ändern, wenn Sie ein neues Subversion-Projektarchiv erstellt haben. Erstellen Sie das neue Projektarchiv einfach an der gleichen Stelle wie das erste Projektarchiv und Sie sind fertig! In meiner Firma habe ich über SMB (normaler Windows-Dateizugriff) direkten Zugriff auf diesen speziellen Ordner auf dem Server. Also erstelle ich dort einfach einen neuen Ordner, führe den TortoiseSVN-Befehl TortoiseSVNProjektarchiv hier erstellen... aus und ein neues Projekt hat ein Zuhause...

Wenn Sie Subversion 1.3 oder neuer benutzen, können Sie die SVNListParentPath on Direktive verwenden, damit Apache eine Liste aller verfügbaren Projekte erzeugt, falls Sie auf den SVNParentPath anstatt auf ein Projektarchiv zugreifen.

Pfadbasierte Autorisierung

Das mod_authz_svn Modul ermöglicht fein gegliederte Zugriffsberechtigungen basierend auf Benutzernamen und Pfaden im Projektarchiv. Diese Funktionen stehen seit jeher mit dem Apache Server und seit Subversion 1.3 auch mit svnserve zur Verfügung.

Eine Beispieldatei könnte folgendermaßen aussehen:

[groups]
Admin = john, kate
Entwickler1 = john, rachel, sally
Entwickler2 = kate, peter, mark
Doku = bob, jane, mike
Training = zak
# Standardzugriffsrechte für alle Projektarchive
# Jeder erhält Lesezugriff, Admins können schreiben,
# Karl Napf wird ausgeschlossen
[/]
* = r
@Admin = rw
karlnapf =
# Die Entwickler erhalten Vollzugriff auf ihre Projektarchive
# Hans Dampf arbeitet bei dem großen Projekt noch mit
[Projekt1:/]
@Entwickler1 = rw
[Projekt2:/]
@Entwickler2 = rw
[Riesenprojekt:/]
@Entwickler1 = rw
@Entwickler2 = rw
hansdampf = rw
#Die Doku Gruppe erhält Vollzugriff auf die doc Unterverzeichnise
[/trunk/doc]
@Doku = rw
# Anfänger dürfen nur im Training Projektarchiv wüten
[TrainingRepos:/]
@Training = rw

Beachten Sie, dass die Überprüfung aller Pfade, besonders wenn das Log angezeigt wird, eine teure Operation sein kann. Der Server prüft jeden geänderten Pfad in jeder Revision auf Lesbarkeit, was bei Revisionen, die eine große Anzahl Dateien betreffen, sehr Zeitaufwändig sein kann.

Anmeldung und Zugriffsberechtigung (Autorisierung) sind separate Prozesse. Damit ein Anwender auf einen Pfad im Projektarchiv zugreifen kann, muss er beide Bedingungen erfüllen. Er muss angemeldet sein und die Berechtigung zum Zugriff auf den gewünschten Pfad besitzen.

Anmeldung an einer Windows Domäne

Wie Sie bestimmt bemerkt haben, benötigen Sie für jeden Anwender einen eigenen Eintrag in der passwd Datei. Falls Sie aus Sicherheitsgründen verlangen, dass die Benutzerpasswörter regelmäßig geändert werden, müssen Sie das jedes Mal von Hand machen.

Falls Sie auf das Projektarchiv in einem Windows Netzwerk mit einem Domänencontroller zugreifen, gibt es eine einfache Lösung: mod_auth_sspi!

Das Original SSPI Modul wurde von Syneapps inklusive Quellcode zur Verfügung gestellt. Das Modul wurde jedoch nicht mehr weiterentwickelt. Aber keine Angst, die Open-Source Gemeinde hat sich des Moduls angenommen und es weiterentwickelt. Das Projekt hat ein neues Zuhause auf SourceForge.

  • Laden Sie das Modul, das zu Ihrer Apache-Version passt herunter und kopieren Sie die Datei mod_auth_sspi.so in den Apache modules Ordner.

  • Bearbeiten Sie die Apache Konfigurationsdatei. Fügen Sie dort die Zeile

    LoadModule sspi_auth_module modules/mod_auth_sspi.so

    in den LoadModule Abschnitt ein. Stellen Sie sicher, dass Sie diesen Eintrag vor der Zeile

    LoadModule auth_module modules/mod_auth.so

    einfügen.

  • Damit die Subversion Location dieses Anmeldeverfahren verwendet, müssen Sie die Zeile

    AuthType Basic

    in

    AuthType SSPI

    ändern. Weiterhin müssen Sie die Zeilen:

    SSPIAuth On
    SSPIAuthoritative On
    SSPIDomain <domaincontroller>
    SSPIOmitDomain on
    SSPIUsernameCase lower
    SSPIPerRequestAuth on
    SSPIOfferBasic On
    

    in den <Location /svn> Abschnitt einfügen. Wenn Sie keinen Domänencontroller haben, lassen Sie den Eintrag für den Namen <domaincontroller> unverändert.

Beachten Sie, dass Sie bei Verwendung von SSPI keine AuthUserFile Zeile mehr benötigen, um eine Passwortdatei zu definieren. Apache wird Ihren Namen und Ihr Passwort gegen den Windows Domänencontroller verifizieren. Sie müssen die Benutzerliste in svnaccessfile anpassen, um Anmeldungen der Form DOMÄNE\username ebenfalls zuzulassen.

Wichtig

Die SSPI Anmeldung wird nur für Verbindungen aktiviert, die per SSL gesichert sind (https). Wenn Sie nur normale http Verbindungen zu Ihrem Server aufbauen, steht SSPI nicht zur Verfügung.

Eine Anleitung zum Einrichten von SSL auf Ihrem Server findet sich in „Den Server mit SSL sichern“.

Tipp

Subversion AuthzSVNAccessFile Dateien berücksichtigen bei Benutzernamen die Groß- / Kleinschreibung (JUser unterscheidet sich von juser).

In der Microsoft Welt wird die Schreibweise bei Windows Domänen und Benutzernamen ignoriert. Trotzdem legen viele Administratoren gerne Benutzerkonten wie JUser an.

Dieser Unterschied kann schmerzhaft sein, wenn Sie SSPI Anmeldung unter Windows verwenden und der Benutzername in der gleichen Schreibweise an Subversion weitergereicht werden, wie der Anwender ihn eingegeben hat, da JUser und juser für Subversion verschiedene Personen sind. Der Internet Explorer reicht den Anmeldenamen oft automatisch in der Schreibweise, in der das Konto angelegt wurde, an Apache weiter.

Das Ergebnis davon ist, dass Sie für jeden Anwender mindestens zwei Einträge in Ihrer AuthzSVNAccessFile Datei benötigen. Einen Eintrag in Kleinbuchstaben und einen Eintrag in der Schreibweise wie das Konto angelegt wurde. Weiterhin müssen Sie Ihre Anwender dahingehend trainieren, dass sie sich immer in Kleinbuchstaben anmelden, wenn sie einen Subversion Client wie TortoiseSVN benutzen.

Die Fehler- und Zugriffs-Logdateien von Apache sind Ihre besten Freunde, wenn es darum geht, Probleme dieser Art zu lokalisieren und zu beseitigen, da Sie Ihnen anzeigen, in welcher Schreibweise ein Anmeldename an das Subversion AuthzSVNAccessFile Modul weitergereicht wurde. Sie müssen eventuell etwas mit dem exakten Format der Anmeldenamen in svnaccessfile experimentieren (z.B. DOMÄNE\user und DOMÄNE//user), um alles ans Laufen zu bekommen.

Mehrere Anmeldequellen

Es ist auch möglich, mehr als eine Anmeldequelle für Ihr Subversion Projektarchiv zu haben. Um dies zu erreichen, müssen Sie jeden Anmeldetyp als unmaßgeblich („non-authoritative‚) festlegen, so dass Apache mehrere Quellen auf eine korrekte Name/Passwort Kombination überprüft.

Ein übliches Szenario ist es, sowohl die Windows Domänenanmeldung als auch eine passwd Datei zu verwenden, so dass Sie Benutzern, die kein Domänenkonto besitzen, Zugriff auf das Projektarchiv gewähren können.

  • Um sowohl die Windows Domänenanmeldung als auch Anmeldung per Passwortdatei zu ermöglichen, fügen Sie die folgenden Einträge innerhalb des <Location> Blocks Ihrer Apache-Konfiguration ein:

    AuthBasicAuthoritative Off
    SSPIAuthoritative Off
    

Hier ist ein Beispiel einer vollständigen Apache Konfiguration für gemeinsamen Windows Domänenzugriff und passwd Dateianmeldung:

<Location /svn>
  DAV svn
  SVNListParentPath on
  SVNParentPath D:\SVN

  AuthName "Subversion repositories"
  AuthzSVNAccessFile svnaccessfile.txt

# NT Domain Logins.
  AuthType SSPI
  SSPIAuth On
  SSPIAuthoritative Off
  SSPIDomain <domaincontroller>
  SSPIOfferBasic On

# Htpasswd Logins.
  AuthType Basic
  AuthBasicAuthoritative Off
  AuthUserFile passwd

  Require valid-user
</Location>

Den Server mit SSL sichern

Obwohl Apache 2.2.x OpenSSL unterstützt, ist diese Option standardmäßig nicht genutzt und muss manuell aktiviert werden.

  1. Kommentieren Sie die folgenden Zeilen in der Apache Konfigurationsdatei aus:

    #LoadModule ssl_module modules/mod_ssl.so

    und am Ende:

    #Include conf/extra/httpd-ssl.conf

    Dann ändern Sie die Zeile (in einer Zeile):

    SSLMutex "file:C:/Program Files/Apache Software Foundation/\
              Apache2.2/logs/ssl_mutex"

    in

    SSLMutex default
  2. Als nächstes benötigen Sie ein SSL Zertifikat. Dazu starten Sie eine Kommandozeile (DOS-Box) und wechseln in den Apache Ordner (z.B. C:\Programme\apache group\apache2) und geben den folgenden Befehl ein:

    bin\openssl req -config bin\openssl.cnf -new -out my-server.csr

    Sie werden nach einer Passphrase gefragt. Bitte nutzen Sie keine einfachen Wörter sondern ganze Sätze, z.B. ein Teil eines Gedichts. Je länger die Passphrase ist, desto besser. Außerdem müssen Sie die URL Ihres Servers angeben. Alle anderen Angaben sind optional. Sie sollten Sie aber trotzdem ausfüllen.

    Normalerweise wird die privkey.pem Datei automatisch generiert. Wenn nicht, müssen Sie sie mit folgendem Befehl selbst erzeugen:

    bin\openssl genrsa -out conf\privkey.pem 2048

    Danach geben Sie folgende Befehle, jeweils auf einer Zeile ein:

    bin\openssl rsa -in conf\privkey.pem -out conf\server.key

    und

    bin\openssl req -new -key conf\server.key -out conf\server.csr
                     -config conf\openssl.cnf

    und danach

    bin\openssl x509 -in conf\server.csr -out conf\server.crt
                     -req -signkey conf\server.key -days 4000

    Dies wird ein Zertifikat erstellen, das in 4000 Tagen verfällt. Abschließend geben Sie:

    bin\openssl x509 -in conf\server.cert -out conf\server.der.crt
                     -outform DER

    ein. Diese Befehle legen folgende Dateien im Apache conf Ordner an: server.der.crt, server.csr, server.key, .rnd, privkey.pem, server.cert.

  3. Starten Sie den Apache Dienst neu.

  4. Rufen Sie Ihren Web-Browser mit der URL https://servername/svn/project auf.

SSL und Internet Explorer

Wenn Sie Ihren Server mit SSL sichern und sich über eine Windows Domäne anmelden, werden Sie feststellen, dass die Anzeige des Projektarchivs im Internet Explorer nicht mehr funktioniert. Das liegt daran, dass sich der Internet Explorer nicht mehr anmelden kann. Andere Web-Browser haben dieses Problem nicht und sowohl TortoiseSVN als auch andere Subversion Clients können sich problemlos anmelden.

Wenn Sie trotzdem IE verwenden wollen, um Projektarchive zu betrachten, können Sie entweder:

  • Einen separaten <Location /path> Block in der Apache Konfigurationsdatei definieren und den Eintrag SSPIBasicPreferred On hinzufügen. Dies ermöglicht IE die Anmeldung wieder, aber andere Web-Browser und Subversion können sich an dieser Location nicht anmelden.

  • Zusätzlich das Betrachten des Projektarchivs ohne Verschlüsselung (ohne SSL) anbieten. Seltsamerweise hat IE kein Problem mit der Anmeldung, wenn die Übertragung nicht verschlüsselt erfolgt.

  • In der SSL „Standardkonfiguration“ findet sich häufig der folgende Eintrag im beim virtuellen SSL Host:

    SetEnvIf User-Agent ".*MSIE.*" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    

    Es gibt (gab?) gute Gründe für diesen Eintrag. Siehe ModSSL FAQ. Wenn Sie allerdings das NTLM Anmeldeverfahren nutzen wollen müssen Sie keepalive verwenden. Wenn Sie den gesamten SetEnvIf Block auskommentieren, sollten Sie sich mit dem IE per Windows Anmeldung über SSL und dem eingebundenen mod_auth_sspi Modul am Apache anmelden können.

SSL Zugriff erzwingen

Wenn Sie SSL eingerichtet haben, um Ihr Projektarchiv abzusichern, möchten Sie vielleicht den normalen, unverschlüsselten http:// Zugriff sperren und nur https:// zulassen. Dafür müssen Sie zusätzlich die Anweisung SSLRequireSSL in den Subversion <Location> Block einfügen.

Ein Beispiel <Location> Block könnte folgendermaßen aussehen:

<Location /svn>
  DAV svn
  SVNParentPath D:\SVN
  SSLRequireSSL
  AuthType Basic
  AuthName "Subversion Projektarchive"
  AuthUserFile passwd
  #AuthzSVNAccessFile svnaccessfile
  Require valid-user
</Location>

Client-Zertifikate mit virtuellen SSL Hosts verwenden

Danke an Nigel Green für diesen Beitrag an die TortoiseSVN Mailingliste!

In manchen Serverkonfigurationen müssen Sie einen einzelnen Server mit zwei virtuellen Hosts einrichten: Den ersten für öffentlichen Web-Zugriff ohne Zertifikat, den zweiten, auf dem ein Subversion Server läuft, durch ein für den Client erforderliches Zertifikat abgesichert.

Durch das Hinzufügen einer SSLVerifyClient Optional Anweisung in die per-server Sektion der Apache Konfiguration (d.h. außerhalb aller VirtualHost und Directory Blöcke) zwingen Sie Apache, ein Client-Zertifikat während des ersten SSL Handshake anzufordern. Aufgrund eines Fehlers in mod_ssl ist es wichtig, dass das Zertifikat zu diesem Zeitpunkt angefordert wird, da es nicht funktioniert, wenn die SSL Verbindung neu ausgehandelt wird.

Die Lösung besteht darin, dem Virtual Host Verzeichnis, dass sie für Subversion absichern wollen, die folgende Anweisung hinzuzufügen:

SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"

Diese Anweisung ermöglicht nur dann den Zugriff auf das Verzeichnis, falls ein Client-Zertifikat empfangen und erfolgreich verifiziert wurde.

Zusamengefasst sehen die relevanten Zeilen der Apache Konfiguration folgendermaßen aus:

SSLVerifyClient Optional

### Virtual Host Konfiguration für den ÖFFENTLICHEN Host 
### (ohne dass ein Zertifikat benötigt wird)

<VirtualHost 127.0.0.1:443>
  <Directory "pathtopublicfileroot">
  </Directory>
</VirtualHost>

### Virtual Host Konfiguration für SUBVERSION
### (ein Client-Zertifikat wird benötigt)
<VirtualHost 127.0.0.1:443>
  <Directory "subversion host root path">
    SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"
  </Directory>

  <Location /svn>
    DAV svn
    SVNParentPath /pathtorepository
  </Location>
</VirtualHost>