divers:openssl

Openssl

Openssl est un utilitaire en ligne de commande efficace pour gérer ses propres certificats. Il existe d'autre utilitaire comme XCA. Voila quelques utilisations possible.

Pour authentifier un serveur, il faut un certificat valide c'est à dire un document contenant la description du serveur (notamment son identifiant et ses noms alternatifs) ainsi que sa clef publique et une signature d'une autorité de certification.

  • La commande suivante permet de générer une clef secrète pour le serveur (2048 bits) :
openssl genrsa -out server.key 2048
  • La commande suivante permet de générer la requête de signature à envoyer à l'autorité :
openssl req -config openssl.cnf -nodes -new -key server.key -out server.csr

Ici le fichier openssl.cnfest un fichier de configuration. Il est important qu'il contiennent, en plus des valeurs par défaut, les informations sur les noms alternatifs (les différents nom que peut prendre votre machine). Cela signifie que :

  • Dans la section [ req ] de ce fichier, il faut ajouter une extension :
[ req ]
...
req_extensions	= v3_req
  • Il faut alors une section [ v3_req ] contenant au moins :
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
  • Enfin, il faut une section [ alt_names ] avec les noms alternatifs voulus:
[ alt_names ]
DNS.1 = premiernom.univ-lyon1.fr
DNS.2 = deuxiemenom.secu.univ-lyon1.fr
DNS.3 = troisiemenom.secu.univ-lyon1.fr
IP.1 = 172.18.0.2
IP.2 = ...

Bien surt, les champs DNS.* présentent les noms DNS, IP.* les adresses IPs …

Attention, il est préférable que le le CN soit aussi répété dans les noms alternatifs.

Une fois la requête générée, vous pouvez la vérifier (voir section lecture) et la transmettre à une autorité de certificat qui va la signer.

Création d'un certificat autosigné :

openssl req -config ./openssl.cnf -new -x509 -keyout cakey.pem -out cacert.pem -days 3650

Cela crée une clef cacert.pem et un certificat cacert.pem qui pourra servir de Certificat d'autorité racine. Il sera valide 10 ans (3650 jours). La clef aura un mot de passe ce qui est conseillé dans ce cas. Si vous voulez éviter le mot de passe, il faut ajouter l'option -nodes

Le fichier openssl.cnf dans ce cas servira à connaitre les champs à remplir et leurs valeurs par défaut.

Signature d'une requête

Pour signer une requête il faut taper :

openssl ca -in server.csr -config ./openssl.conf

Cela produit un fichier server.crt qui contiendra le certificat. Attention, pour que les alternative names soient acceptés, il faut que la section [ default CA ] de openssl.cnf contienne :

[ CA_default ]
...
copy_extensions = copy

Un certificat, une clef ou un requête sont simplement formé par un paragraphe en base64 entre 2 lignes qui décrivent le contenu. Par exemple :

 
-----BEGIN CERTIFICATE REQUEST-----
MIIDxzCCAq8CAQAwgasxCzAJBgNVBAYTAkZSMR0wGwYDVQQIDBRSaG9uZS1BbHBl
cy1BdXZlcmduZTENMAsGA1UEBwwETHlvbjEMMAoGA1UECgwDVFBSMQ0wCwYDVQQL
CC6RaOwOoyoceMR+uMiWPORYmtqsnRfu24WDisNu2Sw8rCipOOCtm6FxylNZAxBt
21vfhPpFdF1Z0oKyajGCOea8bp2spz3YfBudQ4iOP/VpEw8FaWge33ifSJyJ3DBB
d96YQwDgqg+UP6fKptzq9O3Huy8yI/0DEMxhRY859Px1XPsfY31DRCyHj5Ppq+P0
pgYDVR0RBIGeMIGbgh9hdXRoLmdyb3VwZTEuc2VjdS51bml2LWx5b24xLmZygiFy
ZWxvYWQuZ3JvdXBlMS5zZWN1LnVuaXYtbHlvbjEuZnKCIm1hbmFnZXIuZ3JvdXBl
0XMY5DI42noZfH/Jqz218X1NV33DlOyN5pQPYA0VBLleODt0H822qQHdEa9NLuWr
inFlDmugu7wBPTJzyO4C87gZbhCC68jVT9dI3teuU51RAZPv+tGq1FJpAgMBAAGg
gdUwgdIGCSqGSIb3DQEJDjGBxDCBwTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DCB
MS5zZWN1LnVuaXYtbHlvbjEuZnKCIHRlc3QxLmdyb3VwZTEuc2VjdS51bml2LWx5
b24xLmZygglsb2NhbGhvc3SHBKwSAAIwDQYJKoZIhvcNAQELBQADggEBABQIIt9E
wahgSY7vB/cZ+8XZr5LYPLbTsCUjyBGiSh92iO8dhMUs/wBpTInW5XoF7dHkUL2c
9wgJj3oIkfKrvKo/1dhiJ5Rc83x+8n4S1Y/fI3UV+nnvCe5en8hZs+OBrdfR+PGE
zLz2kkvykpjYySp0ZAb/oRdnG04gnoR+17KDXheIEU5o1jPtDq/slDRS1NjHTDGY
siTqRotwtNTpeN23j146deO5FrLr/wrf/EDjS3EkI5829lo2j2uu0RAZpvGpDtW8
sPXFhgAO4MkCVQ1WTIx/FswLFtcu43Z2sn2pqi8xf6Xt3z5xmYAyVsAEps5S9RuU
CZssojdoGPcCa+s=
-----END CERTIFICATE REQUEST-----

Il est toujours utile de vérifier le contenu d'un certificat :

  • pour un certificat :
openssl x509 -in NOMFICHIER.crt -text
  • pour une requête :
openssl req   -in NOMFICHIER.csr -text
  • divers/openssl.txt
  • Dernière modification : 2018/01/08 00:54
  • de fabien.rico