Gestion des clefs SSL

Création d’un CA

  • Création du certificat de l’autorité de certification racine (ca.crt). On s’assure ensuite que le fichier contenant la clef n’est lisible que par l’utilisateur root :
1
2
openssl req -new -x509 -keyout ca.key -out ca.crt -config /etc/ssl/openssl.cnf
chmod 0600 ca.key
  • Création de l’autorité intermédiare OpenVPN. Il s’agit d’une sous autorité de certification qui sera spécifique à notre serveur OpenVPN.
1
2
openssl req -new -keyout openvpn-ca.key -out openvpn-ca.csr -config /etc/ssl/openssl.cnf 
openssl ca -extensions v3_ca -days 3650 -out openvpn-ca.crt -in openvpn-ca.csr -config /etc/ssl/openssl.cnf
  • Création d’un fichier texte contenant les certificats du CA racine et du CA OpenVPN.
1
cat ca.crt openvpn-ca.crt > allca.crt

Création d’une clef pour le serveur

  • Création d’une demande de certificat
1
openssl req -nodes -new -keyout vpn-server.key -out vpn-server.csr -config /etc/ssl/openssl.cnf
  • Création d’un certificat à partir de la demande
1
openssl ca -keyfile openvpn-ca.key -cert openvpn-ca.crt -out vpn-server.crt -in vpn-server.csr -extensions server -config /etc/ssl/openssl.cnf
  • On s’assure que la clef n’est lisible que par root
1
chmod 0600 vpn-server.key

Création d’un clef pour un client OpenVPN

  • Création d’une demande de certificat
1
openssl req -nodes -new -keyout client1.key -out client1.csr -config /etc/ssl/openssl.cnf
  • Création d’un certificat à partir de la demande
1
openssl ca -keyfile openvpn-ca.key -cert openvpn-ca.crt  -out client1.crt -in client1.csr -config /etc/ssl/openssl.cnf
  • On s’assure que la clef n’est lisible que par root
1
chmod 0600 client1.key

Il faut répéter cette étape pour chacun des clients qui vont se connecter au serveur OpenVPN.

Options utilisées

“ 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. ”

Configuration du serveur OpenVPN

Configuration exemple

/etc/openvpn/server.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Config ecoute

port 1194
proto tcp
dev tun0
mode server
tls-server

persist-key
persist-tun

# Certificats SSL/TLS

ca allca.crt
cert vpn-server.crt
key vpn-server.key

# Chiffrement statique

dh dh1024.pem
tls-auth ta.key

# Configuration fournie aux clients

server 10.0.2.0 255.255.255.0

# Gestion de la connexion avec le client

keepalive 10 120
tun-mtu 1300
mssfix
cipher BF-CBC
max-clients 5
client-to-client

# Debug ?

verb 6
status /var/log/openvpn-status-server.log

Problèmes courants

  • ‘’Authenticate/Decrypt packet error: cipher final failed’‘ : Essayez de changer le cipher utilisé par le serveur. Exemple blowfish : ’‘cipher BF-CBC’’

  • ‘’error=unable to get local issuer certificate’‘ : OpenVPN a besoin, pour vérifier la validité des vertificats SSL fournis, d’obtenir l’aboresence complète des certificats SSL. Pour cela, le fichier indiqué par l’option ’‘ca’‘ doit contenir le certificat du CA et des CA intermédiaires. ’‘cat ca.crt openvpn-ca.crt > allca.crt’’

  • ‘’TLS Error: cannot locate HMAC’‘ : Si l’un des deux cotés de la connexion utilise l’option ’‘tls-auth’‘ alors que l’autre bout ne l’utilise pas.

Références