Authentification par certificat SSL

OpenSSL

Comment authentifier ses utilisateurs de son site à l’aide d’un certificat signé plutôt que par login et mot de passe ? C’est ce que nous allons voir dans les lignes ci-dessous.

Sources

A L’aide d’un certificat auto-généré

Largement inspiré du Tonio™ Blog, voici la marche à suivre pour pouvoir générer un certificat avec lequel l’utilisateur pourra être reconnu apte à visiter la partie protégée de votre site. Elle s’oriente sur trois points :

  1. Créer une autorité de certification.
  2. Elle devra être installée chez le client pour que le certificat auto-signé de votre site soit reconnu de confiance par le navigateur

  3. Créer un certificat serveur.
  4. Certificat fils de votre autorité de certification, il sécurise la connexion vers votre site (permet le HTTPS). Il sera lu automatiquement par votre navigateur et sera reconnu comme étant de confiance.

  5. Créer un certificat client.
  6. Certificat à donner aux utilisateurs autorisés à accéder aux parties protégées du site.

Création de l’autorité de certification

 
# Nouvelle clé privée openssl genrsa -out Infovergne-CA.key 
# Demande de création de certificat (CSR: Certificate Signing Request) 
openssl req -new -key ./Infovergne-CA.key -out ./Infovergne-CA.csr \
    -subj "/C=FR/ST=/L=Clermont-Ferrand/O=Infovergne/CN=Infovergne" 
# Signature de la demande, création du certificat CRT 
openssl x509 -req -days 7 -in ./Infovergne-CA.csr -out ./Infovergne-CA.crt -signkey ./Infovergne-CA.key 
# Affichage des informations relatives au certificat (autorité de certification) 
openssl x509 -in Infovergne-CA.crt -text 
# Extraction de la clé publique si besoin 
openssl rsa -in Infovergne-CA.key -pubout -out Infovergne-CA.public.key 

Il reste à envoyer le fichier CRT à vos utilisateurs pour qu’ils l’intègrent dans leur magasin, catégorie Autorités de confiance.

Création et signature du certificat serveur

 
# Nouvelle clé privée 
openssl genrsa -out mysecurewebsite.key 
# Demande de création de certificat (CSR: Certificate Signing Request) 
openssl req -new -key ./mysecurewebsite.key -out mysecurewebsite.csr \
    -subj "/C=FR/ST=/L=Clermont-Ferrand/O=mysecurewebsite/CN= mysecurewebsite.infovergne.com" 
# Signature de la demande, création du certificat CRT sous l'autorité de confiance créée précédemment. 
openssl x509 -req -in ./mysecurewebsite.csr -CA ./Infovergne-CA.crt -CAkey ./Infovergne-CA.key \
    -CAcreateserial -out ./mysecurewebsite.crt -days 7 
# Si besoin : 
# Extraction de la clé privée au format PKCS12 
# openssl pkcs12 -export -in mysecurewebsite.crt -inkey mysecurewebsite.key \
#     -out mysecurewebsite.p12 -name "mysecurewebsite certificate" 
# Affichage des informations relatives au certificat 
# openssl pkcs12 -info -in mysecurewebsite.p12 
# openssl rsa -in mysecurewebsite.key -pubout -out mysecurewebsite.public.key 
# openssl rsa -in mysecurewebsite.key -out mysecurewebsite.nopassphrase.key 

Configuration dans Apache, sites-enabled

Pour que l’accès à la ressource protected soit protégé :

SSLEngine On 
SSLCACertificateFile /opt/certs/Infovergne-CA.crt 
SSLCertificateFile /opt/certs/mysecurewebsite.crt 
SSLCertificateKeyFile /opt/certs/mysecurewebsite.key 
<Location /protected>       
    SSLOptions +StdEnvVars
    SSLVerifyClient require
    SSLVerifyDepth 2 
</Location>

Création et signature du certificat client

 
# Nouvelle clé privée 
openssl genrsa -out olivier.key 
# Demande de création de certificat (CSR: Certificate Signing Request) 
openssl req -new -key ./olivier.key -out olivier.csr \
    -subj "/C=FR/ST=/L=Clermont-Ferrand/O=Olivier/CN=Olivier" 
# Signature de la demande, création du certificat CRT sous l'autorité de confiance créée précédemment. 
openssl x509 -req -in ./olivier.csr -CA ./Infovergne-CA.crt -CAkey ./Infovergne-CA.key \
    -CAcreateserial -out ./olivier.crt -days 7 
# Extraction de la clé privée au format PKCS12 à envoyer de façon sécurisée à l'utilisateur final 
openssl pkcs12 -export -in olivier.crt -inkey olivier.key -out olivier.p12 -name "olivier certificate" 
# Affichage des informations de la clé privée openssl pkcs12 -info -in olivier.p12 
# Si besoin, extraction de la clé publique 
# openssl rsa -in olivier.key -pubout -out olivier.public.key 

Il reste à envoyer le fichier P12 à vos utilisateurs pour qu’ils l’intègrent dans leur magasin, catégorie Mes certificats (automatique).

Création d’un certificat client via Letsencrypt

A priori il n’est pas possible de créer des certificats clients à partir des certificats SSL générés par LetsEncrypt.

 
# Quelques recherches ci et là : 
# openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout olivierLet.pem -out olivierLet.der \
#     -outform der -subj "/C=FR/ST=/L=Clermont-Ferrand/O=/CN=mysecurewebsite.infovergne.com" 
# /opt/letsencrypt/letsencrypt-auto certonly --authenticator manual \
#     --server https://acme-v01.api.letsencrypt.org/directory --text --csr olivierLet.der 
# mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge 
# cd /tmp/certbot/public_html/ # printf "%s" *** > .well-known/acme-challenge/*** 
# python2 -c "import BaseHTTPServer, SimpleHTTPServer; \
#     s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); s.serve_forever()" 
# Autre début de solution 
# openssl pkcs12 -export -out olivierLets.p12 -inkey /etc/letsencrypt/live/ \
#     mysecurewebsite.infovergne.com/privkey.pem -in /etc/letsencrypt/live/ \
#     mysecurewebsite.infovergne.com/cert.pem -certfile /etc/letsencrypt/live/ \
#     mysecurewebsite.infovergne.com/chain.pem 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *