Bonjour a tous,
Je me suis dit que tout le monde ne voulait peut-être pas utiliser le système d'authentification par certificat (méthode sécurisé mais lourde à mettre en place). OpenVPN propose une solution d'authentification par mot de passe. Je vais expliquer comment cela se passe et les modifications des fichiers a effectuer.
Tout d'abord sur le client :
Les lignes suivantes peuvent être commentées ou supprimées par rapport au tuto (il n'est donc plus nécessaire de créer un certificat par utilisateur). Il est tout de même possible de les laisser si l'on souhaite avoir une sécurité maximum (cad certificat + mot de passe) :
;cert client1.crt
;key client1.key
Il faut ajouter cette ligne dans le fichier pour qu'il demande à l'utilisateur de saisir le mot de passe :
auth-user-pass
|
Mon client fonctionnel :
client
;dev tap
dev tun
proto tcp
;proto udp
remote xxxxx.com 1201
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
;cert client1.crt
;key client1.key
ns-cert-type server
tls-auth ta.key 1
verb 3
auth-user-pass
|
Ensuite sur le serveur :
port 1201
proto tcp
;proto udp
;dev tap
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 10.8.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
tls-auth ta.key 0 # This file is secret
persist-key
persist-tun
status openvpn-status.log
verb 3
#ajouter pour authentification par mot de passe :
client-cert-not-required
auth-user-pass-verify script.bat via-env
username-as-common-name
|
Explications des lignes ajoutés :
==> nécessaire si ont utilise une authentification par mot de passe uniquement et sans les certificats
auth-user-pass-verify script.bat via-env |
==> ligne indiquant le script utiliser pour vérifier le mot de passe et le username saisie par le client. (J'expliquerais cela plus loin).
==> Utiliser le username en tant que common name (ligne facultative mais recommandé pour simplifier la lecture des logs et faire des configuration plus compexe)
A ce stade la configuration pure d'openVPN est terminé. Il reste a gérer les utilisateurs et mot de passes. Des dizaine de solutions existent (surtout sur UNIX). Sur windows les infos sont plutôt rare.
L'avantage et l'inconvénient d'OpenVPN est que la gestion des utilisateur est laissé à l'entière charge de celui qui l'instal. Il faut donc créer un script décidant de laisser le client se connecter ou non. Voici mon script que j'ai placé dans le répertoire "config" d'OpenVPN :
script.bat :
if %username%:%password%==roro:azert EXIT 0
if %username%:%password%==toto:titit EXIT 0
ELSE EXIT 1 |
Ce script fonctionne et est très simple. Je l'ai créer rapidement pour mes propres besoins. Il est évident que si vous devez gérer un nombre important d'utilisateurs (ou récupérer dans une base LDAP par exemple), il est impossible d'utiliser un script comme celui ci. A vos clavier pour en faire de plus sophistiquer. Je précise qu'il en existe des dizaines sous Unix!!
L'essentiel est de dire que le script doit renvoyer 0 si l'utilisateur est autorisé a se connecter et un dans le cas contraire. C'est ce que je fait avec le "EXIT 0" et le "EXIT 1". Le username et le password saisi sur le client sont récupérer dans deux variables d'environnement "username" et "password".
Voila, je pense avoir dit l'essentiel !!