Cet article vous montre comment créer un certificat willcard signé par un tiers

Pourquoi un certificat ?

Parfois il m’arrive de ne pas pouvoir consulter mes emails car le réseau que j’utilise n’est pas sécurisé. J’entends par là que je ne sais pas qui est derrière et pourrait écouter mon trafic et capturer aisément mes identifiants.

J’ai donc décidé d’installer un certificat sur qth.fr. Comme la plupart de mes services sont en *.qth.fr j’ai choisis de faire un certificat willcard que j’ai fait signé par cacert. Le faire signer par autre que soit a l’avantage de pouvoir vérifier auprès de cacert que le certificat est valide. Il faut savoir que cacert est une autorité non reconnue par les navigateurs par défaut car son modele de confiance se base sur ses utilisateurs. (C’est les utilisateurs vérifient entre eux leur identité, cherchez « Key signing party » sur un moteur de recherche).

Ce serveur utilise donc les certificats de cacert ; pour installez le certificat root de cacert, rendez vous sur la page http://www.cacert.org/index.php?id=3 et cliquez simplment sur http://www.cacert.org/certs/root.crt . Attention, cela veux dire que vous acceptez tout les certificats signés par cacert !

Comment ça marche ? (grossièrement)

Pour sécuriser un site en SSL, le serveur doit obligatoirement connaitre un clée privée et un certificat publique signé. Il arrive qu’un ou plusieurs certificats intermédiaires soient nécessaires, j’en parlerais plus loin. Notez que les extensions varient d’un système à l’autre, mais on retrouve globalement KEY, CRT, CSR et PEM (ce dernier désigne en fait jusque c’est un fichier pour le chiffrement, j’utiliserais donc cette extension pour tous mes fichiers).

  • Le certificat privé « KEY » est un fichier généré que vous devez conserver et ne jamais le divulguer ! Il sera utilisé par votre serveur pour chiffrer votre trafic. Il peut être protégé par un mot de passe, libre à vous, personnellement je n’en met pas.
  • La demande de signature certificat « CSR » est un fichier généré à partir de la clé privée. ici je la crée en même temps. Elle peut être divulgué à votre tier de confiance. Elle contient diverses informations comme quels domaines il concerne, la durée de validité…
  • Le certificat « CRT » est le fichier généré par votre autorité de certification tiers.

Lorsque votre navigateur demande une page à votre serveur en SSL, ce dernier vous renvoie la réponse chiffrée avec le certificat publique signé par votre tiers. Votre navigateur peut donc vérifier que le certificat est valide auprès de l’autorité et déchiffrer la réponse du serveur.

Le certificat intermédiaire est parfois nécessaire lorsque l’autorité de certificat est inconnue de votre navigateur mais qui a pourtant été approuvé par une autre autorité, qui elle est connue de votre navigateur. Ce fichier doit donc être envoyé par le serveur en même temps que votre certificat signé. (Il peut y avoir plusieurs certificats intermédiaires).

Notez qu’il existe les certificats normaux et les certificats EV (Extended validate). Ces derniers permettent juste une vérification plus poussée de votre identification et provoque l’apparition de la barre d’adresse verte. (Sinon elle reste de la couleur normal)

Gérer un KEY et un CSR

Créer le fichier /usr/share/ssl-cert/ssleay-MONDOMAINE.cnf (un exemple se nome ssleay.cnf) et insérez ce texte que vous adapterez.

# -------------- BEGIN custom openssl.cnf -----
HOME                    = /etc/apache2/ssl/
RANDFILE                = /dev/urandom
oid_section             = new_oids
[ new_oids ]
[ req ]
default_days            = 730            # how long to certify for
default_keyfile         = /etc/apache2/ssl/qth_MONDOMAINE.pem
distinguished_name      = req_distinguished_name
encrypt_key             = no
string_mask = nombstr
req_extensions          = v3_req # Extensions to add to certificate request
[ req_distinguished_name ]
commonName              = Common Name (eg, YOUR name)
commonName_default      = MONNOMFQDNDUSERVEURDOMAINE
commonName_max          = 64
countryName             = Country Name (2 letter code)
countryName_default             = MONCODEPAYS_FR_PAREXEMPLE
countryName_min                = 2
countryName_max                = 2
organizationName        = Organization Name (company)
organizationName_default        = MONNOMDORGANISATION

localityName            = Locality Name (city, district)
localityName_default    = MAVILLE

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = MONDEPARTEMENT
emailAddress            = Email Address
emailAddress_max        = 40
[ v3_req ]
subjectAltName=DNS:MONDOMAINE,DNS:*.MONDOMAINE
# -------------- END custom openssl.cnf -----

Lancez la génération :

openssl req -batch -config /usr/share/ssl-cert/ssleay-MONDOMAINE.cnf -newkey rsa:2048 -out /etc/apache2/ssl/MONDOMAINE_csr.pem

Configurez apache

Créez un virtualhost qui écoutera sur le port 443 et insérez la configuration suivante :

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/MONDOMAINE_crt.pem
SSLCertificateKeyFile /etc/apache2/ssl/MONDOMAINE_key.pem

Et si besoin les certificats intermédiaires (Ajoutez les si votre autorité en a car d’autres navigateurs peuvent se comporter différemment que le votre au moment de vos tests) :
SSLCertificateChainFile /etc/apache2/ssl/MONDOMAINE_intermediate1.pem