> For the complete documentation index, see [llms.txt](https://docs.stoik.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.stoik.io/cyber-best-practices/fr/renforcez-votre-environnement/implement-certificates/certificate-based-mfa-on-fortigate.md).

# MFA basé sur les certificats sur Fortigate

## Objectif

Exiger un certificat utilisateur valide pour les utilisateurs SSL-VPN appartenant à un groupe AD spécifique.

## Prérequis

* Avoir déjà déployé des certificats auprès de vos utilisateurs via ADCS. Si ce n’est pas le cas, suivez [Déploiement des certificats utilisateur dans Active Directory](broken://pages/9e5dc060ec4d318077b0e9b489903a228005f58e).
* Avoir configuré l’authentification LDAP en fonction de votre Active Directory.

{% hint style="info" %}
Si vous gérez FortiGate via FortiManager, les étapes et les emplacements peuvent différer. Demandez à un ingénieur le processus FortiManager.
{% endhint %}

{% stepper %}
{% step %}

#### Exportez votre certificat d’AC racine ADCS (clé publique uniquement)

Exportez le **certificat** public de votre AC racine ADCS depuis n’importe quel poste de travail du domaine.

Trouvez-le dans **Certificats - Utilisateur actuel → Autorités de certification racines de confiance**.

Exportez-le au format `.cer` / certificat Base-64 (sans clé privée).

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/UoNOEDpWuW7doKmRUzMQ/image%20png%20Apr%2016%202024%2010%2029%2033%206039%20AM.png)
{% endstep %}

{% step %}

#### Importez l’AC racine dans FortiGate

Importez votre certificat racine d’AC dans **Système → Certificats → Créer/Importer → Certificat d’AC**.

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/V3MxpV96ygH68ZpRDRwq/image%20png%20Apr%2016%202024%2010%2025%2056%200473%20AM.png)

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/Xk7KC0PNyCxiGQ4AdrHd/image%20png%20Apr%2016%202024%2010%2030%2006%206702%20AM.png)

Pour plus de clarté, nous recommandons de renommer le certificat importé (nommé par défaut Ca\_Cert\_X, où X est un nombre) avec un nom plus parlant. Pour ce faire, ouvrez l’interface en ligne de commande FortiGate et saisissez les commandes suivantes :

```shell
config vpn certificate ca
rename Ca_Cert_X to ADCS_Cert
```

Le certificat devrait alors apparaître sous son nouveau nom.

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/G7n13fPuW6Idbyq1rWpC/image%20png%20Apr%2016%202024%2005%2015%2000%207849%20PM.png)
{% endstep %}

{% step %}

#### Créez un pair utilisateur (PKI) qui relie le certificat à LDAP

Vous ferez référence à ce pair utilisateur dans votre règle d’authentification SSL-VPN.

Remplacez :

* `ADCS_Cert` par le nom de votre AC importée (le renommage ci-dessus).
* `<LDAP_SERVER_NAME>` par le nom de l’objet serveur LDAP FortiGate provenant de **Utilisateurs et authentification → Serveurs LDAP**.

{% tabs %}
{% tab title="FortiOS < 7.x" %}

```shell
config user peer
    edit pki01
        set ca ADCS_Cert
        set ldap-server <LDAP_SERVER_NAME>
        set ldap-mode principal-name
    next
end
```

{% endtab %}

{% tab title="FortiOS 7.x+" %}

```shell
config user peer
    edit pki01
        set ca ADCS_Cert
        set mfa-mode subject-identity
        set mfa-server <LDAP_SERVER_NAME>
    next
end
```

{% endtab %}
{% endtabs %}
{% endstep %}

{% step %}

#### Créez un groupe AD pour les utilisateurs de certificats

Pour faciliter le déploiement du MFA auprès de vos employés, nous recommandons de créer un nouveau groupe Active Directory. Cela vous permettra de migrer progressivement les utilisateurs du groupe "VPN sans certificat" vers le groupe "VPN avec certificat". Créez ce nouveau groupe dans votre domaine Active Directory à l’aide de l’outil **"Utilisateurs et ordinateurs Active Directory"** outil. Dans l’exemple ci-dessous, nous l’avons nommé **"NOMADE\_CERT"**:

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/TuGxlrAVtRfI25kfwPym/image%20png%20Apr%2016%202024%2005%2021%2048%206625%20PM.png)

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/eheHigBZOrFkD0xLQfiy/image%20png%20Apr%2016%202024%2005%2022%2042%205366%20PM.png)
{% endstep %}

{% step %}

#### Créez le groupe d’utilisateurs FortiGate mappé au groupe AD

Créez un nouveau **groupe d’utilisateurs** dans **Utilisateurs et authentification → Groupes d’utilisateurs**.

Définissez :

* **Serveur distant** = votre objet LDAP
* **Nom du groupe** = `NOMADE_CERT` (ou le groupe AD de votre choix)

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/LNBcvH9j1RgvYGngilpZ/image%20png%20Apr%2016%202024%2005%2026%2011%202110%20PM.png)

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/To3fBfEgDMYVRasWUnu0/image%20png%20Apr%2016%202024%2005%2027%2030%203309%20PM.png)
{% endstep %}

{% step %}

#### Associez le groupe d’utilisateurs à votre portail SSL-VPN

Dans **Paramètres SSL-VPN**, associez le nouveau groupe au portail souhaité.

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/XSSm8fI5AwryXzW5cDtw/image%20png%20Apr%2016%202024%2005%2029%2031%209722%20PM.png)

Rouvrez le CLI FortiGate et saisissez la commande suivante :

```shell
conf vpn ssl settings
conf authentication-rule
show
```

La liste des associations existantes devrait alors s’afficher, comme dans l’exemple ci-dessous :

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/gGliR4mrzptssu5yE9ls/image%20png%20Apr%2016%202024%2005%2032%2041%205333%20PM.png)

Vous devez maintenant identifier l’association nouvellement créée. Dans cet exemple, il s’agit du numéro 4, associé au groupe `NOMADE_CERT`.

Entrez les commandes suivantes (remplacez `4` par votre ID d’association) :

```shell
edit 4
set client-cert enable
set user-peer pki01
end
show
```

Vous devriez alors voir la liste mise à jour des associations :

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/kUeeAKv0OYZCKkN7tYgj/image%20png%20Apr%2016%202024%2005%2036%2040%204046%20PM.png)

Les utilisateurs du domaine AD appartenant à `NOMADE_CERT` doivent désormais présenter un certificat utilisateur valide pour se connecter.
{% endstep %}

{% step %}

#### Test depuis FortiClient

Sur une station de travail jointe au domaine, mettez à jour le profil VPN FortiClient :

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/rPmNtIfwmzAW9DTAwqjc/image%20png%20Apr%2016%202024%2005%2038%2049%208834%20PM.png)

Sélectionnez le certificat associé à votre utilisateur (ici "stoik\_test") dans le **champ "Certificat client"** :

![](https://content.gitbook.com/content/jlP9dfgnu6hj9gyZJG1g/blobs/eU1qkoZ7RUk6smk1PCYR/image%20png%20Apr%2016%202024%2005%2046%2026%207990%20PM.png)
{% endstep %}
{% endstepper %}

## Dépannage des problèmes d’authentification

Les commandes suivantes vous permettront d’afficher les journaux de débogage pour LDAP et, de manière générale, pour les processus d’authentification (les commandes doivent être saisies dans le CLI FortiGate, et la session doit rester ouverte) :

```shell
diagnose debug enable
diagnose debug application fnbamd -1
diagnose debug application authd -1
diagnose debug application ldap -1
```

Si les commandes ci-dessus ne permettent pas d’identifier le problème (informations incorrectes dans le certificat, serveur LDAP injoignable, etc.), il peut être utile d’activer le journal de débogage SSL VPN :

```shell
diagnose debug app sslvpn -1
diagnose vpn ssl debug-filter src-addr4 XXX.XXX.XXX.XXX
```

Pour limiter la quantité de journaux affichés, remplacez XXX.XXX.XXX.XXX ci-dessus par l’adresse IP source à l’origine de la connexion VPN.

Une fois le débogage terminé, vous devez désactiver le mode de débogage :

```shell
diagnose debug disable
diagnose debug reset
```

Veuillez noter que cette procédure peut être assez complexe, car elle nécessite d’être simultanément connecté au FortiGate et en mesure de lancer FortiClient. N’hésitez pas à contacter nos experts si nécessaire.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.stoik.io/cyber-best-practices/fr/renforcez-votre-environnement/implement-certificates/certificate-based-mfa-on-fortigate.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
