Guide pratique openssl sous debian

12
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 "autosigné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.

description

 

Transcript of Guide pratique openssl sous debian

Page 1: Guide pratique openssl sous debian

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. 

Page 2: Guide pratique openssl sous debian

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é 

Page 3: Guide pratique openssl sous debian

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: 

Page 4: Guide pratique openssl sous debian

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

Page 5: Guide pratique openssl sous debian

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 : 

Page 6: Guide pratique openssl sous debian

Guide pr

Yahya.ch

Maintecertificaprise à 

On génè

Il en rés

Un certdans  leserveur

Une  clMessag

  Envalablesserveurd'accep

Voilà, v

ratique : Open

[email protected]

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 

Page 7: Guide pratique openssl sous debian

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. 

 

Page 8: Guide pratique openssl sous debian

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 : 

Page 9: Guide pratique openssl sous debian

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 

Page 10: Guide pratique openssl sous debian

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. 

Page 11: Guide pratique openssl sous debian

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  

 

 

 

 

 

Page 12: Guide pratique openssl sous debian

Guide pr

Yahya.ch

Déroul

s

 

 

 

 

ratique : Open

[email protected]

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