Tutoriel : Apache – SSL – Subversion

Cet article va détailler comment paramétrer Apache et Subversion en HTTPS. C’est pas bien méchant, on y retrouve les grandes étapes indispensables :
- Création d’un dépot
- Créer un nom de domaine sécurisé (Apache+SSL)
- Relier les deux avec libapache2-svn (webdav)
- Régler les droits d’accès sur le dépot.

Créer un repository

Installons Subversion :

# apt-get install subversion subversion-tools

On créé ensuite le répertoire qui va contenir nos sources (et un autre pour notre page d’accueil HTML) :

# mkdir -p /var/development/projects/repositories/
# mkdir /var/development/projects/repositories/www-index/

Créez le repository par la commande :

# cd /var/development/projects/repositories/
# svnadmin create testrepo

Puis donnez les droits pour Apache sur ces répertoires :

# chown -R www-data:www-data /var/development/projects/repositories/
# chmod -R ug+rxw /var/development/projects/repositories/

Nom de domaine sécurisé

# apt-get install apache2

Demandez à Apache d’écouter aussi sur le port 443 (https://), rajoutez dans le fichier “/etc/apache2/ports.conf” :

Listen 443

Créez un certificat auto signé en répondant aux questions :

# apache2-ssl-certificate

Créez le fichier “/etc/apache2/sites-available/ssl” :

NameVirtualHost *:443
<VirtualHost *:443>

ServerName svn.moroblog.info
ServerAdmin webmaster@localhost

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem       

ErrorLog /var/log/apache2/svn.moroblog.info.error.log

DocumentRoot /var/development/projects/repositories/www-index/

</VirtualHost>

Faites un lien symbolique comme pour tout site Apache :

# ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl


Et relancez Apache :

# /etc/init.d/apache2 restart

Créez un fichier index.html dans le répertoire www-index/ pour avoir une petite page d’accueil (accessible par www-data) :

<html>
<h1>Moro - Subversion Root Directory</h1>
</html>

Essayez maintenant d’accéder à votre domaine sécurisé (https://svn.moroblog.info) et constatez que ça marche.

Rendre son repository accessible

On installe le paquet nécessaire à la gestion de SVN par Apache :

apt-get install libapache2-svn

Dans “/etc/apache2/sites-available/ssl”, on rajoute la gestion de SVN :

<Location /testrepo>
DAV svn
SVNPath /var/development/projects/repositories/testrepo
</Location>

Maintenant votre repository est accessible via l’url “https://domaine.securise.fr/testrepo” (ici https://svn.moroblog.info/testrepo). Vous pouvez le “checkouter” :)

# svn co https://svn.moroblog.info/testrepo/
Erreur de validation du certificat du serveur pour 'https://svn.moroblog.info:443' :
- Le certificat n'est pas signé pas une autorité de confiance.
Valider le certificat manuellement !
Informations du certificat :
- nom d'hôte : svn.moroblog.info
- valide de Thu, 10 Jan 2008 10:38:15 GMT à Sat, 09 Feb 2008 10:38:15 GMT
- signataire : moro, Paris, France, FR
- empreinte : 18:eb:2c:a6:df:50:59:3e:85:0f:ae:22:e6:81:4e:12:ac:41:59:81
(R)ejet, acception (t)emporairement ou (p)ermanente ? t
A testrepo/test_auth
A testrepo/test_commit_auth
Révision 11 extraite.

Si vous une erreur 301 lors du checkout, vos déclarations de DocumentRoot et de Location sont en conflit. Consultez la FAQ de SVN pour l’erreur 301.

Vous pouvez également tester que vous y accéder par le web (dans mon cas c’est : https://svn.moroblog.info/testrepo/) :

Limiter les droits sur le dépot

On va restreindre les droits pour un utilisateur particulier. En premier, créons un fichier pour les identifiants. Dans “/etc/apache2/htpasswd/” :

htpasswd2 -c dav_svn.passwd bja

Entrez un mot de passe pour cet utilisateur (ici “bja”). On ajoute l’authentification à la Location “/testrepo” :

<Location /testrepo>

DAV svn
SVNPath /var/development/projects/repositories/testrepo

AuthType Basic
AuthName "Moro - Subversion Repository"
AuthUserFile /etc/apache2/htpasswd/dav_svn.passwd

#AuthzSVNAccessFile /etc/apache2/htpasswd/dav_svn.authz

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

</Location>

Vous pouvez décommentez les balises LimitExcept pour autoriser les accès en lecture seule à quiconque.

Si on essaie maintenant de faire un checkout du projet, on a :

# svn co https://svn.moroblog.info/testrepo/
Erreur de validation du certificat du serveur pour 'https://svn.moroblog.info:443' :
- Le certificat n'est pas signé pas une autorité de confiance.
Valider le certificat manuellement !
Informations du certificat :
- nom d'hôte : svn.moroblog.info
- valide de Thu, 10 Jan 2008 10:38:15 GMT à Sat, 09 Feb 2008 10:38:15 GMT
- signataire : moro, Paris, France, FR
- empreinte : 18:eb:2c:a6:df:50:59:3e:85:0f:ae:22:e6:81:4e:12:ac:41:59:81
(R)ejet, acception (t)emporairement ou (p)ermanente ? t
Domaine d'authentification : <https://svn.moroblog.info:443> Moro - Subversion Repository
Mot de passe pour 'benji' :
Domaine d'authentification : <https://svn.moroblog.info:443> Moro - Subversion Repository
Nom d'utilisateur : bja
Mot de passe pour 'bja' :
A testrepo/test_auth
A testrepo/test_commit_auth
Révision 11 extraite.

Voici le fichier “/etc/apache2/sites-available/ssl” final :

NameVirtualHost *:443
<VirtualHost *:443>

ServerName svn.moroblog.info
ServerAdmin webmaster@localhost

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

ErrorLog /var/log/apache2/svn.moroblog.info.error.log
CustomLog /var/log/apache2/svn.moroblog.info.access.log common

DocumentRoot /var/development/projects/repositories/www-index/

<Location /testrepo>

DAV svn
SVNPath /var/development/projects/repositories/testrepo

AuthType Basic
AuthName "Moro - Subversion Repository"
AuthUserFile /etc/apache2/htpasswd/dav_svn.passwd

#AuthzSVNAccessFile /etc/apache2/htpasswd/dav_svn.authz

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

</Location>

</VirtualHost>

Aller plus loin

Si vous avez besoin de droits particuliers selon les utilisateurs, cherchez du côté de la directive Apache “AuthzSVNAccessFile /path/to/authzfile” qui vous permettra de créer des groupes d’utilisateur et de placer les droits pour ces groupes.

Liens

Un des tutoriels sur lesquels je me suis basé.

</VirtualHost>


NameVirtualHost *:443
<VirtualHost *:443>

ServerName svn.moroblog.info
ServerAdmin webmaster@localhost

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

ErrorLog /var/log/apache2/svn.moroblog.info.error.log
CustomLog /var/log/apache2/svn.moroblog.info.access.log common

DocumentRoot /var/development/projects/repositories/www-index/

<Location /testrepo>

DAV svn
SVNPath /var/development/projects/repositories/testrepo

AuthType Basic
AuthName "Moro - Subversion Repository"
AuthUserFile /etc/apache2/htpasswd/dav_svn.passwd

#AuthzSVNAccessFile /etc/apache2/htpasswd/dav_svn.authz

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

</Location>

</VirtualHost>