4 242
modifications
(25 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 25 : | Ligne 25 : | ||
* basicConstraints | * basicConstraints | ||
<div id="pathlen"></div> | ** <div id="pathlen"></div>pathlen : profondeur de la clé, c''est-à-dire, le nombre de certificats pouvant apparaître sous le certificat en question (on parle de chaine de certification). Cette directive est capitale si vous souhaitez mettre en place une chaine de certification avec plusieurs autorités de certification (AC). La dernière autorité de la chaine devrait avoir une profondeur de 0 (c'est l'autorité qui sera chargée de délivrer les certificats clients et serveurs). | ||
** CA : TRUE pour une autorité, FALSE pour un certificat serveur ou client. | ** CA : TRUE pour une autorité, FALSE pour un certificat serveur ou client. | ||
* keyUsage | * keyUsage | ||
Ligne 78 : | Ligne 77 : | ||
touch /etc/ssl/root_ca/index.txt | touch /etc/ssl/root_ca/index.txt | ||
touch /etc/ssl/core_ca/index.txt | touch /etc/ssl/core_ca/index.txt | ||
touch /etc/ssl/root_ca/serial | |||
touch /etc/ssl/core_ca/serial | |||
</pre> | </pre> | ||
Ligne 88 : | Ligne 87 : | ||
<pre> | <pre> | ||
openssl_conf = default_conf | |||
[ ca ] | [ ca ] | ||
#Cette section nous permet de définir l'autorité de certification par défaut. | #Cette section nous permet de définir l'autorité de certification par défaut. | ||
Ligne 102 : | Ligne 102 : | ||
private_key = $dir/private/root_ca.key | private_key = $dir/private/root_ca.key | ||
default_days = 3650 | default_days = 3650 | ||
default_md = | default_md = sha256 | ||
preserve = no | preserve = no | ||
policy = policy_match | policy = policy_match | ||
#unique_subject = no # Set to 'no' to allow creation of several certs with same subject. | |||
#l'autorité de certification intermédiaire valable 10 ans | #l'autorité de certification intermédiaire valable 10 ans | ||
Ligne 116 : | Ligne 117 : | ||
private_key = $dir/private/core_ca.key | private_key = $dir/private/core_ca.key | ||
default_days = 3650 | default_days = 3650 | ||
default_md = | default_md = sha256 | ||
preserve = no | preserve = no | ||
policy = policy_match | policy = policy_match | ||
#unique_subject = no # Set to 'no' to allow creation of several certs with same subject. | |||
</pre> | </pre> | ||
Ligne 145 : | Ligne 147 : | ||
<pre> | <pre> | ||
[ req ] | [ req ] | ||
default_bits = | default_bits = 4096 | ||
distinguished_name = req_distinguished_name | distinguished_name = req_distinguished_name | ||
string_mask = utf8only | |||
[ req_distinguished_name ] | [ req_distinguished_name ] | ||
Ligne 174 : | Ligne 177 : | ||
challengePassword_max = 20 | challengePassword_max = 20 | ||
unstructuredName = An optional company name | unstructuredName = An optional company name | ||
</pre> | |||
<pre> | |||
[default_conf] | |||
ssl_conf = ssl_sect | |||
[ssl_sect] | |||
system_default = system_default_sect | |||
[system_default_sect] | |||
MinProtocol = TLSv1.2 | |||
CipherString = DEFAULT@SECLEVEL=2 | |||
</pre> | </pre> | ||
Ligne 198 : | Ligne 213 : | ||
==Création de l'autorité root== | ==Création de l'autorité root== | ||
===V1=== | |||
Maintenant nous pouvons créer le certificat de l'autorité de certification : | Maintenant nous pouvons créer le certificat de l'autorité de certification : | ||
<pre> | <pre> | ||
cd /etc/ssl/root_ca/ | cd /etc/ssl/root_ca/ | ||
openssl req -x509 -config /etc/ssl/openssl.cnf -newkey rsa: | openssl req -x509 -config /etc/ssl/openssl.cnf -newkey rsa:8192 -sha256 -extensions ROOT_CA -days 3650 -keyout private/root_ca.key -out root_ca.pem | ||
</pre> | </pre> | ||
Ligne 207 : | Ligne 224 : | ||
* req permet de créer des des demandes de certificats. | * req permet de créer des des demandes de certificats. | ||
* -x509 permet de créer un certificat auto-signé au lieu d'une simple demande de certificat. | * -x509 permet de créer un certificat auto-signé au lieu d'une simple demande de certificat. | ||
* -newkey rsa: | * -newkey rsa:8192 permet de créer la clé privée en même temps ; L'algorithme de chiffrement RSA est utilisé avec une clé de 8192 bits. | ||
* -extensions ROOT_CA spécifie qu'il faut utiliser la section [ROOT_CA] du fichier de configuration de openssl pour configurer le certificat. | * -extensions ROOT_CA spécifie qu'il faut utiliser la section [ROOT_CA] du fichier de configuration de openssl pour configurer le certificat. | ||
* -days 3650 permet de définir la durée de validité du certificat. Ici, 3650 jours. | * -days 3650 permet de définir la durée de validité du certificat. Ici, 3650 jours. | ||
Ligne 219 : | Ligne 236 : | ||
chmod -R 600 /etc/ssl/root_ca/private | chmod -R 600 /etc/ssl/root_ca/private | ||
</pre> | </pre> | ||
Nous allons ensuite initialiser le serial par un nombre aléatoire | |||
<pre>openssl x509 -serial -noout -in root_ca.pem | cut -d= -f2 > serial</pre> | |||
===V2=== | |||
<pre>openssl req -new -newkey rsa:2048 -keyout private/cakey.pem -out careq.pem -config /etc/ssl/openssl.cnf </pre> | |||
<pre>openssl ca -create_serial -out cacert.pem -days 365 -keyfile private/cakey.pem -selfsign -config /etc/ssl/openssl.cnf -infiles careq.pem </pre> | |||
-create_serial est important et permet d'initialiser un sérial aléatoire de 128 bits. | |||
Passer par ces deux commandes (plutôt que tout créer directement par <code>req</code>) est nécessaire car <code>req</code> ne supporte pas -create_serial | |||
see https://www.phildev.net/ssl/creating_ca.html | |||
==Création de l'autorité intermédiaire== | ==Création de l'autorité intermédiaire== | ||
Ligne 225 : | Ligne 257 : | ||
<pre> | <pre> | ||
cd /etc/ssl/core_ca | cd /etc/ssl/core_ca | ||
openssl req -newkey rsa: | openssl req -newkey rsa:8192 -sha256 -keyout private/core_ca.key -out core_ca.req | ||
</pre> | </pre> | ||
Puis on signe le certificat en utilisant la ca par défaut (défini dans le fichier openssl.cnf), c'est-à-dire, la CA_ROOT. | Puis on signe le certificat en utilisant la ca par défaut (défini dans le fichier openssl.cnf), c'est-à-dire, la CA_ROOT. | ||
Notez qu'on précise qu'il faut configurer ce nouveau certificat en utilisant la section CORE_CA du fichier de configuration. | Notez qu'on précise qu'il faut configurer ce nouveau certificat en utilisant la section CORE_CA du fichier de configuration. | ||
<pre> | <pre> | ||
openssl ca -extensions CORE_CA -in core_ca.req -out core_ca.pem | openssl ca -extensions CORE_CA -in core_ca.req -out core_ca.pem</pre> | ||
On génère le serial de core_ca | |||
<pre> | |||
openssl x509 -serial -noout -in core_ca.pem | cut -d= -f2 > serial | |||
</pre> | </pre> | ||
Enfin, on s'assure que la clé privée de cette nouvelle autorité est elle aussi à l'abri : | Enfin, on s'assure que la clé privée de cette nouvelle autorité est elle aussi à l'abri : | ||
Ligne 240 : | Ligne 276 : | ||
Pour générer la clé privé et la demande de certificat : | Pour générer la clé privé et la demande de certificat : | ||
<pre> | <pre> | ||
openssl req -newkey rsa: | openssl req -newkey rsa:4096 -sha256 -keyout cle-privee.key -out cle-publique.req | ||
</pre> | </pre> | ||
Puis on signe le certificat. L'option <code>-name</code> permet de préciser qu'il faut utiliser l'autorité <code<core_ca</code> pour signer notre nouveau certificat. | Puis on signe le certificat. L'option <code>-name</code> permet de préciser qu'il faut utiliser l'autorité <code<core_ca</code> pour signer notre nouveau certificat. | ||
Ligne 261 : | Ligne 297 : | ||
subjectAltName = DNS:www.server.com, DNS:webmail.server.com | subjectAltName = DNS:www.server.com, DNS:webmail.server.com | ||
basicConstraints = critical,CA:FALSE | basicConstraints = critical,CA:FALSE | ||
keyUsage = digitalSignature, nonRepudiation, keyEncipherment | keyUsage = critical, digitalSignature, nonRepudiation, keyEncipherment | ||
nsCertType = server | nsCertType = server | ||
extendedKeyUsage = serverAuth | extendedKeyUsage = serverAuth | ||
Ligne 268 : | Ligne 304 : | ||
Attention cependant, lors de la génération du certificat, pensez à définir le <code>commonName</code> à www.server.com | Attention cependant, lors de la génération du certificat, pensez à définir le <code>commonName</code> à www.server.com | ||
On génère la clé privé et la demande de certificat | On génère la clé privé et la demande de certificat : | ||
<pre> | <pre> | ||
openssl req -newkey rsa: | openssl req -newkey rsa:4096 -sha256 -keyout cle-privee.key -out cle-publique.req | ||
</pre> | </pre> | ||
Puis on signe le certificat. L'option <code>-name</code> permet de préciser qu'il faut utiliser l'autorité <code>core_ca</code> pour signer notre nouveau certificat | Puis on signe le certificat. L'option <code>-name</code> permet de préciser qu'il faut utiliser l'autorité <code>core_ca</code> pour signer notre nouveau certificat : | ||
<pre> | <pre> | ||
openssl ca -name core_ca -extensions SERVER_SSL -in cle-publique.req -out certificat.pem | openssl ca -name core_ca -extensions SERVER_SSL -in cle-publique.req -out certificat.pem | ||
Ligne 288 : | Ligne 324 : | ||
subjectAltName = critical,email:copy,email:root@server.com,email:admin@server.com | subjectAltName = critical,email:copy,email:root@server.com,email:admin@server.com | ||
basicConstraints = critical,CA:FALSE | basicConstraints = critical,CA:FALSE | ||
keyUsage = digitalSignature, nonRepudiation | keyUsage = critical,digitalSignature, nonRepudiation | ||
nsCertType = client | nsCertType = client | ||
extendedKeyUsage = clientAuth | extendedKeyUsage = clientAuth | ||
Ligne 294 : | Ligne 330 : | ||
La génération du couple de clé repose sur le même principe que pour un serveur. | La génération du couple de clé repose sur le même principe que pour un serveur. | ||
=Révoquer un certificat= | |||
Identifiez le certificat dans le fichier <code>/etc/ssl/core_ca/index.txt</code>. Par exemple, pour révoquer le certificat qui a l'identifiant 03 : | |||
<pre>openssl ca -revoke /etc/ssl/core_ca/newcerts/03.pem</pre> | |||
=Compatibilité avec la bibliothèque de certificats des distributions Linux= | |||
Placez le certificat de votre CA dans /etc/ssl/certs/myca.pem puis lancez les commandes suivantes : | |||
<pre>cd /etc/ssl/certs/ | |||
chmod o+r myca.pem | |||
ln -s myca.pem `openssl x509 -hash -noout -in myca.pem`.0 | |||
cd | |||
</pre> |