doc-locale/fr-fr/administration/auth/smartcard.md
{{< details >}}
{{< /details >}}
GitLab prend en charge l'authentification par carte à puce.
Par défaut, les utilisateurs existants peuvent continuer à se connecter avec un nom d'utilisateur et un mot de passe lorsque l'authentification par carte à puce est activée.
Pour forcer les utilisateurs existants à utiliser uniquement l'authentification par carte à puce, désactivez l'authentification par nom d'utilisateur et mot de passe.
GitLab prend en charge deux méthodes d'authentification :
{{< details >}}
{{< /details >}}
Les cartes à puce avec certificats X.509 peuvent être utilisées pour s'authentifier auprès de GitLab.
Pour utiliser une carte à puce avec un certificat X.509 pour s'authentifier auprès d'une base de données locale avec GitLab, CN et emailAddress doivent être définis dans le certificat. Par exemple :
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 12856475246677808609 (0xb26b601ecdd555e1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: O=Random Corp Ltd, CN=Random Corp
Validity
Not Before: Oct 30 12:00:00 2018 GMT
Not After : Oct 30 12:00:00 2019 GMT
Subject: CN=Gitlab User, [email protected]
{{< details >}}
{{< /details >}}
Les cartes à puce avec certificats X.509 utilisant des extensions SAN peuvent être utilisées pour s'authentifier auprès de GitLab.
Pour utiliser une carte à puce avec un certificat X.509 pour s'authentifier auprès d'une base de données locale avec GitLab :
subjectAltName (SAN) doit définir l'identité de l'utilisateur (email) au sein de l'instance GitLab (URI).URI doit correspondre à Gitlab.config.host.gitlab.email avec l'URI.Par exemple :
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 12856475246677808609 (0xb26b601ecdd555e1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: O=Random Corp Ltd, CN=Random Corp
Validity
Not Before: Oct 30 12:00:00 2018 GMT
Not After : Oct 30 12:00:00 2019 GMT
...
X509v3 extensions:
X509v3 Key Usage:
Key Encipherment, Data Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
email:[email protected], URI:http://gitlab.example.com/
{{< details >}}
{{< /details >}}
GitLab met en œuvre une méthode standard de correspondance de certificats en suivant RFC4523. Il utilise la règle de correspondance de certificats certificateExactMatch sur l'attribut userCertificate. Comme prérequis, vous devez utiliser un serveur LDAP qui :
certificateExactMatch.userCertificate.{{< history >}}
reverse_issuer_and_subject et reverse_issuer_and_serial_number dans GitLab 17.11.issuer_and_subject, reverse_issuer_and_subject et subject ont été mis à jour dans GitLab 18.6 avec un indicateur nommé smartcard_ad_formats_v2. Activé par défaut. Désactivez cet indicateur pour rétablir ces formats aux versions précédentes.smartcard_ad_formats_v2 a été supprimé.{{< /history >}}
[!flag] La fonctionnalité de cette fonction est contrôlée par un feature flag. Pour plus d'informations, consultez l'historique.
Active Directory ne prend pas en charge la règle certificateExactMatch ni l'attribut userCertificate. La plupart des outils d'authentification basée sur des certificats, tels que les cartes à puce, utilisent l'attribut altSecurityIdentities, qui peut contenir plusieurs certificats pour chaque utilisateur. Les données du champ doivent correspondre à l'un des formats recommandés par Microsoft.
Utilisez les attributs suivants pour personnaliser le champ que GitLab vérifie et le format des données de certificat :
smartcard_ad_cert_field - indique le nom du champ à rechercher. Il peut s'agir de n'importe quel attribut d'un objet utilisateur.smartcard_ad_cert_format - indique le format des informations extraites du certificat. Ce format doit être l'une des valeurs suivantes. La valeur la plus courante est issuer_and_serial_number pour correspondre au comportement des serveurs LDAP non Active Directory.smartcard_ad_cert_format | Exemple de données |
|---|---|
principal_name | X509:<PN>[email protected] |
rfc822_name | X509:<RFC822>[email protected] |
subject | X509:<S>CN=dennis,OU=UserAccounts,DC=example,DC=com |
issuer_and_serial_number | X509:<I>CN=CONTOSO-DC-CA,DC=example,DC=com<SR>1181914561 |
issuer_and_subject | X509:<I>CN=EXAMPLE-DC-CA,DC=example,DC=com<S>CN=cynthia,OU=UserAccounts,DC=example,DC=com |
reverse_issuer_and_serial_number | X509:<I>DC=com,DC=example,CN=CONTOSO-DC-CA<SR>1181914561 |
reverse_issuer_and_subject | X509:<I>DC=com,DC=example,CN=CONTOSO-DC-CA<S>CN=cynthia,OU=UserAccounts,DC=example,DC=com |
reverse_issuer_and_reverse_subject | X509:<I>DC=com,DC=example,CN=CONTOSO-DC-CA<S>DC=com,DC=example,OU=UserAccounts,CN=cynthia |
Pour issuer_and_serial_number, la portion <SR> est en ordre d'octets inversé, avec l'octet le moins significatif en premier. Pour plus d'informations, consultez comment mapper un utilisateur à un certificat à l'aide de l'attribut altSecurityIdentities.
Les formats d'émetteur inversés trient la chaîne d'émetteur de la plus petite unité à la plus grande. Certains serveurs Active Directory stockent les certificats dans ce format.
[!note] Si aucun
smartcard_ad_cert_formatn'est spécifié, mais qu'un serveur LDAP est configuré avecactive_directory: trueet les cartes à puce activées, GitLab adopte par défaut le comportement de la version 16.8 et antérieures, et utilisecertificateExactMatchsur l'attributuserCertificate.
{{< history >}}
{{< /history >}}
Microsoft Entra ID, anciennement connu sous le nom d'Azure Active Directory, fournit un annuaire basé sur le cloud pour les entreprises et les organisations. Entra Domain Services fournit une interface LDAP sécurisée en lecture seule vers l'annuaire, mais n'expose qu'un sous-ensemble limité des champs disponibles dans Entra ID.
Entra ID utilise le champ CertificateUserIds pour gérer les certificats clients des utilisateurs, mais ce champ n'est pas exposé dans LDAP / Entra ID Domain Services. Avec une configuration cloud uniquement, il n'est pas possible pour GitLab d'authentifier les cartes à puce des utilisateurs via LDAP.
Dans un environnement hybride sur site et cloud, les entités sont synchronisées entre le contrôleur Active Directory sur site et le cloud Entra ID via Entra Connect. Si vous synchronisez votre attribut altSecurityIdentities avec certificateUserIds dans Entra ID à l'aide d'Entra ID Connect, vous pouvez exposer ces données dans LDAP / Entra ID Domain Services afin qu'elles puissent être authentifiées par GitLab :
altSecurityIdentities avec un attribut supplémentaire dans Entra ID.smartcard_ad_cert_field dans GitLab pour utiliser cet attribut d'extension.Pour les installations de packages Linux :
Modifiez /etc/gitlab/gitlab.rb :
# Allow smart card authentication
gitlab_rails['smartcard_enabled'] = true
# Path to a file containing a CA certificate
gitlab_rails['smartcard_ca_file'] = "/etc/ssl/certs/CA.pem"
# Host and port where the client side certificate is requested by the
# webserver (NGINX/Apache)
gitlab_rails['smartcard_client_certificate_required_host'] = "smartcard.example.com"
gitlab_rails['smartcard_client_certificate_required_port'] = 3444
[!note] Attribuez une valeur à au moins l'une des variables suivantes :
gitlab_rails['smartcard_client_certificate_required_host']ougitlab_rails['smartcard_client_certificate_required_port'].
Enregistrez le fichier et reconfigurez GitLab pour que les modifications prennent effet.
Pour les installations compilées manuellement :
Configurez NGINX pour demander un certificat côté client
Dans la configuration NGINX, un contexte serveur additional doit être défini avec la même configuration, à l'exception des éléments suivants :
Le contexte serveur NGINX supplémentaire doit être configuré pour s'exécuter sur un port différent :
listen *:3444 ssl;
Il peut également être configuré pour s'exécuter sur un nom d'hôte différent :
listen smartcard.example.com:443 ssl;
Le contexte serveur NGINX supplémentaire doit être configuré pour exiger le certificat côté client :
ssl_verify_depth 2;
ssl_client_certificate /etc/ssl/certs/CA.pem;
ssl_verify_client on;
Le contexte serveur NGINX supplémentaire doit être configuré pour transmettre le certificat côté client :
proxy_set_header X-SSL-Client-Certificate $ssl_client_escaped_cert;
Par exemple, voici un exemple de contexte serveur dans un fichier de configuration NGINX (tel que /etc/nginx/sites-available/gitlab-ssl) :
server {
listen smartcard.example.com:3443 ssl;
# certificate for configuring SSL
ssl_certificate /path/to/example.com.crt;
ssl_certificate_key /path/to/example.com.key;
ssl_verify_depth 2;
# CA certificate for client side certificate verification
ssl_client_certificate /etc/ssl/certs/CA.pem;
ssl_verify_client on;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-SSL-Client-Certificate $ssl_client_escaped_cert;
proxy_read_timeout 300;
proxy_pass http://gitlab-workhorse;
}
}
Modifiez config/gitlab.yml :
## Smart card authentication settings
smartcard:
# Allow smart card authentication
enabled: true
# Path to a file containing a CA certificate
ca_file: '/etc/ssl/certs/CA.pem'
# Host and port where the client side certificate is requested by the
# webserver (NGINX/Apache)
client_certificate_required_host: smartcard.example.com
client_certificate_required_port: 3443
[!note] Attribuez une valeur à au moins l'une des variables suivantes :
client_certificate_required_hostouclient_certificate_required_port.
Enregistrez le fichier et redémarrez GitLab pour que les modifications prennent effet.
Pour une sécurité renforcée, déployez GitLab derrière un pare-feu tel que CloudFlare WAF ou un serveur exécutant ModSecurity. Les URL correspondant aux modèles suivants doivent être accessibles au NGINX déployé dans le cadre de GitLab, mais pas aux clients externes :
/-/smartcard/extract_certificate
/-/smartcard/verify_certificate
Ces chemins ne doivent être accessibles de l'extérieur qu'en utilisant le nom d'hôte et le port de la carte à puce alloués à NGINX, et ne doivent pas être accessibles de l'extérieur en utilisant le nom d'hôte et le port principaux de GitLab. Cela doit être robuste contre les attaques par en-tête d'hôte HTTP, afin que les utilisateurs ne puissent pas soumettre leurs propres paramètres de certificat sans passer par NGINX.
Pour les installations de packages Linux :
Ajoutez à /etc/gitlab/gitlab.rb :
gitlab_rails['smartcard_san_extensions'] = true
Enregistrez le fichier et reconfigurez GitLab pour que les modifications prennent effet.
Pour les installations compilées manuellement :
Ajoutez la ligne san_extensions dans config/gitlab.yml dans la section de la carte à puce :
smartcard:
enabled: true
ca_file: '/etc/ssl/certs/CA.pem'
client_certificate_required_port: 3444
# Enable the use of SAN extensions to match users with certificates
san_extensions: true
Enregistrez le fichier et redémarrez GitLab pour que les modifications prennent effet.
Pour les installations de packages Linux :
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['ldap_servers'] = YAML.load <<-EOS
main:
# snip...
# Enable smart card authentication against the LDAP server. Valid values
# are "false", "optional", and "required".
smartcard_auth: optional
# If your LDAP server is Active Directory, you can configure these two fields.
# Specify which field contains certificate information, 'altSecurityIdentities' by default
smartcard_ad_cert_field: altSecurityIdentities
# Specify format of certificate information. Valid values are:
# principal_name, rfc822_name, issuer_and_subject, subject, issuer_and_serial_number
smartcard_ad_cert_format: issuer_and_serial_number
EOS
Enregistrez le fichier et reconfigurez GitLab pour que les modifications prennent effet.
Pour les installations compilées manuellement :
Modifiez config/gitlab.yml :
production:
ldap:
servers:
main:
# snip...
# Enable smart card authentication against the LDAP server. Valid values
# are "false", "optional", and "required".
smartcard_auth: optional
# If your LDAP server is Active Directory, you can configure these two fields.
# Specify which field contains certificate information, 'altSecurityIdentities' by default
smartcard_ad_cert_field: altSecurityIdentities
# Specify format of certificate information. Valid values are:
# principal_name, rfc822_name, issuer_and_subject, subject, issuer_and_serial_number
smartcard_ad_cert_format: issuer_and_serial_number
Enregistrez le fichier et redémarrez GitLab pour que les modifications prennent effet.
Pour les installations de packages Linux :
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['smartcard_required_for_git_access'] = true
Enregistrez le fichier et reconfigurez GitLab pour que les modifications prennent effet.
Pour les installations compilées manuellement :
Modifiez config/gitlab.yml :
## Smart card authentication settings
smartcard:
# snip...
# Browser session with smart card sign-in is required for Git access
required_for_git_access: true
Enregistrez le fichier et redémarrez GitLab pour que les modifications prennent effet.
Le guide Mots de passe générés pour les utilisateurs créés via l'authentification intégrée fournit un aperçu de la façon dont GitLab génère et définit les mots de passe pour les utilisateurs créés via l'authentification par carte à puce.