Voici un pense bête de quelques manipulations pouvant se révéler utiles lors de l’utilisation de certificat SSL et d’openssl :
Cas de figure : commande d’un certificat SSL auprès d’un fournisseur de certificat
Création du fichier de demande de certificat CSR (Certificat Signing Request) ainsi que de la clé privée (Private key) via openssl :
Voici la commande à saisir pour un certificat de 4096 bits en SHA2 (SHA 256 bits) :
openssl req -nodes -newkey rsa:4096 -sha256 -keyout ma_cle_privee_avec_mot_de_passe.key -out ma_demande_de_certificat.csr
Le processus va donc créer 2 fichiers :
- la clé privée (protégée par un mot de passe) au format .key -> il faudra conserver ce fichier
- la demande de certificat CSR au format .csr -> il faudra transmettre ce fichier au fournisseur pour qu’il puisse en retour générer le certificat SSL et nous le livrer.
Suivre le processus. Indiquer et confirmer un mot de passe pour la clé privée.
Générer ensuite le CSR en renseignant les champs demandés (Pays, Ville, Nom de l’entité, et le plus important : le Common Name (CN) = nom FQDN du site par exemple www.monsite.com)
Conserver à l’abri la clé privée, et envoyer / uploader / copier-coller le contenu du fichier CSR auprès de votre fournisseur, qui vous remettra/livrera en retour le certificat.
Chez certain fournisseur, le contenu du fichier CSR et précisé lors de la commande/validation du devis :
Bonjour,
Veuillez trouver ci-joint le devis validé pour 1 an avec ci-dessous les informations pour générer le CSR
Merci
informations:
Country Name (2 letter code): FR
State or Province Name (full name): Paris
Locality Name (eg, city): Paris
Organization Name (eg, company): TOTO SARL
Organizational Unit Name (eg, section): TOTO BOUTIQUE CHAMPS ELYSEE
Email Address: hostmaster@toto.com
Custom URL name: *.toto.com
Pour générer une clé privée à l’aide du chiffrage récent ECC (Ellyptical Curve Cryptography) au lieu de RSA, il va falloir exécuter les deux commandes suivantes pour générer d’abord votre clé privée ECC, puis ensuite votre demande CSR :
Génération de la clé privée ECC :
openssl ecparam -out private.key -name prime256v1 -genkey
Génération de la demande CSR :
openssl req -new -key private.key -out request.csr
Renouvellement d’un certificat déjà existant :
Pour renouveler un certificat qui arrive à expiration (ou révoqué pour raison de sécurité ou autre), il suffit généralement d’envoyer de nouveau le CSR si les informations sont identiques.
Pour générer de nouveau un fichier CSR avec une clé privée déjà existante :
openssl req -new -sha256 -key ma_cle_privee_avec_mot_de_passe.key -out ma_demande_de_certificat.csr
Commande utiles :
Retirer le mot de passe d’une clé privée :
Utile pour ne plus avoir besoin de saisir le mot de passe de la clé à chaque restart de apache / nginx :
openssl rsa -in privatekeywithpass.key -out privatekeywithoutpass.key
Fichier .pem :
Il s’agit de fichier contenant la clé privée, le certificat et éventuellement le ou les certificat(s) intermédiaire(s) dans le même fichier .pem
Le but est d’avoir tout les éléments du certificat dans un seul et unique fichier. Certain programmes comme pound réclame ce format.
Voici un exemple de .pem avec clé privée + certificat
-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDg MBQGCCqGSIb3DQMHBAgD1kGN4ZslJgSCBMi1xk9jhlPxPc 9g73NQbtqZwI+9X5OhpSg/2ALxlCCjbqvzgSu8gfFZ4yo+ A .... MANY LINES LIKE THAT .... X0R+meOaudPTBxoSgCCM51poFgaqt4l6VlTN4FRpj+c/Wc blK948UAda/bWVmZjXfY4Tztah0CuqlAldOQBzu8TwE7WD H0ga/iLNvWYexG7FHLRiq5hTj0g9mUPEbeTXuPtOkTEb/0 GEs= -----END ENCRYPTED PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiIMA0GCSqGSIb3Df BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVx aWRnaXRzIFB0eSBMdGQwHhcNMTExMjMxMDg1OTQ0WhcNMT A .... MANY LINES LIKE THAT .... JjyzfN746vaInA1KxYEeI1Rx5KXY8zIdj6a7hhphpj2E04 C3Fayua4DRHyZOLmlvQ6tIChY0ClXXuefbmVSDeUHwc8Yu B7xxt8BVc69rLeHV15A0qyx77CLSj3tCx2IUXVqRs5mlSb vA== -----END CERTIFICATE-----
Il suffit grossièrement de copier/coller le contenu des fichiers et le regrouper dans un nouveau fichier .pem
Tester / vérifier un certificat :
openssl s_client -connect www.facebook.com:443 -showcerts
Connaitre la date d’expiration / périodes de validité d’un certificat local ou distant en ligne de commande via openssl :
Pour connaitre la validité d’un certificat local :
openssl x509 -enddate -noout -in /etc/ldap/cacert.pem
Pour connaitre la validité d’un certificat distant :
echo | openssl s_client -connect www.monsite.com >/dev/null | openssl x509 -noout -dates
Cas de figure : création d’une autorité racine pour se générer des certificats auto signés :
Étape 1 : création de l’autorité
Génération d’une clé privée pour l’autorité de certification (autosigné) :
openssl genrsa 4096 -sha256 > private-ca.key
Génération de l’autorité avec une validité de 100 ans :
openssl req -new -x509 -days 36500 -key private-ca.key > ca.crt
Étape 2 : création du certificat auto signé
openssl genrsa 4096 -sha256 > private-autosigned.key
Génération de la demande CSR :
openssl req -new -key private-autosigned.key > www.monsite.com.csr
Étape 3 : signature du certificat par l’autorité et validité de 10 ans :
openssl x509 -req -days 3650 -in www.monsite.com.csr -out www.monsite.com.crt -CA ca.crt -CAkey private-ca.key -CAcreateserial -CAserial ca.srl