Par défaut, OpenSSL utilise le fichier de configuration "/etc/ssl/openssl.cnf" pour la génération des certificats.
Pour utiliser un fichier de configuration personnalisé, il suffit d'ajouter l'argument "-config {fichier_de_configuration_personnalisé}" à la commande openssl.
Avant de pouvoir générer un certificat, il faut obligatoirement générer une clé RSA ou DSA.
Tout est expliqué ici.
Dans les exemples suivants, la clé privée "mykey.pem" sera utilisée pour la génération des certificats.
Création d'une autorité de certification (permettant de signer les demandes de certificats)
Pour générer ses propres certificats, sans passer par une autorité de certification externe :
$ openssl req -new -x509 -key mykey.pem -out ca.crt -days 1095
On indique pour le paramètre "-out" le nom de l'autorité de certification à générer puis la durée de validité en jour avec le paramètre "-days"
Cette autorité de certification permettra de signer les futures demandes de certificats auto-signés.
Cette génération est à faire une seule fois.
Le Common Name à indiquer ne doit correspondre à aucun nom de domaine ayant besoin d'un certificat.
Cette autorité de certification peut-être mis à disposition du public afin d'être intégré dans les différents navigateurs comme étant une autorité de certification reconnue.
Création d'une demande de certificat
Une demande de certificat peut être utilisée sur un site comme http://www.cacert.org/ afin d'obtenir un certificat reconnu par une autorité de certification ou afin d'être signé par le certificat ca.crt généré ci-dessus.
Dans le cas où cette demande devrait être signée par notre propre autorité de certification (générée ci-dessus), il est nécessaire d'utiliser une autre clé privée propre au serveur qui utilisera le certificat final. En effet la clé privée utilisée pour créer l'autorité de certification est exclusive à l'autorité de certification.
$ openssl req -new -key mykey.pem -out mondomaine.csr
La demande "mondomaine.csr" peut ensuite être transmise à l'autorité de certification qui fournira par la suite le certificat résultant.
Le Common Name à indiquer doit correspondre au nom de domaine pour lequel vous souhaitez un certificat.
Depuis quelques années maintenant, le subjectAltName doit être obligatoirement renseigné et correspondre exactement à tous les noms DNS utilisés par le certificat.
La commande suivante permet de vérifier les informations de la csr
$ openssl req -text -noout -in mondomaine.csr
Génération du certificat final
A l'aide de l'autorité de certification générée au tout début (ca.crt) et de sa propre clé privée, nous allons générer le certificat correspondant à la demande (mondomain.csr) générée ci-dessus.
$ openssl x509 -req -in mondomaine.csr -out mondomaine.pem -CA ca.crt -CAkey mykey.pem -CAcreateserial -CAserial ca.srl -days 90
L'option -CAcreateserial est à utiliser seulement la première fois.
Ceci va générer un identifiant (ca.srl).
Lors des prochaines certification (pour renouvellement ou pour d'autres domaines) l'identifiant, contenu dans le fichier ca.srl, sera incrémenté à l'aide de l'option -CAserial ca.srl
Et sinon, pour tout faire d'un coup clé et certificat ainsi que toutes les infos du certificat:
$ openssl req -x509 -nodes -days 365 \
-newkey rsa:4096 -keyout ma_cle.key -out mon_certificat.crt \
-subj "/C=FR/ST=Pays de la Loire/L=Cholet/CN=mon certificat/emailAddress=bar@foo.fr" \
-addext "subjectAltName=DNS:mon-domaine.fr,DNS:www.mon-domaine.fr,IP:1.2.3.4"
La commande ci-dessus va donc générer une nouvelle clé (ma_cle.key) sans mot de passe (-nodes), un certificat valable 365 jours et contenant les infos renseignées avec les options -subj et -addext.
Avec l'option -addext, il est possible d'indiquer tous les noms DNS valables pour le certificat et les adresses IP si besoin.
Création d'un certificat auto-signé sous windows
Bonjour,
Super votre blog !
Voici une alternative plus simple que Open SSL pour créer des certificats auto-signés sous windows (Interface graphique français/anglais): Itiverba Self Signed Certificat Generator
Merci ...
... beaucoup pour le compliment.
Effectivement, la solution Itiverba semble intéressante.
Merci pour le partage d'information.