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@localhostLoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pemErrorLog /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/testrepoAuthType 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@localhostLoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pemErrorLog /var/log/apache2/svn.moroblog.info.error.log
CustomLog /var/log/apache2/svn.moroblog.info.access.log commonDocumentRoot /var/development/projects/repositories/www-index/
<Location /testrepo>
DAV svn
SVNPath /var/development/projects/repositories/testrepoAuthType 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>