Table des matières
Une CA «maison» avec OpenSSL
Sans aller jusqu'à réaliser une PKI complète, nous allons réaliser une autorité de certification auto-signée. Elle permettra de réaliser des certificats au format X509 à usage interne uniquement bien sûr. L'objectif étant surtout ici de comprendre le mécanisme. Tout va se faire avec les privilèges «root»
Nous commençons par créer un répertoire de travail:
mkdir /democa cd /democa
Le certificat de l'autorité
Réalisation d'une clé privée
Il faut une clé privée, propriété exclusive de la CA. C'est elle qui permettra de signer les certificats que notre CA va émettre. Créons une clé ECDSA (Elliptic Curve Digital Signature Algorithm) de 256 bits :
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out democa.key
La clé privée ne doit pouvoir être lue que par «root». Les bons droits ont été normalement attribués. Si ce n'est pas le cas:
chown <root>:<root> democa.key chmod 600 democa.key
Réalisation de la clé publique
Créons maintenant un certificat X509 qui va contenir la clé publique associée à notre CA. Ce certificat servira aux clients de la CA de vérifier que les certificats demandés sont bien authentiques (chiffrement avec la clé privée = signature, déchiffrement au moyen de la clé publique pour authentifier la signature).
openssl req -key democa.key -new -x509 -days 3650 -addext keyUsage=critical,keyCertSign,cRLSign -subj "/CN=myca" -out democa.crt
Ce sertificat sera valide depuis sa date de création et pour une durée de 3650 jours soit en gros en peu moins de 10 ans.
Le certificat devra être communiqué à tous les clients potentiels, qui devront l'ajouter à leur liste de confiance. Ici, tout dépendra de la distribution GNU/Linux. Sur Debian, le paquet ca-certificates
installe et maintient les autorités de certification connues du système. Il y en a un peu partout:
/etc/ssl/certs
contient les certificats des CA officielles et mondialement connues,/usr/share/ca-certificates/
contient des certificats proposés par la fondation Mozilla/usr/local/share/ca-certificate
par défaut ne continent rien, mais il est possible ici d'ajouter le certificat de notre CA interne
Pour que notre CA interne puisse être connue des clients potentiels, il faut sur chaque client:
- copier le certificat de notre CA dans
/usr/local/share/ca-certificates/
- exécuter la commande
update-ca-certificates
Ceci doit répondre quelque chose du genre:
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Les demandes de certificats
une PKY digne de ce nom propose à ses clients une interface permettant de construire leur requête. Le but étant ici de faire la preuve du concept, l'administrateur construira lui-même la requête pour ses clients. La construction d'un CSR («Certificat Signing Request»,demande de signature de certificat) ne nécessite aucun privilège particulier.
Création de sa clé privée
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out MyPrivate.key
Création de la CSR
openssl req -key MyPrivate.key -new -out MyCert.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. # Suit donc une liste de questions: ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:PACA Locality Name (eg, city) []:Marseille Organization Name (eg, company) [Internet Widgits Pty Ltd]:experiences diverses Organizational Unit Name (eg, section) []:informatique Common Name (e.g. server FQDN or YOUR name) []:monserveur.mondomaine.tld Email Address []:sysop@mondomaine.tld Please enter the following 'extra' attributes to be sent with your certificate request Nous allons nous en passer... A challenge password []:Cette entrée est obsolète. Laisser vide An optional company name []: Nous allons aussi nous en passer...Dans le répertoire de travail, nous retrouvons:
ls -l total 12 -rw-rw-r-- 1 user user 570 2 juin 18:54 MyCert.csr -rw------- 1 user user 241 2 juin 18:48 MyPrivate.keyLe créateur de la requête peut en vérifier le contenu:
openssl req -in MyCert.csr -noout -text Certificate Request: Data: Version: 1 (0x0) Subject: C=FR, ST=PACA, L=Marseille, O=experiences diverses, OU=informatique, CN=monserveur.mondomaine.tld, emailAddress=sysop@mondomaine.tld Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:47:57:1c:53:be:22:87:2f:95:bc:4a:de:9a:98: ff:4e:96:83:e8:70:eb:20:c8:c4:ac:ff:72:f4:94: 2f:13:a3:d5:11:e4:81:3b:42:06:54:f5:78:03:55: 38:60:31:7f:f9:4e:31:79:35:43:fe:ea:37:e2:22: ac:d5:07:91:9a ASN1 OID: prime256v1 NIST CURVE: P-256 Attributes: (none) Requested Extensions: Signature Algorithm: ecdsa-with-SHA256 Signature Value: 30:44:02:20:2e:e5:52:58:27:c4:9b:2c:0d:78:ce:3d:76:56: 88:5b:90:6b:ea:e9:8a:e3:4d:bb:9d:f9:63:a3:b9:f4:2a:19: 02:20:23:49:1a:10:c1:24:5b:5e:80:b2:76:62:85:17:5b:d4: 00:0f:0a:1a:b9:75:20:89:ec:9c:a3:aa:6b:2c:ad:5c
Demande de certification
Il faut maintenant transmettre le CSR à notre CA pour qu'elle la signe. Privilèges «root» nécessaires, puisque le certificat doit être signé avec la clé privée de la CA, qui n'est utilisable que par «root».
openssl x509 -req -in MyCert.csr -CA /democa/democa.crt -CAkey /democa/democa.key -days 365 -out MyCert.crt
Certificate request self-signature ok La CA octroie un certificat valide pour 365 jours. Cette durée ne peut dépasser la date de validité du certificat de la CA, pour des raisons évidentes.
L'utilisateur dispose alors de la possibilité de vérifier son certificat:
openssl x509 -in MyCert.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
71:de:eb:c1:51:34:6a:3b:19:a5:7b:6a:33:d9:e2:f9:e3:b4:60:97
Signature Algorithm: ecdsa-with-SHA256
Issuer: CN=myca
Validity
Not Before: Jun 5 15:21:19 2025 GMT
Not After : Jun 5 15:21:19 2026 GMT
Subject: C=FR, ST=PACA, L=Marseille, O=experiences diverses, OU=informatique, CN=monserveur.mondomaine.tld, emailAddress=sysop@mondomaine.tld
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:47:57:1c:53:be:22:87:2f:95:bc:4a:de:9a:98:
ff:4e:96:83:e8:70:eb:20:c8:c4:ac:ff:72:f4:94:
2f:13:a3:d5:11:e4:81:3b:42:06:54:f5:78:03:55:
38:60:31:7f:f9:4e:31:79:35:43:fe:ea:37:e2:22:
ac:d5:07:91:9a
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Subject Key Identifier:
A4:5B:99:F9:76:DB:89:33:AB:08:20:A9:FC:19:17:D8:70:62:3E:53
X509v3 Authority Key Identifier:
F6:7D:5C:47:14:06:B4:A3:B1:EE:F8:A2:A6:0F:0C:8F:59:79:06:C6
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:45:02:20:6c:05:b4:ef:0d:52:a9:89:d1:ae:4f:8b:89:a9:
d4:b8:44:42:75:ab:77:0e:4a:40:6c:fd:6f:ee:02:68:a2:43:
02:21:00:d1:a2:4c:83:8f:3c:d9:fd:c5:61:c0:8a:40:8d:9f:
8a:49:e6:3b:e9:21:69:a9:90:6a:3c:f5:8a:d5:ea:e9:25
La CA a apposé son cachet à la requête, en y ajoutant principalement un numéro de série, l'identité de la CA et la durée de validité.
L'utilisateur peut désormais utiliser SSL/TLS pour sa messagerie, son site web, en produisant son certificat, validé par une CA, pour permettre le déchiffrement de la signature. Mais ici, le système ne restera opérationnel qu'au sein de l'entreprise. Pour un usage sur l'internet, il faut faire signer sa requête par une PKI officielle.