Upload
yahyaf10
View
3.260
Download
7
Embed Size (px)
DESCRIPTION
Citation preview
Guide pratique : Openssl
[email protected] | ESR Master 1 1
Guide pratique : Comment sécuriser l’accès au site via
Introduction
Pour sécuriser une connexion à un serveur web (https), nous avons besoin d'un certificat. Dans une première approche (adopter dans ce guide) il est possible d'utiliser des certificats dits "auto‐signés". Générés très facilement, ils sont très pratique pour développer et tester un site sécurisé mais beaucoup moins s'agissant d'une utilisation régulière et publique, principalement à cause des avertissements de sécurité qu'ils génèrent sur l'application cliente. L'autre option est alors d'acheter un certificat auprès d'un tiers de confiance(CA). Certificat qui vous permettra à votre tour d'en générer d'autres qui cette fois seront acceptés sans erreur.
Quelques bases
Avant d’entrer dans le vif du sujet, précisons quelques bases, dès que l'on souhaite mettre en œuvre une connexion cryptée par SSL pour Apache (HTTPS), il est nécessaire d'avoir un certificat. Ce certificat installé sur le serveur contient une paire de clef qui va permettre aux deux parties de mettre en place un échange chiffré. Une des informations échangée à ce stade est une autre clef qui va servir quant à elle à chiffrer, par un algorithme dit "symétrique", le reste de la communication. La raison de ce changement de clef tient à ce que le chiffrement asymétrique est plus demandeur en ressources, mais aussi plus sécurisé, que sa contrepartie symétrique. Ce protocole permet en quelque sorte d'arriver au meilleur des deux mondes.
Un certificat peut très facilement être généré en utilisant les outils du paquet openssl. Mais pour qu'un certificat serveur soit déclaré valide sur le client il doit répondre à trois règles, et tout manquement à l'une de ces règles entraîne l'affichage d'un message d'avertissement sur le navigateur client.
A travers ce guide, vous allez apprendre à monter un serveur web sécurisé sous Debian, Nous allons commencer par l’installation, puis nous créerons une Autorité de Certification (AC) pour que le serveur puisse gérer des certificats.
Guide pratique : Openssl
[email protected] | ESR Master 1 2
1. Le certificat doit contenir le nom du site qu'il sécurise (ex. www.mon_site.fr). Si ce n'est pas le cas, le navigateur protestera que le certificat ne provient pas de la bonne adresse.
2. Le certificat doit contenir une signature fiable. Si ce n'est pas le cas, certain navigateurs se contenterons de pleurer un peu, d'autres, comme FireFox, bloquera l'accès avec une signature invalide
3. Le certificat doit être signé par un AC (Autorité de Certification) ou par un certificat qui lui‐même est signée par un AC.
SSL
Le protocole SSL (Secure Socket Layer) a été créé par Netscape pour sécuriser les transactions entre les serveurs web et les outils de navigation. Il a recours à un tiers, l'autorité de certification (CA/CertificateAuthority) qui identifie n'importe laquelle des extrémités ou les deux.
Openssl
Pour créer nos certificats, nous utilisons l’outil de cryptographie Openssl qui sert à :
‐ Créer une Authorité de Certification pour un serveur ‐ Chiffrer des données entre une application serveur et une application cliente (http, vpn, etc.) ‐ Chiffrer et déchiffrer des fichiers sur un disque ‐ Identifier des machines clientes auprès de serveurs ‐ Plus encore...
Plateforme
OS :Debian‐6.0.3
Serveur web :Apache +module sslactivé
Applications de cryptographie :Openssl‐0.9.8
Pour mener bien ce guide vous devez au préalable préparer votre machine serveur en installant Debian, Apache,Openssl et le module modssl d’apache, vous voyez que c’est simple il faut juste cocher lors d’installation de Debian « Serveur web »comme ça vous allez avoir un serveur web qui tourne bien, n’oubliez pas qu’il est possible d’installer ces outils un par un et les configurer par la suite ,mais pourquoi réinventer la roue si Debian nos propose d’installer un serveur dans les options d’installation avec le module ssl il faut juste l’activé
Guide pratique : Openssl
[email protected] | ESR Master 1 3
.
Après la fin de l’installation du système, on passe à la vérification des prérequis d’abord le serveur web, pour vérifier le serveur web tapez l’url ou @ip de votre serveur sur le navigateur de votre choix et examinez le résultat qui doit être identique à cela :
Apache doit également être installé avec le module de SSL. Il reste que l’activation de ce dernier, plus tard on va voir comment, précisément dans l’étape de configuration d’apapche2.
Vous pouvez vérifier le paquet Openssl avec la requête apt‐cache search <paquet>:
Ou directement avec la commande openssl:
Guide pratique : Openssl
[email protected] | ESR Master 1 4
Si elle montre que la commande n'existe pas, alors vous devez le télécharger et l’installer
Etape1 : Création de l’infrastructure CA
Créez les dossiers destinés à contenir le certificat:
/etc/ssl/ : répertoire de configuration général de openssl créé lors de l’installation
/etc/ssl/ca/ : répertoire qui contient les fichiers de l'AC /etc/ssl/ca/newcerts/ : répertoire qui contient les certificats signés par l'AC
L’étape suivante consiste à créer la base de données pour les certificats prochainement crée et signé,en effet la base de données est composées de 2 fichiers :
Le fichier index.txt liste tous les certificats qui ont été signé.
Le fichier serial contient le prochain numéro de série disponible, étant donné que nous venons de mettre en place l’autorité le prochain numéro de série sera le 1,ce numéro sera incrémenté à chaque nouveau certificat
Etape2 : Génération du certificat racine CA
Il faut d’abord créer le fichier de configuration du CA (openssl.cnf)pour qu'il ressemble à ça :
# # OpenSSL configuration file. # # Establish working directory. dir = . [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/cacert.pem private_key = $dir/private/cakey.pem
Guide pratique : Openssl
[email protected] | ESR Master 1 5
default_days = 365 default_md = md5 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 1024 # Size of keys default_keyfile = key.pem # name of generated keys default_md = md5 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name req_extensions = v3_req [ req_distinguished_name ] # Variable name Prompt string #---------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #------------------------------ ------------------------------ 0.organizationName_default = EcoleESRmi localityName_default = Rabat stateOrProvinceName_default = Rabat countryName_default = MR [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always [ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash
Un ls de notre dossier à ce stade donne l’aperçu suivant :
Guide pr
Yahya.ch
Maintecertificaprise à
On génè
Il en rés
Un certdans leserveur
Une clMessag
Envalablesserveurd'accep
Voilà, v
ratique : Open
nant que lat racine dupartir du ce
ère le certif
sulte deux f
tificat de CAs browsers r.
lé privée ge)cette clé
importants en tant qur, votre napter la conn
ous avez m
nssl
com | ESR Ma
e fichier du CA, à notee fichier.
ficat CA ave
fichiers:
A racine cades clients
(privateé est deman
t le certificue CA pouravigateur nexion sécur
aintenant u
aster 1
de configurer que la p
ec la comm
acert.pems qui auront
e/cakey.pndée lors de
at cacertr le navigatene sera plurisée.
une autorité
ration est clupart des i
ande suivan
m, est le cet besoin de
pem) (L'exe la signatu
t.pem sueur et chaqus montran
é de certific
créé il va information
nte :
ertificat racie faire des é
xtension "pure d’un no
r les browque fois quent la boîte
cation.
maintenantns qui iront
ine publiquéchanges sé
pem" est uveau certi
wsers, nous e le client see de dialog
t falloir génsur le certi
ue qui sera écurisés ave
Privacy Enficat.
serions doe connectegue qui d
nérer le ficat est
importé ec notre
nhanced
onc plus à notre emande
6
Guide pratique : Openssl
[email protected] | ESR Master 1 7
Des clients peuvent vous soumettre des CSR que vous signerez (s'ils vous payent ! ☺)
Etape3 : Création d'une demande de signature de certificat (CSR) (CertificateSigningRequest)
À ce stade, nous avons un certificat racine valide, claire, pour créer des certificats non seulement pour https, mais SPOP, ou SIMAP ou créer d'authentification pour les connexions VPN.
Deux étapes à effectuer pour créer CSR:
• Créez une clé privée et la demande de certificat.
• Signez la demande et générer un certificat signé.
On génère la demande de certificat avec la commande suivante :
Une nouvelle demande de certificat implique de renseigner certaines informations demandée, remplissez‐les en adaptant ou laissez les paramètres par défaut du fichier de configuration sauf le champ "Common Name" qui doit être identique au nom d'hôte/@ip de votre serveur
• les deux lettres qui identifient le pays
• le nom de du pays.
• le nom de la ville.
• le nom de l’entreprise ou autre si particulier.
• le nom du site.
• l’adresse mail de l’administrateur.
Guide pratique : Openssl
[email protected] | ESR Master 1 8
Les fichiers suivants donc été générés :
key.pem >> la clé privée
req.pem >> la demande de signature de certificat (CSR)
Nous pouvons voir le contenu de notre formulaire de demande dans un format plus lisible :
Etape 4 : La signature du certificat serveur par le CA (Certificate Autority)
La commande qui signe la demande de certificat est la suivante :
Guide pratique : Openssl
[email protected] | ESR Master 1 9
La procédure de signature met à jour la base de données du CA (le fichier index.txt, serial) elle crée aussi une copie de certificat dans newcerts/<serial>.pem
Le fichier index.txt contient les références des certificats créés par OpenSSL. Les enregistrements sont annotés avec un R pour indiquer que le certificat est révoqué, V qu'il est valide et E qu'il a expiré.
Après vous pouvez inspecter votre certificat:
Etape 5 : Configuration spécifique d'Apache2
Dans un premier temps il est nécessaire que le serveur apache écoute sur le port 443. Pour cela il suffit d’éditer le ficher /etc/apache2/ports.conf et vérifier que la ligne
Listen 443
y soit présente.
La meilleure manière de l’intégrer est de l’écrire de la sorte :
Ensuite il faut configurer le site que l’on veut mettre en place dans « /etc/apache2/site-
available/» Par défaut un site est configuré dans le fichier « default-ssl ». On peut l’adapter en fonction de la configuration souhaitée, mais au moins il faut que les directives
Guide pratique : Openssl
[email protected] | ESR Master 1 10
suivantes y soit présent (commentez avec le caractère dièse "#" toute référence à d’autres certificats :
Après activez le module ssl d’apache2 si n’est pas encore activé ;
Et redémarrez le serveur apache2 pour activer la nouvelle configuration ;
Voilà le serveur écoute sur le porte 443, il est nécessaire maintenant d'activer le site :
Et bien sûr que ça nécessite un restart encore une fois de notre serveur
En essayant maintenant à accéder à notre site qu’on vient de sécuriser avec https:// on obtient l’alerte suivante qu’indique que cette certificat est signée avec un CA qui ne figure pas parmi les AC racine de confiance, l’étape suivante explique comment importer le CA pour ne pas avoir cet alerte prochainement.
Guide pratique : Openssl
[email protected] | ESR Master 1 11
Etape 6 : Installation du certificat d'autorité de certification
Il faut maintenant installer le certificat de l'autorité de certification dans chaque navigateur client. C'est ce dernier qui va valider le certificat reçu par le client lors de la requête https://,
Pour cela "Arrangez‐vous" pour avoir le certificat (fichier cacert.pem) disponible à partir du client par la suite importer ce fichier sur le navigateur.
Une fois le fichier copié, suivre la procédure suivante :
Pour Internet Explorer :
‐ Allez dans le menu Outils / Options/Contenu/Certificats/importer
Pour Firefox :
‐ Outils/Options/Avancé/Afficher les certificats /Autorités/Importer
Guide pr
Yahya.ch
Déroul
s
ratique : Open
lement de
nssl
com | ESR Ma
es échange
Un navigatsécurisée (
Le serveur accompagn
Le navigateémis par unqu'il est toubien au site
Le serveur symétriqueclef de chiffl'URL et les
Le navigateserveur pousymétriqueweb avec l'données HT
Le serveur données HTsymétrique
Le navigatesymétrique
aster 1
es SSL
teur demand(en général h
web émet sanée de son c
eur vérifie qune autorité dujours valide e en cours.
web déchiffr grâce à sa frement syms données HT
eur emploie lur chiffrer un aléatoire et 'URL demanTTP chiffrée
renvoie le doTTP chiffrée
eur déchiffre et affiche les
e une page whttps://)
a clef publiqucertificat
ue le certificae certificatioet qu'il se ra
re la clef de cclef privée eétrique pourTTP.
la clef publiqne clef de chi
l'envoie au sdée et divers
es.
ocument htmes avec la cle
l'ensemble as information
web
ue
at a été n racine,
apporte
chiffrement et utilise la r récupérer
ue du ffrement serveur ses
ml et les ef
avec la clef ns.
12