Chapitre 3. Mettre en place un serveur

Table des matières

Serveur basé sur Apache
Introduction
Installer Apache
Installer Subversion
Configuration
Plusieurs référentiels
Autorisation basée sur le chemin
Authentification avec un domaine Windows
Plusieurs sources d'authentification
Sécuriser le serveur avec SSL
Using client certificates with virtual SSL hosts
Serveur basé sur Svnserve
Introduction
Installer svnserve
Exécuter svnserve
Basic Authentication with svnserve
Better Security with SASL
Authentification avec svn+ssh
Autorisation basée sur le chemin avec svnserve

To use TortoiseSVN (or any other Subversion client), you need a place where your repositories are located. You can either store your repositories locally and access them using the file:// protocol or you can place them on a server and access them with the http:// or svn:// protocols. The two server protocols can also be encrypted. You use https:// or svn+ssh://. This chapter shows you step by step on how you can set up such a server on a Windows machine.

Plus d'informations sur les options du serveur Subversion et la manière de choisir la meilleure architecture dans votre situation peuvent être trouvées dans le manuel Subversion sous Server Configuration.

If you don't have a server and you work alone then local repositories are probably your best choice. You can skip this chapter and go directly to Chapitre 4, Le référentiel.

If you were thinking about setting up a multi-user repository on a network share, think again. Read la section intitulée « Accessing a Repository on a Network Share » to find out why we think this is a bad idea.

Serveur basé sur Apache

Introduction

La plus flexible de toutes les installations serveur possibles pour Subversion est basée sur Apache. Bien qu'un peu plus compliquée à mettre en place, elle offre des avantages que d'autres serveurs n'ont pas :

WebDAV

The Apache based Subversion server uses the WebDAV protocol which is supported by many other programs as well. You could e.g. mount such a repository as a « Web folder » in the Windows explorer and then access it like any other folder in the file system.

Parcourir le référentiel

Vous pouvez diriger votre navigateur à l'URL de votre référentiel et naviguer dans son contenu sans avoir de client Subversion installé. Cela donne accès à vos données à un cercle beaucoup plus large d'utilisateurs.

Authentification

Vous pouvez utiliser n'importe quel mécanisme d'identification que supporte Apache, y compris SSPI et LDAP.

Sécurité

Puisqu'Apache est très stable et sécurisé, vous obtenez automatiquement la même sécurité pour votre référentiel. Cela inclut le cryptage SSL.

Installer Apache

The first thing you need before installing Apache is a computer with Windows 2000, Windows XP+SP1, Windows 2003, Vista or Server 2008.

Avertissement

Veuiller noter que Windows XP sans le service pack 1 entrainera des données erronées en réseau et pourrait donc corrompre votre référentiel !

  1. Download the latest version of the Apache web server from http://httpd.apache.org/download.cgi. Make sure that you download the version 2.2.x - the version 1.3.xx won't work!

    The msi installer for Apache can be found by clicking on other files, then browse to binaries/win32. You may want to choose the msi file apache-2.2.x-win32-x86-openssl-0.9.x.msi (the one that includes OpenSSL).

  2. Une fois que vous avez l'installeur Apache2, vous pouvez double-cliquer dessus et il vous guidera dans le processus d'installation. Assurez-vous que vous entrez l'URL du serveur correctement (si vous n'avez pas de nom de DNS pour votre serveur entrez seulement l'adresse IP). Je recommande d'installer Apache pour Tous les Utilisateurs, sur le Port 80, en tant que Service . Note : si vous avez déjà IIS ou un autre programme lancé qui écoute sur le port 80 l'installation pourrait échouer. Si cela arrive, allez au répertoire de programmes, \Apache Group\Apache2\conf et repérer le fichier httpd.conf. Éditez ce fichier pour que Listen 80 soit changé pour un port libre, par exemple Listen 81. Redémarrez alors l'installation - elle devrait cette fois se terminer sans problème.

  3. Maintenant testez si le serveur web Apache fonctionne correctement en allant avec votre navigateur internet à http://localhost/ - un site web préconfiguré devrait s'afficher.

Attention

Si vous décidez d'installer Apache en tant que service, soyez averti que par défaut il fonctionnera en tant que compte du système local. Une pratique plus sécurisée pour vous serait de créer un compte séparé pour exécuter Apache.

Assurez-vous que le compte sur le serveur sur lequel Apache fonctionne possède une entrée explicite dans la liste de contrôle d'accès du répertoire du référentiel (clic-droit sur le répertoire | propriétés | sécurité), avec contrôle total. Autrement, les utilisateurs ne seront pas capables de livrer leurs changements.

Même si Apache fonctionne en tant que système local, vous avez toujours besoin d'une telle entrée (qui sera le compte SYSTEM dans ce cas).

If Apache does not have this permission set up, your users will get « Access denied » error messages, which show up in the Apache error log as error 500.

Installer Subversion

  1. Download the latest version of the Subversion Win32 binaries for Apache. Be sure to get the right version to integrate with your version of Apache, otherwise you will get an obscure error message when you try to restart. If you have Apache 2.2.x go to http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100.

  2. Exécutez l'installeur de Subversion et suivez les instructions. Si l'installeur de Subversion a reconnu que vous avez installé Apache, donc vous êtes presque au bout. S'il n'a pas pu trouver un serveur Apache alors vous devez faire quelques étapes complémentaires.

  3. En utilisant l'explorateur Windows, allez au répertoire d'installation de Subversion (d'habitude c:\program files\Subversion) et trouvez les fichiers /httpd/mod_dav_svn.so et mod_authz_svn.so. Copiez ces fichiers au répertoire de modules Apache (d'habitude c:\program files\apache group\apache2\modules ).

  4. Copiez les fichiers /bin/libdb*.dll et /bin/intl3_svn.dll du répertoire d'installation de Subversion au répertoire bin d'Apache.

  5. Éditez le fichier de configuration d'Apache (d'habitude C:\Program Files\Apache Group\Apache2\conf\httpd.conf) avec un éditeur de texte comme le Bloc-notes et faites les changements suivants :

    Décommentez (supprimez la marque '#') les lignes suivantes :

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

    Ajoutez les deux lignes suivantes à la fin de la section LoadModule.

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

Configuration

Vous avez maintenant mis en place Apache et Subversion, mais Apache ne sait pas encore comment gérer les clients Subversion comme TortoiseSVN. Pour qu'Apache sache quelle URL sera utilisée pour les référentiels Subversion vous devez éditer le fichier de configuration d'Apache (d'habitude placé dans c:\program files\apache group\apache2\conf\httpd.conf) avec votre éditeur de texte préféré (par exemple le Bloc-notes) :

  1. At the end of the config file add the following lines:

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

    This configures Apache so that all your Subversion repositories are physically located below D:\SVN. The repositories are served to the outside world from the URL: http://MyServer/svn/ . Access is restricted to known users/passwords listed in the passwd file.

  2. Pour créer le fichier passwd, ouvrez l'invite de commande (la boîte DOS) une nouvelle fois, allez dans le dossier apache2 (habituellement c:\program files\apache group\apache2) et créez le fichier en tapant

    bin\htpasswd -c passwd <nom de l'utilisateur>
    

    Cela créera un fichier avec le nom passwd qui est utilisé pour l'authentification. Des utilisateurs supplémentaires peuvent être ajoutés avec

    bin\htpasswd passwd <nom de l'utilisateur>
    
  3. Redémarrer le service Apache une nouvelle fois.

  4. Allez avec votre navigateur sur http://MonServeur/svn/MonNouveauRéférentiel (où MonNouveauRéférentiel est le nom du référentiel Subversion que vous avez créé auparavant). Si tout s'est bien passé, un nom d'utilisateur et un mot de passe vous seront demandés, puis vous pouvez voir le contenu de votre référentiel.

Une courte explication sur ce que vous venez juste de saisir :

Tableau 3.1. Réglages du httpd.conf d'Apache

RéglageExplication
<Location /svn>veut dire que les référentiels Subversion sont disponibles à partir de l'URL http://MonServeur/svn/
DAV svnindique à Apache quel module sera responsable pour servir cette URL - dans ce cas le module de Subversion.
SVNListParentPath onPour la version 1.3 de Subversion et supérieure, cette directive permet de lister tous les référentiels disponibles sous SVNParentPath.
SVNParentPath D:\SVNindique à Subversion de chercher des référentiel sous D:\SVN
SVNIndexXSLT "/svnindex.xsl"Used to make the browsing with a web browser prettier.
AuthType Basicactive l'authentification de base, c'est-à-dire Nom de l'utilisateur/mot de passe
AuthName "Subversion repositories"est utilisé comme information chaque fois qu'un dialogue d'identification apparaît pour dire à l'utilisateur pour quoi l'authentification est demandée.
AuthUserFile passwdspécifie quel fichier de mots de passe est utilisé pour l'authentification
AuthzSVNAccessFileEmplacement du fichier d'accès pour les chemins à l'intérieur d'un référentiel Subversion
Require valid-userspécifie que seuls ls utilisateurs qui ont entré un nom d'utilisateur/mot de passe correct peuvent accéder à l'URL


Mais ce n'est qu'un exemple. Il y a beaucoup, beaucoup plus de possibilités que vous pouvez faire avec le serveur web Apache.

  • Si vous voulez que votre référentiel ait l'accès en lecture pour tout le monde mais l'accès en écriture seulement pour des utilisateurs spécifiques vous pouvez changer la ligne

    Require valid-user
    

    en

    <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
    </LimitExcept>
    
  • Utiliser un fichier passwd limite et autorise l'accès à tous vos référentiels comme une unité. Si vous voulez plus de contrôle sur les utilisateurs par dossier à l'intérieur d'un référentiel vous pouvez décommenter la ligne

    #AuthzSVNAccessFile svnaccessfile
    

    et créer un fichier d'accès de Subversion. Apache s'assurera que seuls les utilisateurs valides sont capables d'avoir accès votre emplacement /svn et passera alors le nom d'utilisateur au module AuthzSVNAccessFile de Subversion pour qu'il puisse mettre en application un accès plus granulaire basé sur les règles inscrites dans le fichier d'accès de Subversion. Notez que les chemins sont spécifiés comme référentiel:chemin ou simplement chemin. Si vous ne spécifiez pas de référentiel particulier, cette règle d'accès s'appliquera à tous les référentiels sous SVNParentPath. Le format du fichier de stratégie d'autorisation utilisé par mod_authz_svn est décrit dans la section intitulée « Autorisation basée sur le chemin »

  • To make browsing the repository with a web browser 'prettier', uncomment the line

    #SVNIndexXSLT "/svnindex.xsl"
    

    and put the files svnindex.xsl, svnindex.css and menucheckout.ico in your document root directory (usually C:/Program Files/Apache Group/Apache2/htdocs). The directory is set with the DocumentRoot directive in your Apache config file.

    You can get those three files directly from our source repository at http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk/contrib/other/svnindex. If you're asked for authentication for this link, enter guest as username and leave the password empty.

    The XSL file from the TortoiseSVN repository has a nice gimmick: if you browse the repository with your web browser, then every folder in your repository has an icon on the right shown. If you click on that icon, the TortoiseSVN checkout dialog is started for this URL.

Plusieurs référentiels

Si vous avez utilisé la directive SVNParentPath alors vous n'avez pas à changer le fichier de configuration d'Apache chaque fois que vous ajoutez un nouveau référentiel Subversion. Créez simplement le nouveau référentiel au même emplacement que le premier référentiel et vous avez fini ! Dans ma société, j'ai un accès direct à ce dossier spécifique sur le serveur via SMB (accès Windows normal aux fichiers). Donc je crée juste un nouveau dossier là, j'exécute la commande de TortoiseSVN TortoiseSVNCréer un référentiel ici... et un nouveau projet a un foyer...

Si vous utilisez Subversion 1.3 ou supérieur, vous pouvez utiliser la directive SVNListParentPath on pour permettre à Apache de produire une liste de tous les projets disponibles si vous allez avec votre navigateur sur le chemin parent plutôt qu'à un référentiel spécifique.

Autorisation basée sur le chemin

Le module mod_authz_svn permet un contrôle précis des autorisations d'accès basé sur les noms des utilisateurs et les chemins de référentiel. C'est possible avec le serveur Apache et, à partir de Subversion 1.3, c'est aussi disponible avec svnserve.

Un fichier d'exemple ressemblerait à ceci :

[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
# Accès par défaut à TOUS les référentiels
# Tout le monde peut lire, les admins peuvent écrire, Dan German est exclus.
[/]
* = r
@admin = rw
dangerman =
# Permet aux développeurs un accès total aux référentiels de leurs projets
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# Donne aux personnes en charge de la documentation un accès en écrite sur tous les répertoires de la documentation
[/trunk/doc]
@docs = rw
# Donne aux débutants un accès en écriture uniquement au référentiel d'entraînement
[TrainingRepos:/]
@training = rw

Notez que la vérification de chaque chemin peut être une opération couteuse, particulièrement dans le cas du journal de révision. Le serveur vérifie chaque chemin changé dans chaque révision et le vérifie pour la lisibilité, qui peut être consommatrice de temps sur les révisions qui affectent de grands nombres de fichiers.

L'authentification et l'autorisation sont des processus séparés. Si un utilisateur veut obtenir l'accès à un chemin de référentiel, il doit satisfaire tant les pré-requis habituels d'authentification que les pré-requis d'autorisation du fichier d'accès.

Authentification avec un domaine Windows

Comme vous l'avez peut-être remarqué vous devez faire une entrée nom d'utilisateur/mot de passe dans le fichier passwd pour chaque utilisateur séparément. Et si (pour des raisons de sécurité) vous voulez que vos utilisateurs changent périodiquement leurs mots de passe vous devez faire le changement manuellement.

Mais il y a une solution pour ce problème - du moins si vous avez accès au référentiel de l'intérieur d'un réseau local avec un contrôleur de domaine Windows : mod_auth_sspi !

Le module SSPI original a été offert par Syneapps en incluant le code source. Mais son développement a été arrêté. Mais ne désespérez pas, la communauté l'a récupéré et l'a amélioré. Il a un nouveau foyer sur SourceForge.

  • Download the module which matches your apache version, then copy the file mod_auth_sspi.so into the Apache modules folder.

  • Éditez le fichier de configuration d'Apache : ajoutez la ligne

    LoadModule sspi_auth_module modules/mod_auth_sspi.so
    

    à la section LoadModule. Assurez-vous d'insérer cette ligne avant la ligne

    LoadModule auth_module modules/mod_auth.so
    
  • Pour faire que les emplacements de Subversion utilisent ce type d'authentification, vous devez changer la ligne

    AuthType Basic
    

    en

    AuthType SSPI
    

    vous devez ajouter aussi

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

    dans le bloc <Location /svn>. Si vous n'avez pas de contrôleur de domaine, laissez le nom du contrôle de domaine comme <domaincontroller>.

Notez que si vous vous authentifiez en utilisant SSPI, alors vous n'avez plus besoin de la ligne AuthUserFile pour définir un fichier de mot de passe. Apache authentifie votre nom d'utilisateur et votre mot de passe avec votre domaine Windows à la place. Vous devrez mettre à jour la liste d'utilisateurs dans votre svnaccessfile pour faire aussi référence au DOMAINE\nom d'utilisateur.

Important

The SSPI authentication is only enabled for SSL secured connections (https). If you're only using normal http connections to your server, it won't work.

To enable SSL on your server, see the chapter: la section intitulée « Sécuriser le serveur avec SSL »

Astuce

Les fichiers AuthzSVNAccessFile de Subversion sont sensibles à la casse en ce qui concerne les noms d'utilisateur ("JUtilisateur" diffère "jutilisateur").

Dans le monde de Microsoft, les domaines Windows et les mots de passe ne sont pas sensibles à la casse. Cependant, certains administrateurs réseau aiment créer des comptes utilisateur en CamelCase (par exemple "JUtilisateur").

Cette différence peut vous mordre quand vous utilisez l'authentification SSPI lorsque le domaine Windows et les noms d'utilisateur sont passés à Subversion comme lorsque l'utilisateur les tape à l'invite. Internet Explorer passe souvent le nom de l'utilisateur à Apache en utilisant automatiquement la casse avec laquelle le compte a été créé.

Le résultat final est que vous pouvez avoir besoin d'au moins deux entrées dans votre AuthzSVNAccessFile pour chaque utilisateur - une entrée minuscule et une entrée dans la même casse que celle qu'Internet Explorer passe à Apache. Vous devrez aussi apprendre à vos utilisateurs à aussi taper leurs accréditations en utilisant les minuscules quand ils accèdent aux référentiels via TortoiseSVN.

Les journaux d'Erreurs et d'Accès d'Apache sont vos meilleurs amis dans le déchiffrement de problèmes comme ceux-ci puisqu'ils vous aideront à déterminer la chaîne du nom d'utilisateur passée par le module AuthzSVNAccessFile de Subversion. Vous pouvez avoir besoin d'expérimenter avec le format exact de la chaîne de l'utilisateur dans le svnaccessfile (par exemple DOMAINE\utilisateur contre DOMAINE//utilisateur) pour que tout fonctionne.

Plusieurs sources d'authentification

Il est aussi possible d'avoir plus d'une source d'authentification pour votre référentiel Subversion. Pour ce faire, vous devez rendre chaque type d'authentification non définitive, pour qu'Apache vérifie plusieurs sources pour la correspondance nom utilisateur/mot de passe.

Un scénario fréquent consiste à utiliser l'authentification par le domaine Windows et par fichier passwd, pour que vous puissiez fournir un accès SVN aux utilisateurs qui ne possèdent pas de login dans le domaine Windows.

  • To enable both Windows domain and passwd file authentication, add the following entries within the <Location> block of your Apache config file:

    AuthBasicAuthoritative Off
    SSPIAuthoritative Off
    

Here is an example of the full Apache configuration for combined Windows domain and passwd file authentication:

<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>

Sécuriser le serveur avec SSL

Even though Apache 2.2.x has OpenSSL support, it is not activated by default. You need to activate this manually.

  1. In the apache config file, uncomment the lines:

    #LoadModule ssl_module modules/mod_ssl.so
    

    and at the bottom

    #Include conf/extra/httpd-ssl.conf
    

    then change the line (on one line)

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

    to

    SSLMutex default
    
  2. Ensuite vous devez créer un certificat SSL. Pour faire cela ouvrez une invite de commande (la boîte DOS) et allez au dossier d'Apache (par exemple C:\program files\apache group\apache2) et tapez la commande suivante :

    bin\openssl req -config bin\openssl.cnf -new -out mon-serveur.csr
    

    On vous demandera une phrase de mot de passe. N'utilisez pas s'il vous plaît de mots simples, mais des phrases entières, par exemple une partie d'une poésie. Plus la phrase est longue, mieux c'est. Vous devez aussi entrer l'URL de votre serveur. Toutes les autres questions sont facultatives mais nous vous recommandons de remplir celles-ci aussi.

    Normally the privkey.pem file is created automatically, but if it isn't you need to type this command to generate it:

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

    Next type the commands

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

    and (on one line)

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

    and then (on one line)

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

    This will create a certificate which will expire in 4000 days. And finally enter (on one line):

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

    These commands created some files in the Apache conf folder (server.der.crt, server.csr, server.key, .rnd, privkey.pem, server.cert).

  3. Redémarrez le service Apache.

  4. Allez avec votre navigateur à https://servername/svn/project ...

SSL et Internet Explorer

Si vous sécurisez votre serveur avec SSL et utilisez l'authentification avec un domaine Windows vous vous apercevrez que la navigation dans le référentiel avec Internet Explorer ne marche plus. Ne vous inquiétez pas - c'est seulement qu'Internet Explorer n'est pas capable d'authentifier. Les autres navigateurs n'ont pas ce problème et TortoiseSVN et les autres clients Subversion sont toujours capable d'authentifier.

Si vous voulez toujours utiliser IE pour parcourir le référentiel vous pouvez soit :

  • définissez une directive <Location /path> dans le fichier de configuration d'Apache et ajoutez SSPIBasicPreferred On. Cela permettra à IE d'authentifier à nouveau, mais les autres navigateurs et Subversion ne seront pas capables d'authentifier pour cet emplacement.

  • Offrir de naviguer avec une authentification non cryptée (sans SSL) aussi. Étrangement IE n'a pas de problèmes avec l'authentification si la connexion n'est pas sécurisée avec SSL.

  • Dans l'installation "standard" de ssl, il y a souvent la déclaration suivante dans l'hôte SSL virtuel d'Apache :

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

    Il y a (avait ?) de bonnes raisons pour cette configuration, regardez http://www.modssl.org/docs/2.8/ssl_faq.html#ToC49 Mais si vous voulez l'authentification NTML vous devez utiliser keepalive. Si vous décommentez entièrement SetEnvIf vous devriez être capables d'authentifier IE avec l'authentification windows avec SSL et Apache sur Win32 avec mod_auth_sspi inclus.

Forcer l'accès SSL

Une fois que vous avez mis en place SSL pour rendre votre référentiel plus sécurisé, vous pourriez vouloir désactiver l'accès normal non-SSL (http) et permettre seulement l'accès https. Pour ce faire, vous devez ajouter une autre directive au bloc <Location> de Subversion : SSLRequireSSL.

An example <Location> block would look like this:

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

Using client certificates with virtual SSL hosts

Sent to the TortoiseSVN mailing list by Nigel Green. Thanks!

In some server configurations you may need to setup a single server containing 2 virtual SSL hosts: The first one for public web access, with no requirement for a client certificate. The second one to be secure with a required client certificate, running a Subversion server.

Adding an SSLVerifyClient Optional directive to the per-server section of the Apache configuration (i.e. outside of any VirtualHost and Directory blocks) forces Apache to request a client Certificate in the initial SSL handshake. Due to a bug in mod_ssl it is essential that the certificate is requested at this point as it does not work if the SSL connection is re-negotiated.

The solution is to add the following directive to the virtual host directory that you want to lock down for Subversion:

SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"

This directive grants access to the directory only if a client certificate was received and verified successfully.

To summarise, the relevant lines of the Apache configuration are:

SSLVerifyClient Optional

### Virtual host configuration for the PUBLIC host 
### (not requiring a certificate)

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

### Virtual host configuration for SUBVERSION 
### (requiring a client certificate)
<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>