Article mis à jour le

Principe de fonctionnement

Création d'une autorité de certification - CA

Descriptive name : le nom que l'on souhaite donner à notre autorité de certification

: 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

: 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

: 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.

: 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)

: 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.

Création d'un certificat serveur

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

: 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"

: 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

: 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

: 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)

: 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.

: 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.

: 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

Création d'un certificat client

Configuration du serveur OpenVPN

Server Mode : choisir "Peer to Peer (SSL/TLS)"

: 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.

: 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")

: 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)")

: 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)

Export des certificats

Import de la clé publique du CA sur le pfSense client OpenVPN

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")

: 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"

: nous choisissons "Import an existing Certificate Authority" Certificate data : on copie dans ce champ le contenu de la clé publique (.crt)

: 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)

: 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.

Import de la clé publique et de la clé privée du certificat client OpenVPN

Method : on choisit "Import an existing Certificate"

: 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")

: 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)

: 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)

Configuration du client OpenVPN

Server Mode : choisir "Peer to Peer (SSL/TLS)"

: 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.

: 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")

: 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")

: choisir le certificat client importé précédemment ("Certificat client OpenVPN Provya") DH Parameters Length : Nous laissons la valeur par défaut (1024 bits)

Révocation de certificat

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

: 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

: le CA qui a signé ou va signer cette CRL Lifetime : la durée de vie de la CRL (10 ans par défaut)

: 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)

Pour aller plus loin

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.: 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.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 :Dans notre cas, côté serveur, nous créerons une nouvelle autorité de certification (Create an internal Certificate Authority). Côté client, nous importerons la clé publique de l'autorité de certification créée côté serveur (Import an existing Certificate Authority).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 :Dans notre cas, nous créons un nouveau certificat (Create an internal Certificate).Dans notre cas, nous choisissons "Server Certificate".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 champpour 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.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.Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous