ANSSI security guidelines¶
Presentation¶

The Agence Nationale de la Sécurité des Systèmes d’Information (ANSSI) is a French Agency for the Security of Information Systems.
They published a document to securize OpenID Connect. It contains around fifty recommandations to strengthen your OIDC service, as OpenID provider or relying party.
We describe here how to configure LemonLDAP::NG to match the majority of these recommandations. You can find the list at the end of the page (in French language, as the original document).
Directly implemented in LL::NG¶
A lot of recommandations are built-in features of LemonLDAP::NG, so there is nothing to configure to respect them:
- R6 Vérifier le nom de domaine
- R10 Systématiser l’envoi du paramètre state
- R11 Générer aléatoirement le paramètre state
- R13 Utiliser les cookies de session
- R15 Générer aléatoirement le paramètre nonce
- R17 Se protéger contre les redirections ouvertes
- R18 Générer aléatoirement les authorization code
- R20 Associer le code authorization code au client OIDC
- R24 Générer aléatoirement les access token
- R26 Vérifier l’intégrité de l’ID Token
- R28 Vérifier les informations d’un ID Token
- R29 Vérifier le niveau d’authentification de l’utilisateur
- R30 Rendre inutilisables les authorization code
- R31 Transmettre les access token par l’entête Authorization
- R33 Restreindre la durée de validité d’un access token
- R34 Croiser les informations du UserInfo et de l’ID Token
- R47 Journaliser les évènements importants
Some other are not directly related to LemonLDAP::NG, but come with a correct configuration of the web server or the global infrastructure:
- R3 Mettre en œuvre HTTPS : lié au serveur Web
- R4 Appliquer les recommandations de sécurité relatives à TLS
- R5 Imposer aux clients OIDC des suites cryptographiques recommandées pour les communications serveur à serveur
- R46 Mettre en oeuvre un système de journalisation
LL::NG as OpenID Connect Provider¶
- R1 Utiliser en priorité la cinématique authorization code pour les applications Web
This is the default configuration, be sure to not enable Implicit or Hybrid flows in OpenID Connect Service
> Security
.
- R9 Imposer un mode de transmission des paramètres dans une demande d’authentification
You need to fix the access mode for each relying party in Options
> Security
> Require JWS for authorization requests
- R12 Détecter les demandes d’authentification sans le paramètre state
Require the state parameter in Options
> Security
> Require "state" in authorization request
- R16 Détecter les demandes d’authentification sans le paramètre nonce
Require the nonce parameter in Options
> Security
> Require "nonce" in authorization request
- R19 Limiter la durée de vie d’un authorization code
The default value is already quite low (1 minute) but you can still change it in OpenID Connect Service
> Timeouts
> Authorization Codes
.
You can configure timeouts for other tokens too.
- R21 Stocker les authorization code sous forme d’empreinte
- R25 Stocker les access token sous formes d’empreintes
Enable hashed session in General Parameters
> Advanced parameters
> Security
> Hashed session storage
- R23 Utiliser une authentification du client OIDC adaptée
Require JWS authentication on token endpoint in Options
> Security
> Token endpoint authentication method
You can also enforce this for userinfo endpoint.
- R32 Ne pas écrire dans les journaux les access token
Configure the log level to info or notice (access tokens can be seen in debug level).
- R35 Générer aléatoirement les secrets d’authentification partagés
Use a random value for client_secret (for example with command pwgen
)
- R36 Renouveler les secrets d’authentification partagés
There is no automatic renewal of client_secret, you need to plan it on your side.
- R37 Utiliser un secret différent par client OIDC
Simple. Just be sure to have different client_secret values for each configured relying party.
- R38 Restreindre l’accès au secret d’authentification
- R40 Restreindre l’accès à la clé privée de signature
Quite simple. Be sure your manager is well protected, and your configuration backend too.
- R42 Utiliser des fonctions de hachage recommandées
- R43 Utiliser des mécanismes de signature recommandés
- R44 Fixer l’algorithme utilisé pour le JWS
Forbid the use of HS algorithms, prefer those with public/private keys. You can configure the algorithm of JWS (ID Token, and if configured as JWT, access token and userinfo) in Options
> Algorithms
.
- R48 Désactiver la découverte automatisée
Configuration metadata are available anonymously, you can disable access in OpenID Connect Service
> Security
> Don't display metadata
- R49 Ne pas utiliser l’enrôlement automatisé
This is the defaut configuration, be sure to keep this disabled in OpenID Connect Service
> Dynamic registration
> Activation
LL::NG as OpenID Connect Relying Party¶
- R8 Utiliser un JWS protégé par un HMAC
- R8+ Utiliser un JWS protégé par une signature
- R42 Utiliser des fonctions de hachage recommandées
- R43 Utiliser des mécanismes de signature recommandés
- R44 Fixer l’algorithme utilisé pour le JWS
Set method and algoroithm in Options
> Protocol
> Authentication method for authorization code request
and Signature algorithm for authorization code authentication
. Forbid the use of HS algorithms, prefer those with public/private keys.
- R14 Systématiser l’envoi du paramètre nonce
This is the default configuration, check it in Options
> Protocol
> Use nonce
- R23 Utiliser une authentification du client OIDC adaptée
Set authentication on token endpoint in Options
> Protocol
> Token endpoint authentication method
, prefer JWS authentication method.
- R32 Ne pas écrire dans les journaux les access token
Configure the log level to info or notice (access tokens can be seen in debug level).
- R38 Restreindre l’accès au secret d’authentification
- R40 Restreindre l’accès à la clé privée de signature
Quite simple. Be sure your manager is well protected, and your configuration backend too.
List of recommandations¶
- R1 Utiliser en priorité la cinématique authorization code pour les applications Web
- R2 Mettre en place une politique de sécurité
- R3 Mettre en œuvre HTTPS
- R4 Appliquer les recommandations de sécurité relatives à TLS
- R5 Imposer aux clients OIDC des suites cryptographiques recommandées pour les communications serveur à serveur
- R6 Vérifier le nom de domaine
- R7 Utiliser le certificate pinning
- R8 Utiliser un JWS protégé par un HMAC
- R8+ Utiliser un JWS protégé par une signature
- R9 Imposer un mode de transmission des paramètres dans une demande d’authentification
- R10 Systématiser l’envoi du paramètre state
- R11 Générer aléatoirement le paramètre state
- R12 Détecter les demandes d’authentification sans le paramètre state
- R13 Utiliser les cookies de session
- R14 Systématiser l’envoi du paramètre nonce
- R15 Générer aléatoirement le paramètre nonce
- R16 Détecter les demandes d’authentification sans le paramètre nonce
- R17 Se protéger contre les redirections ouvertes
- R18 Générer aléatoirement les authorization code
- R19 Limiter la durée de vie d’un authorization code
- R20 Associer le code authorization code au client OIDC
- R21 Stocker les authorization code sous forme d’empreinte
- R22 Vérifier le paramètre state associé à la session de l’utilisateur
- R23 Utiliser une authentification du client OIDC adaptée
- R24 Générer aléatoirement les access token
- R25 Stocker les access token sous formes d’empreintes
- R26 Vérifier l’intégrité de l’ID Token
- R27 Utiliser un secret partagé différent du client_secret pour générer le HMAC de l’ID Token
- R28 Vérifier les informations d’un ID Token
- R29 Vérifier le niveau d’authentification de l’utilisateur
- R30 Rendre inutilisables les authorization code
- R31 Transmettre les access token par l’entête Authorization
- R32 Ne pas écrire dans les journaux les access token
- R33 Restreindre la durée de validité d’un access token
- R34 Croiser les informations du UserInfo et de l’ID Token
- R35 Générer aléatoirement les secrets d’authentification partagés
- R36 Renouveler les secrets d’authentification partagés
- R37 Utiliser un secret différent par client OIDC
- R38 Restreindre l’accès au secret d’authentification
- R39 Utiliser des certificats pour authentifier les JWS
- R40 Restreindre l’accès à la clé privée de signature
- R41 Vérifier la révocation des certificats
- R42 Utiliser des fonctions de hachage recommandées
- R43 Utiliser des mécanismes de signature recommandés
- R44 Fixer l’algorithme utilisé pour le JWS
- R45 Sécuriser l’application Web OIDC
- R46 Mettre en oeuvre un système de journalisation
- R47 Journaliser les évènements importants
- R48 Désactiver la découverte automatisée
- R49 Ne pas utiliser l’enrôlement automatisé
- R50 Sécuriser l’interface Web de configuration d’un client OIDC
- R51 Vérifier l’identité des fournisseurs de service