1. Guide pratique : Openssl
Guide pratique : Comment sécuriser
l’accès au site via
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.
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.
Yahya.charai@gmail.com | ESR Master 1 1
2. Guide pratique : Openssl
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é
Yahya.charai@gmail.com | ESR Master 1 2
3. Guide pratique : Openssl
.
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:
Yahya.charai@gmail.com | ESR Master 1 3
4. Guide pratique : Openssl
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
Yahya.charai@gmail.com | ESR Master 1 4
5. Guide pratique : Openssl
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 :
Yahya.charai@gmail.com | ESR Master 1 5
6. Guide pr
ratique : Open
nssl
Maintenant que le fichier d configur
de ration est créé il va maintenant falloir gén
c t nérer le
at racine du
certifica u CA, à noteer que la plupart des i information ns qui iront sur le certificat est
prise à partir du ce
e fichier.
On génè
ère le certif
ficat CA ave
ec la commande suivan
nte :
Il en rés
sulte deux f
fichiers:
Un certtificat de CA
A racine ca
acert.pem ertificat raci
m, est le ce ine publiqu
ue qui sera importé
dans les browsers des clients
s qui auront
t besoin dee faire des ééchanges sé
écurisés ave
ec notre
serveurr.
Une cl privée (private
lé e/cakey.p pem) (L'ex xtension "p
pem" est Privacy En
nhanced
Messagge)cette clé
é est deman
ndée lors de
e la signatu
ure d’un nouveau certificat.
En important le certificat cacert
t t.pem sur les browwsers, nous serions do plus
onc
valables s en tant quue CA pourr le navigate
eur et chaq
que fois que
e le client se
e connecte à notre
serveur votre na
r, avigateur n sera plu montran la boîte de dialog
ne us nt e gue qui demande
d'acceppter la connexion sécur risée.
Voilà, vous avez maintenant u
une autorité
é de certific
cation.
Yahya.ch
harai@gmail.c
com | ESR Ma
aster 1 6
7. Guide pratique : Openssl
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.
Yahya.charai@gmail.com | ESR Master 1 7
8. Guide pratique : Openssl
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 :
Yahya.charai@gmail.com | ESR Master 1 8
9. Guide pratique : Openssl
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
Yahya.charai@gmail.com | ESR Master 1 9
10. Guide pratique : Openssl
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.
Yahya.charai@gmail.com | ESR Master 1 10
11. Guide pratique : Openssl
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
Yahya.charai@gmail.com | ESR Master 1 11
12. Guide pr
ratique : Open
nssl
Déroul
lement de échange SSL
es es
s
Un navigatteur demande une page web
w
sécurisée ( général h
(en https://)
Le serveur web émet sa clef publiqu
a ue
accompagn de son c
née certificat
Le navigate vérifie qu le certifica a été
eur ue at
émis par un autorité de certification racine,
ne
qu'il est tou
ujours valide et qu'il se ra
apporte
bien au site en cours.
e
Le navigate emploie l clef publique du
eur la
serveur pou chiffrer un clef de chiffrement
ur ne
symétrique aléatoire et l'envoie au serveur
s
web avec l''URL demandée et divers ses
données HT TTP chiffrée
es.
Le serveur web déchiffr la clef de chiffrement
re c
symétrique grâce à sa clef privée et utilise la
e
frement symétrique pour récupérer
clef de chiff r
l'URL et les données HT
s TTP.
Le serveur renvoie le do
ocument htm et les
ml
données HTTTP chiffrée avec la cle
es ef
symétrique
Le navigate déchiffre l'ensemble avec la clef
eur a
symétrique et affiche les information
s ns.
Yahya.ch
harai@gmail.c
com | ESR Ma
aster 1 12