TLS

Certificats X.509

  • Un certificat contient : des informations sur l’identité du propriétaire et sur l’autorité de certification ainsi qu’une clé publique ;
  • Un certificat est signé par l’autorité de certification (avec sa clé privée) ;
  • Les certificats forment une chaine allant du serveur SSL jusqu’au serveur root ;
  • Les autorités de certification root sont des organisations de confiance ;

L’utilisateur va recevoir le certificat correspondant au serveur. Il va le valider en remontant les certificats jusqu’à ce qu’il arrive à un certificat connu (inclus dans le logiciel client). Tous les certificats inconnus seront vérifiés à l’aide des requêtes OCSP. Le client enverra au serveur de gestion de clés l’ID du certificat ainsi que des hash. Le serveur de gestion de clés va comparer ces hash avec ceux qu’il a en base de données et renverra si le certificat est valide ainsi que son certificat.

OpenSSL

Génération d’un certificat auto-signé :

$ openssl genrsa -out example.key 1024
$ openssl req -new -key example.key -out example.csr
$ openssl x509 -req -days 365 -in example.csr -signkey example.key -out example.crt

Signer un certificat client avec une autorité :

$ openssl x509 -req -days 365 \
    -in client.csr -CA ca.crt -CAkey ca.key \
    -out client.cert

Création d’un fichier PEM avec le certificat et la clé :

$ cat ip42.eu.key ip42.eu.crt > ip42.eu.pem

Se connecter à un serveur pour débugger SSL :

$ openssl s_client -connect example.org:443

Vérifier le certificat X509 d’un serveur :

$ openssl s_client -connect example.org:443 | openssl x509 -text -noout

Afficher une requête de certificat :

$ openssl req -noout -text -in example.csr

Afficher un certificat :

$ openssl x509 -noout -text -in example.crt

Créer et signer un certificat avec “Subject Alternative Name” :

$ openssl genrsa -out server.key 2048

$ openssl req -new -sha256 \
    -key server.key \
    -subj "/CN=server.domain" \
    -reqexts SAN \
    -config <(cat /etc/pki/tls/openssl.cnf \
        <(printf "[SAN]\nsubjectAltName=DNS:server.domain")) \
    -out server.csr

$ openssl x509 -req -days 365 \
    -extensions SAN \
    -extfile <(cat /etc/pki/tls/openssl.cnf \
            <(printf "[SAN]\nsubjectAltName=DNS:server.domain")) \
    -in server.csr \
    -CA ca.crt -CAkey ca.key \
    -out "server.crt"

Création de PKI

Sources