OpenVPN possède deux modes sécurisés, l'un basé sur la sécurité SSL/TLS en utilisant les certificats et les clef RSA, l'autre en utilisant une clef statique pré-partagée. Tandis que les clef SSL/TLS + RSA sont discutablement l'option la plus sécurisée, les clef statiques ont le bénéfice de la simplicité. SI vous voulez utiliser les clef RSA, continuez la lecture. Pour ce qui concerne les clef statiques, sautez directement à la section Construire une clef statique pré-partagée.
Nous construirons des certificats et des clef RSA en utilisant la commande openssl, incluse dans la librairie de OpenSSL.
Les certificats RSA sont des clef publiques qui contiennent aussi d'autres champs sécurisés comme le Common Name ou l'adresse email du titulaire du certificat. OpenVPN permet l'écriture de scripts pour tester ces champs en priorité par rapport à l'authentification. Pour plus d'information, reportez-vous à l'option --tls-verify dans les pages de man de openvpn.
Dans notre exemple, nous utiliserons la convention d'apache, qui utilise les extensions de fichiers .crt pour les fichiers contenant les certificats, et les extensions de fichiers .key pour les fichiers contenant les clef privées. Le fichiers contenant les certificats peuvent être librement publiés ou distribués.
Sélectionnez une machine au Travail pour être la machine de gestion des clef.
Tout d'abord, éditez le fichier /usr/share/ssl/openssl.cnf (ce fichier peut se trouver ailleurs, donc pour le trouver, utilisez la commande locate openssl.cnf)
Vous devrez faire quelques changements dans ce fichier :
Créez un répertoire pour l'utiliser comme zone de stockage des clef, et changez dir afin qu'il pointe maintenant sur ce répertoire.
Augmentez default_days, ainsi votre VPN ne s'arrêtera pas mystérieusement de fonctionner au bout d'un an.
Faites pointer certificate vers votre autorité de certification maître, et private_key vers les fichiers contenant les clef privées, que nous allons maintenant générer. Dans l'exemple ci-dessous, nous considèrerons que votre certificat de l'autorité de certification est nommé my-ca.crt, et que la clef privée de votre autorité de certification se nomme my-ca.key.
Repérez les fichiers index.txt et serial. Initialisez index.txt pour qu'il soit vide. Initialisez serial pour qu'il contienne un nombre initial tel que 01.
Si à propos des longueurs de clef vous êtes paranoïaques, augmentez la valeur de default_bits à 2048. Si vous avez compilé OpenVPN avec le support pthread pour permettre le traitement en arrière plan des clef RSA, vous n'aurez aucun problème avec OpenVPN pour supporter une clef de RSA de 2048 bits. Vous pouvez aussi utilisez de longues clef sans le support pthread, mais vous percevrez quelques dégradations dans la latence dans le tunnel, lors de la négociation des clef SSL/TLS. Pour lire un bon article sur le choix de la longeur des clef RSA, reportez-vous au April 2002 issue de Bruce Schneier's Crypto-Gram Newsletter.
Après que openssl.cnf ait été édité, créez la paire certificat/clef_privée de votre autoriré de certificat maître.
openssl req -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -days 3650
Ceci créera une paire certificat/clef_privée pour l'autorité de certification maître, paire valide pour 10 ans.
Maintenant, créer les paires certificats/clef_privées pour la Maison (fichiers office.*) et le Travail (fichiers home.*) :
openssl req -nodes -new -keyout office.key -out office.csr
openssl ca -out office.crt -in office.csr
openssl req -nodes -new -keyout home.key -out home.csr
openssl ca -out home.crt -in home.csr
Maintenant, copiez dans Maison, à travers un canal sécurisé, home.crt, home.key, et my-ca.crt, bien que pour le moment, seuls les fichiers .key doivent être considéré non-publiques.
Maintenant créer les paramètres Diffie Hellman dans Travail, avec la commande suivante :
openssl dhparam -out dh1024.pem 1024
Augmentez la taille de 1024 bits à 2048 bits, si vous l'avez auparavant augmenté dans openssl.cnf.
Pour les paranoïaques, soyez attentif à l'omission ci-dessous de l'option -nodes dans la commande openssl. Cela entraînera que chaque clef privée sera chiffrée avec un mot de passe, ce qui rendra la clef sécurisée, même si quelqu'un pénètre dans votre serveur et qu'il vole les fichiers contenant les clef privées. Le mauvais côté de cette approche est qu'à chaque fois que vous lancez OpenVPN, vous devrez tapez le mot de passe. Pour plus d'informations, reportez-vous à l'option --askpass dans la page de man de openvpn.
Si vous trouvez confuse la gestion manuelle des clef RSA, remarquez que OpenVPN peut interopérer avec les outils de gestion des certificats X509, ou avec les services proposant des CA commerciaux tels que Thawte ou Verisign. Allez voir le projet OpenCA pour un exemple de ce qui peut être fait avec la gestion de certificats/clef, dans le royaume Open Source.
De plus, la distribution de OpenVPN contient un ensemble de scripts qui peuvent être utilisés pour simplifier la gestion des certificats et des clef RSA.