« Installation et configuration de OpenSSL » : différence entre les versions

Aller à la navigation Aller à la recherche
 
(34 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:serveur]]
[[Category:serveur]]
[[Category:debian]]
[[Category:debian]]
[[Category:security]]
Protéger les données qui transitent au travers des différents protocoles peut parfois être primordial. Le chiffrement le plus utilisé actuellement est SSL. Le principe de SSL est basé sur l'utilisation de deux clés : une clé publique qui sert à déchiffrer et une clé privée qui sert à chiffrer (on parle de chiffrement asymétrique). La clé privée doit rester confidentielle alors que la clé publique peut-être transmise sans problème à tous le monde.
Protéger les données qui transitent au travers des différents protocoles peut parfois être primordial. Le chiffrement le plus utilisé actuellement est SSL. Le principe de SSL est basé sur l'utilisation de deux clés : une clé publique qui sert à déchiffrer et une clé privée qui sert à chiffrer (on parle de chiffrement asymétrique). La clé privée doit rester confidentielle alors que la clé publique peut-être transmise sans problème à tous le monde.
La validité des clés publiques est assurée par une autorité de certification.
La validité des clés publiques est assurée par une autorité de certification.
Ligne 13 : Ligne 14 :


Pour installer openssl utilisez aptitude :
Pour installer openssl utilisez aptitude :
<pre>aptitude install openssl</pre>
<pre>apt install openssl</pre>


Attention : certains paquets peuvent avoir besoin d'accéder au fichier <code>/etc/ssl/openssl.cnf</code> (c'est par exemple le cas de bind9 depuis une mise à jour de sécurité). Veillez donc à ce que ce fichier reste accessible en lecture pour other.
Attention : certains paquets peuvent avoir besoin d'accéder au fichier <code>/etc/ssl/openssl.cnf</code> (c'est par exemple le cas de bind9 depuis une mise à jour de sécurité). Veillez donc à ce que ce fichier reste accessible en lecture pour other.
Ligne 25 : Ligne 26 :


* basicConstraints
* basicConstraints
** <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).
** <div id="pathlen"></div>pathlen : profondeur de la clé, c'est-à-dire, le nombre d'autorité de certficiation (AC) pouvant apparaître sous le certificat en question (on parle de chaîne de certification). Cette directive est importante si vous souhaitez mettre en place une chaîne de certification avec plusieurs autorités de certification. Une AC avec une pathlen de 0 ne peut qu'être utilisée pour signer des certificats utilisateurs/serveurs et pas une autre AC.
** 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 87 : Ligne 88 :


<pre>
<pre>
HOME            = .
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 101 : Ligne 105 :
private_key    = $dir/private/root_ca.key
private_key    = $dir/private/root_ca.key
default_days    = 3650
default_days    = 3650
default_md      = sha256
default_md      = default
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.
name_opt        = ca_default
cert_opt        = ca_default


#l'autorité de certification intermédiaire valable 10 ans
#l'autorité de certification intermédiaire valable 10 ans
Ligne 115 : Ligne 122 :
private_key    = $dir/private/core_ca.key
private_key    = $dir/private/core_ca.key
default_days    = 3650
default_days    = 3650
default_md      = sha256
default_md      = default
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.
name_opt        = ca_default
cert_opt        = ca_default
</pre>
</pre>


Ligne 144 : Ligne 154 :
<pre>
<pre>
[ req ]
[ req ]
default_bits            = 2048
default_bits            = 4096
distinguished_name      = req_distinguished_name
distinguished_name      = req_distinguished_name
string_mask            = utf8only


[ req_distinguished_name ]
[ req_distinguished_name ]
Ligne 173 : Ligne 184 :
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 182 : Ligne 205 :
authorityKeyIdentifier          = keyid,issuer:always
authorityKeyIdentifier          = keyid,issuer:always
basicConstraints                = critical,CA:TRUE,pathlen:1
basicConstraints                = critical,CA:TRUE,pathlen:1
keyUsage                        = keyCertSign, cRLSign
keyUsage                        = critical, keyCertSign, cRLSign
nsCertType                      = sslCA, emailCA
subjectAltName                  = email:copy
issuerAltName                  = issuer:copy


[CORE_CA]
[CORE_CA]
Ligne 190 : Ligne 216 :
authorityKeyIdentifier          = keyid,issuer:always
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                  = issuer:copy
issuerAltName                  = issuer:copy
keyUsage                        = keyCertSign, cRLSign
keyUsage                        = critical, keyCertSign, cRLSign
nsCertType                      = sslCA
nsCertType                      = sslCA, emailCA
subjectAltName                  = email:copy
issuerAltName                  = issuer:copy
</pre>
</pre>


Ligne 197 : Ligne 225 :


==Création de l'autorité root==
==Création de l'autorité root==
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:4096 -sha256 -extensions ROOT_CA -days 3650 -keyout private/root_ca.key -out root_ca.pem
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 206 : Ligne 235 :
* 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:4096 permet de créer la clé privée en même temps ; L'algorithme de chiffrement RSA est utilisé avec une clé de 4096 bits.
* -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.
* -sha256 : utilisé sha256 pour la signature (c'est le défaut, sha1 étant déprécié)
* -extensions ROOT_CA spécifie qu'il faut utiliser la section [ROOT_CA] (en majuscule !) 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.
* -keyout défini le chemin où sera stocké la clé privée.
* -keyout défini le chemin où sera stocké la clé privée.
Ligne 221 : Ligne 251 :
Nous allons ensuite initialiser le serial par un nombre aléatoire  
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>
<pre>openssl x509 -serial -noout -in root_ca.pem | cut -d= -f2 > serial</pre>
'''Editez ensuite le fichier <code>serial</code> et incrémentez le.''', sinon votre premier certificat aura le même serial que le certificat racine.
===Méthode alternative===
(non recommandée)
<pre>openssl req -new -newkey rsa:8196 -keyout private/root_ca.pem -out root_ca.req -config /etc/ssl/openssl.cnf </pre>
<pre>openssl ca -rand_serial -extensions ROOT_CA -out root_ca.pem -days 3650 -keyfile private/root_ca.pem -selfsign -config /etc/ssl/openssl.cnf -infiles root_ca.req</pre>
-rand-serial est important et permet d'initialiser un sérial aléatoire de 128 bits.


==Création de l'autorité intermédiaire==
==Création de l'autorité intermédiaire==
Ligne 227 : Ligne 269 :
<pre>
<pre>
cd /etc/ssl/core_ca
cd /etc/ssl/core_ca
openssl req -newkey rsa:4096 -sha256 -keyout private/core_ca.key -out core_ca.req
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 ROOT_CA, et on précise qu'il faut configurer ce nouveau certificat en utilisant la section CORE_CA du fichier de configuration.<br>
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 génère un serial aléatoire pour le certificat intermédiaire.
<pre>
<pre>
openssl ca -extensions CORE_CA -in core_ca.req -out core_ca.pem</pre>
openssl ca -rand_serial -extensions CORE_CA -in core_ca.req -out core_ca.pem
</pre>


On génère le serial de core_ca
On génère le serial de core_ca dans /etc/ssl/core_ca/serial
<pre>
<pre>
openssl x509 -serial -noout -in core_ca.pem | cut -d= -f2 > serial
openssl x509 -serial -noout -in core_ca.pem | cut -d= -f2 > serial
</pre>
</pre>
'''Editez ensuite le fichier serial et incrémentez le''', sinon votre premier certificat aura le même serial que le certificat racine.
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 :
<pre>
<pre>
Ligne 246 : Ligne 292 :
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:2048 -sha256 -keyout cle-privee.key -out cle-publique.req
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 254 : Ligne 300 :


Pour que les clients (http, mail, ftp, ...) reconnaissent comme valide les certificats que vous signez avec votre AC il faut ajouter le fichier <code>/etc/ssl/root_ca/root_ca.pem</code> (et <code>/etc/ssl/core_ca/core_ca.pem</code> si votre serveur est mal configuré) à leur liste d'autorité de certification valide.
Pour que les clients (http, mail, ftp, ...) reconnaissent comme valide les certificats que vous signez avec votre AC il faut ajouter le fichier <code>/etc/ssl/root_ca/root_ca.pem</code> (et <code>/etc/ssl/core_ca/core_ca.pem</code> si votre serveur est mal configuré) à leur liste d'autorité de certification valide.
Par exemple, pour firefox, il faut aller dans l'onglet <code>Avancé</code> de la configuration, sélectionner l'onglet <code>Chiffrement</code>, cliquer sur <code>Afficher les Certificats</code>, sélectionner l'onglet <code>Autorités</code> et cliquer sur <code>Importer</code> pour importer son certificat.


=Générer des certificats serveurs=
=Générer des certificats serveurs=
Ligne 267 : Ligne 312 :
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 276 : Ligne 321 :
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:2048 -sha256 -keyout cle-privee.key -out cle-publique.req
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 294 : Ligne 339 :
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 305 : Ligne 350 :
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 :
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>
<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>
=Génération de certificats ECDSA=
<pre>openssl ecparam -list_curves</pre>
Les 2 courbes les plus supportées sont prime256v1 et secp384r1
<pre>openssl ecparam -name prime256v1 -out prime256v1.pem</pre>
Puis à la génération de la clé, il faudra préciser :
<pre>-newkey ec:prime256v1.pem</pre>
4 231

modifications

Menu de navigation