[pfSense] La gestion des certificats pour les connexions OpenVPN
17/09/2019
Il existe plusieurs méthodes pour monter un tunnel VPN site-à-site avec OpenVPN. Les deux principales consistent en l'utilisation de clés partagées ou en l'utilisation de certificats (X.509).
Après notre premier article sur la configuration d'OpenVPN avec clé partagée, nous abordons ici sa configuration avec la gestion des certificats.
Article mis à jour le : 17/09/2019
À noter : nous ne détaillons pas dans cet article tous les détails de configuration d'OpenVPN. Nous nous concentrons sur la création, l'utilisation et la révocation des certificats. Il existe déjà un article dédié à la configuration d'OpenVPN : [pfSense] Monter un accès OpenVPN site-à-site.
Le client et le serveur OpenVPN sont authentifiés à l'aide de certificats. Pour cela, ces certificats doivent être émis par une autorité de certification reconnue comme sûre aussi bien par le serveur que par le client.
Dans notre cas, nous créerons une autorité de certification (appelée "CA" pour Certificate Authority) sur le pfSense faisant office de serveur. Puis nous créerons deux certificats : un certificat client (qui sera utilisé côté Client) et un certificat serveur (qui sera utilisé côté Serveur). Ces deux certificats seront signés par l'autorité de certification que nous aurons créé précédemment.
Pour signer un certificat, il est nécessaire de disposer de la clé privée de l'autorité de certification.
Pour valider la signature d'un certificat, il est nécessaire de disposer de la clé publique de l'autorité de certification.
Actions à effectuer coté serveur OpenVPN
Pour commencer, nous nous rendons dans le menu System > Cert Manager :
Dans l'onglet "CAs" (l'onglet par défaut), nous cliquons sur le bouton "+ Add" se trouvant en bas à droite de la liste des CAs existants.
Les champs à renseigner sont les suivants :
Exemple de résultat obtenu :
Nous validons notre configuration en cliquant sur le bouton "Save".
Notre autorité de certification est créée.
Nous restons dans le menu System > Cert Manager et basculons sur l'onglet "Certificates" (deuxième onglet).
Pour créer un nouveau certificat (client ou serveur), nous cliquons sur le bouton "+ Add/Sign" se trouvant en bas à droite de la liste des certificats existants.
Les champs à renseigner sont les suivants :
Exemple de résultat obtenu :
Nous validons notre configuration en cliquant sur le bouton "Save".
Notre certificat pour le serveur OpenVPN est créé.
Nous procédons exactement de la même manière que pour la création d'un certificat serveur. Le seul élément distinctif est le champ Certificate Type pour lequel nous choisissons "User Certificate".
Exemple de résultat obtenu :
Nous validons notre configuration en cliquant sur le bouton "Save".
Notre certificat pour le client OpenVPN est créé.
Le détail de la configuration du serveur OpenVPN se trouve dans l'article dédié [pfSense] Monter un accès OpenVPN site-à-site.
Les différences au moment de la configuration sont les suivantes :
Exemple de résultat obtenu :
La configuration coté serveur OpenVPN est terminée. Il reste à faire la configuration côté client.
Nous devons exporter le certificat de l'autorité de certification (c'est-à-dire sa clé publique), ainsi que le certificat et la clé privée du client OpenVPN.
Pour cela, nous retournons dans le menu System > Cert Manager :
Dans l'onglet "CAs" (l'onglet par défaut), nous cliquons sur l'icône "Export CA" de l'autorité de certification que nous avons créée précédemment :
Puis, dans l'onglet "Certificates", nous cliquons successivement sur les icônes "Export Certificate" et "Export Key" du certificat client que nous avons créé précédemment :
La configuration côté serveur OpenVPN est terminée.
Maintenant, nous procédons à l'import des clés publiques/privées et à la configuration côté client OpenVPN.
Actions à effectuer coté client OpenVPN
Nous nous rendons dans le menu System > Cert Manager :
Dans l'onglet "CAs" (l'onglet par défaut), nous cliquons sur le bouton "+ Add" se trouvant en bas à droite de la liste des CAs existants.
Nous allons importer la clé publique du CA que nous avons créé sur le serveur OpenVPN.
Les champs à remplir sont les suivants :
Exemple de résultat obtenu :
Nous validons en cliquant sur le bouton "Save".
Nous restons dans le menu System > Cert Manager et basculons sur l'onglet "Certificates" (deuxième onglet).
Nous cliquons sur le bouton "+ Add/Sign" se trouvant en bas à droite de la liste des certificats existants.
Nous allons importer la clé publique et la clé privée du certificat client que nous avons créé sur le pfSense serveur OpenVPN.
Les champs à remplir sont les suivants :
Exemple de résultat obtenu :
Nous validons en cliquant sur le bouton "Save".
Le détail de la configuration du client OpenVPN se trouve dans l'article [pfSense] Monter un accès OpenVPN site-à-site.
Les différences au moment de la configuration sont les suivantes :
Exemple de résultat obtenu :
Nous validons en cliquant sur le bouton "Save".
Le dernier élément, pour être complet sur la gestion des certificats, est la liste de révocation de certificats ou "Certificate Revocation Lists" (CRLs).
Cette liste de révocation contient les certificats qui ne doivent plus être considérés comme sûrs (car ils ont été compromis ou pour n'importe quelle autre raison).
Pour les connexions OpenVPN, la CRL peut être utilisée par le serveur pour vérifier les certificats utilisés par les clients OpenVPN.
Une CRL est signée par un CA. Ainsi, pour générer une CRL, il est nécessaire de disposer de la clé privée du CA.
Généralement, une seule CRL est maintenue par CA. Cependant, pfSense peut en maintenir davantage.
Néanmoins, une seule CRL pourra être sélectionnée par instance OpenVPN.
Ce fonctionnement permet, par exemple, d'empêcher un certificat de se connecter à une instance OpenVPN, mais de l'autoriser à se connecter à une autre instance.
Une CRL peut être soit créée, soit importée. La configuration se fait dans le menu System > Cert Manager depuis l'onglet "Certificate Revocation" (troisième onglet).
Pour ajouter une nouvelle CRL, nous cliquons sur le bouton "+ Add or import CRL" correspondant au CA qui signera cette CRL (dans notre cas, "CA Provya"). Les champs à renseigner sont les suivants :
Exemple de résultat obtenu :
Notre CRL est créée. On peut maintenant lui ajouter les certificats à révoquer. Pour cela, cliquer sur l'icône "Edit CRL" :
Il reste à choisir le certificat à révoquer, la raison de la révocation (ce champ est purement informatif) et cliquer sur le bouton "ADD".
Enfin, dans la configuration de notre serveur OpenVPN, nous devons ajouter cette CRL (champ "Peer Certificate Revocation List").
Voilà ! Notre serveur OpenVPN est prêt à fonctionner avec des certificats.
[pfSense] Monter un accès OpenVPN site-à-site
[pfSense] Monter un VPN natté (Overlap network) avec OpenVPN
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Après notre premier article sur la configuration d'OpenVPN avec clé partagée, nous abordons ici sa configuration avec la gestion des certificats.
Article mis à jour le : 17/09/2019
À noter : nous ne détaillons pas dans cet article tous les détails de configuration d'OpenVPN. Nous nous concentrons sur la création, l'utilisation et la révocation des certificats. Il existe déjà un article dédié à la configuration d'OpenVPN : [pfSense] Monter un accès OpenVPN site-à-site.
Principe de fonctionnement
Le client et le serveur OpenVPN sont authentifiés à l'aide de certificats. Pour cela, ces certificats doivent être émis par une autorité de certification reconnue comme sûre aussi bien par le serveur que par le client.
Dans notre cas, nous créerons une autorité de certification (appelée "CA" pour Certificate Authority) sur le pfSense faisant office de serveur. Puis nous créerons deux certificats : un certificat client (qui sera utilisé côté Client) et un certificat serveur (qui sera utilisé côté Serveur). Ces deux certificats seront signés par l'autorité de certification que nous aurons créé précédemment.
Pour signer un certificat, il est nécessaire de disposer de la clé privée de l'autorité de certification.
Pour valider la signature d'un certificat, il est nécessaire de disposer de la clé publique de l'autorité de certification.
Création d'une autorité de certification - CA
Actions à effectuer coté serveur OpenVPN
Pour commencer, nous nous rendons dans le menu System > Cert Manager :
Dans l'onglet "CAs" (l'onglet par défaut), nous cliquons sur le bouton "+ Add" se trouvant en bas à droite de la liste des CAs existants.
Les champs à renseigner sont les suivants :
- Descriptive name : le nom que l'on souhaite donner à notre autorité de certification
- Method : 3 méthodes sont possibles :
- Create an internal Certificate Authority : permet de créer une nouvelle autorité de certification
- Import an existing Certificate Authority : permet d'importer le certificat (clé publique + clé privée) d'une autorité de certification existante
- Create an intermediate Certificate Authority : permet de créer une autorité de certification intermédiaire. Cette autorité de certification intermédiaire doit être rattachée à une autorité de certification existante
- Key length : la longueur de la clé de chiffrement du certificat. Nous gardons la valeur par défaut : 2048
- Digest Algorithm : la fonction de hachage qui sera utilisée. Nous gardons la valeur par défaut : SHA256
- Common Name : le nom du certificat sans espaces, ni caractères spéciaux ou accentués. Ce nom doit être unique.
- Lifetime : la durée de vie de l'autorité de certification. Si nous n'avons pas de raison de réduire sa durée de vie, nous laissons la valeur par défaut (10 ans)
- Autres champs : l'ensemble des champs suivants sont principalement cosmétiques et doivent permettre d'identifier l'organisation. Ils peuvent être laissés vides ou complétés.
Exemple de résultat obtenu :
Nous validons notre configuration en cliquant sur le bouton "Save".
Notre autorité de certification est créée.
Création d'un certificat serveur
Nous restons dans le menu System > Cert Manager et basculons sur l'onglet "Certificates" (deuxième onglet).
Pour créer un nouveau certificat (client ou serveur), nous cliquons sur le bouton "+ Add/Sign" se trouvant en bas à droite de la liste des certificats existants.
Les champs à renseigner sont les suivants :
- Method : 4 méthodes sont possibles :
- Create an internal Certificate : permet de créer une nouveau certificat
- Import an existing Certificate : permet d'importer la clé publique et la clé privée d'un certificat existant
- Create a certificate Signing Request : permet de créer un fichier de requête qui pourra être envoyé à un CA tiers pour être signé. Cela peut être utile pour obtenir un certificat d'un CA root de confiance.
- Sign a Certificate Signing Request : permet de signer un fichier de requête
- Descriptive name : le nom que l'on souhaite donner à notre certificat serveur
- Certificate authority : l'autorité de certification qui signera le certificat que nous sommes en train de créer. Dans notre cas, nous choisissons le CA que nous venons de créer, soit "CA Provya"
- Key length : la longueur de la clé de chiffrement du certificat. Nous gardons la valeur par défaut : 2048
- Digest Algorithm : la fonction de hachage qui sera utilisée. Nous gardons la valeur par défaut : SHA256
- Lifetime : la durée de vie du certificat. Si nous n'avons pas de raison de réduire sa durée de vie, nous laissons la valeur par défaut (10 ans)
- Common Name : le nom du certificat sans espaces, ni caractères spéciaux ou accentués. Ce nom doit être unique.
- Autres champs : l'ensemble de ces champs sont principalement cosmétiques et doivent permettre d'identifier l'organisation émettrice du certificat. Ils peuvent être laissés vides ou complétés.
- Certificate Type : le type de certificat. Il existe 2 valeurs possibles :
- User Certificate : pour définir un certificat pour un client
- Server Certificate : pour définir un certificat pour un serveur
Exemple de résultat obtenu :
Nous validons notre configuration en cliquant sur le bouton "Save".
Notre certificat pour le serveur OpenVPN est créé.
Création d'un certificat client
Nous procédons exactement de la même manière que pour la création d'un certificat serveur. Le seul élément distinctif est le champ Certificate Type pour lequel nous choisissons "User Certificate".
Exemple de résultat obtenu :
Nous validons notre configuration en cliquant sur le bouton "Save".
Notre certificat pour le client OpenVPN est créé.
Configuration du serveur OpenVPN
Le détail de la configuration du serveur OpenVPN se trouve dans l'article dédié [pfSense] Monter un accès OpenVPN site-à-site.
Les différences au moment de la configuration sont les suivantes :
- Server Mode : choisir "Peer to Peer (SSL/TLS)"
- TLS Configuration : cocher la case "Use a TLS Key" pour davantage de sécurité. Nous conseillons de la cocher. La clé TLS sera générée automatiquement. Il restera à la copier côté client.
- Peer Certificate Authority : choisir l'autorité de certification créée précédemment ("CA Provya")
- Server Certificate : choisir le certificat serveur créé précédemment ("Certificat serveur OpenVPN Provya (Server: Yes, CA: CA Provya)")
- DH Parameters Length : Nous laissons la valeur par défaut (1024 bits)
Exemple de résultat obtenu :
La configuration coté serveur OpenVPN est terminée. Il reste à faire la configuration côté client.
Export des certificats
Nous devons exporter le certificat de l'autorité de certification (c'est-à-dire sa clé publique), ainsi que le certificat et la clé privée du client OpenVPN.
Pour cela, nous retournons dans le menu System > Cert Manager :
Dans l'onglet "CAs" (l'onglet par défaut), nous cliquons sur l'icône "Export CA" de l'autorité de certification que nous avons créée précédemment :
Puis, dans l'onglet "Certificates", nous cliquons successivement sur les icônes "Export Certificate" et "Export Key" du certificat client que nous avons créé précédemment :
La configuration côté serveur OpenVPN est terminée.
Maintenant, nous procédons à l'import des clés publiques/privées et à la configuration côté client OpenVPN.
Import de la clé publique du CA sur le pfSense client OpenVPN
Actions à effectuer coté client OpenVPN
Nous nous rendons dans le menu System > Cert Manager :
Dans l'onglet "CAs" (l'onglet par défaut), nous cliquons sur le bouton "+ Add" se trouvant en bas à droite de la liste des CAs existants.
Nous allons importer la clé publique du CA que nous avons créé sur le serveur OpenVPN.
Les champs à remplir sont les suivants :
- Descriptive name : le nom que l'on souhaite donner à notre autorité de certification. Nous gardons le même que celui qui a été donné sur le serveur OpenVPN ("CA Provya")
- Method : nous choisissons "Import an existing Certificate Authority"
- Certificate data : on copie dans ce champ le contenu de la clé publique (.crt)
- Certificate Private Key (optional) : si l'on souhaite importer la clé privée (.key), elle est à copier dans ce champ. Dans notre cas, nous le laissons vide. En effet, nous ne souhaitons pas signer de nouveaux certificats (nécessite la clé privée de l'autorité de certification), nous souhaitons seulement valider la signature du certificat qu'utilise le serveur OpenVPN (nécessite la clé publique de l'autorité de certification)
- Serial for next certificate : ce champ est à remplir uniquement si l'on importe une clé privée. Dans ce cas, il est important que chaque certificat créé par un CA dispose d'un numéro de série unique (autrement, nous risquons de rencontrer des problèmes en cas de révocation de certificat). Il faut donc choisir une valeur suffisamment grande (supérieure au nombre de certificat déjà créé par ce CA) afin d'éviter toute collision.
Exemple de résultat obtenu :
Nous validons en cliquant sur le bouton "Save".
Import de la clé publique et de la clé privée du certificat client OpenVPN
Nous restons dans le menu System > Cert Manager et basculons sur l'onglet "Certificates" (deuxième onglet).
Nous cliquons sur le bouton "+ Add/Sign" se trouvant en bas à droite de la liste des certificats existants.
Nous allons importer la clé publique et la clé privée du certificat client que nous avons créé sur le pfSense serveur OpenVPN.
Les champs à remplir sont les suivants :
- Method : on choisit "Import an existing Certificate"
- Descriptive name : le nom que l'on souhaite donner à notre certificat. Nous gardons le même que celui qui a été donné sur le serveur OpenVPN ("Certificat client OpenVPN Provya")
- Certificate data : on copie dans ce champ le contenu de la clé publique (.crt)
- Private key data : on copie dans ce champ le contenu de la clé privée (.key)
Exemple de résultat obtenu :
Nous validons en cliquant sur le bouton "Save".
Configuration du client OpenVPN
Le détail de la configuration du client OpenVPN se trouve dans l'article [pfSense] Monter un accès OpenVPN site-à-site.
Les différences au moment de la configuration sont les suivantes :
- Server Mode : choisir "Peer to Peer (SSL/TLS)"
- TLS Configuration : cocher la case "Use a TLS Key" pour davantage de sécurité. Décocher la case "Automatically generate a TLS Key", et copier dans le champ "TLS Key" la clé TLS qui a été généré côte serveur OpenVPN.
- Peer Certificate Authority : choisir l'autorité de certification importée précédemment ("CA Provya")
- Client Certificate : choisir le certificat client importé précédemment ("Certificat client OpenVPN Provya")
- DH Parameters Length : Nous laissons la valeur par défaut (1024 bits)
Exemple de résultat obtenu :
Nous validons en cliquant sur le bouton "Save".
Révocation de certificat
Le dernier élément, pour être complet sur la gestion des certificats, est la liste de révocation de certificats ou "Certificate Revocation Lists" (CRLs).
Cette liste de révocation contient les certificats qui ne doivent plus être considérés comme sûrs (car ils ont été compromis ou pour n'importe quelle autre raison).
Pour les connexions OpenVPN, la CRL peut être utilisée par le serveur pour vérifier les certificats utilisés par les clients OpenVPN.
Une CRL est signée par un CA. Ainsi, pour générer une CRL, il est nécessaire de disposer de la clé privée du CA.
Généralement, une seule CRL est maintenue par CA. Cependant, pfSense peut en maintenir davantage.
Néanmoins, une seule CRL pourra être sélectionnée par instance OpenVPN.
Ce fonctionnement permet, par exemple, d'empêcher un certificat de se connecter à une instance OpenVPN, mais de l'autoriser à se connecter à une autre instance.
Une CRL peut être soit créée, soit importée. La configuration se fait dans le menu System > Cert Manager depuis l'onglet "Certificate Revocation" (troisième onglet).
Pour ajouter une nouvelle CRL, nous cliquons sur le bouton "+ Add or import CRL" correspondant au CA qui signera cette CRL (dans notre cas, "CA Provya"). Les champs à renseigner sont les suivants :
- Method : deux méthodes sont possibles :
- Create an internal Certificate Revocation List : permet de créer une nouvelle CRL (nécessite de disposer de la clé privée du CA)
- Import an existing Certificate Revocation List : permet d'importer une CRL générée depuis un serveur tiers (disposant de la clé privée du CA)
- Descriptive name : le nom de notre CRL. On y inclut généralement une référence au nom du CA et/ou l'usage de cette CRL
- Certificate Authority : le CA qui a signé ou va signer cette CRL
- Lifetime : la durée de vie de la CRL (10 ans par défaut)
- Serial : le numéro de série de la CRL (0 par défaut pour la première)
Exemple de résultat obtenu :
Notre CRL est créée. On peut maintenant lui ajouter les certificats à révoquer. Pour cela, cliquer sur l'icône "Edit CRL" :
Il reste à choisir le certificat à révoquer, la raison de la révocation (ce champ est purement informatif) et cliquer sur le bouton "ADD".
Enfin, dans la configuration de notre serveur OpenVPN, nous devons ajouter cette CRL (champ "Peer Certificate Revocation List").
Voilà ! Notre serveur OpenVPN est prêt à fonctionner avec des certificats.
Pour aller plus loin
[pfSense] Monter un accès OpenVPN site-à-site
[pfSense] Monter un VPN natté (Overlap network) avec OpenVPN
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Retrouvez nos services et firewall pour pfSense & OPNsense
2 commentaires
ha.bou - 12/01/2017 à 11:35:33
Bonjour
Je veux faire un tunnel entre moi et mon fournisseur pour accéder a une application qui utilise le port 8124 comment je peux faire et est ce que la solution vpn faire la faire
cordialement
Guillaume - 06/02/2017 à 12:46:30
@ha.bou : Bonjour,
Il est difficile de vous répondre sans davantage d'information. Si votre fournisseur supporte la mise en place d'un lien OpenVPN, alors ça semble être la bonne solution. Si vous suivez les articles présents sur le site, vous devriez vous en sortir.
Cordialement,
Guillaume
--
Provya
Flux RSS des commentaires de cet article