mod_ssl


Introduction
Installation de apache + mod_ssl en DSO
Génération de certificats

Introduction

mod_ssl est le module apache qui implémente https (http over ssl)

Il peut etre compilé en statique avec apache ou en module loadable dynamiquement (DSO)

Le serveur https écoute par défaut sur le port 443 au lieu de 80 et correspond a un virtual host configuré par des directives spécifiques à mod_ssl

Celles-ci permettent de configurer


Installation de apache + mod_ssl en DSO

La compilation se fera dans le répertoire /tmp/src. Créez-le à votre nom (mkdir /tmp/src) s'il n'existe pas. L'installation se fera dans le répertoire /home/ipa_01/«login»/TP_apache/apache_ssl

Note : le lanceur supporte 2 options, suivant qu'on lance le serveur HTTPS ou non

apachectl start --> lancement normal
apachectl startssl --> lancement avec support de https


Génération de certificats

La procédure d'installation de mod_ssl prevoit, via l'utilitaire src/support/mkcert.sh, plusieurs scenarii de génération du certificat du serveur :

Générations des différents objets

Dans le cas TYPE='custom', un certificat est généré et signe par le propre CA du serveur.

Les différents objets sont

Dans les actions effectuées, on distingue donc :

Celles concernant le CA

Celles concernant le serveur

Emplacement et manipulation des différents objets

Ces donnees sont rangées dans le repertoire conf et sont manipulables avec openssl

Exemple

Exemple : certificat du serveur

fichier conf/ssl.crt/server.crt



1. Moteur SSL

SSLEngine [on|off]

activation ou désactivation du moteur du protocole SSL/TLS

2. Cryptage des clefs privées et pass phrase

- un ou plusieurs Virtual Hosts SSL définis dans le fichier de conf de apache
- pour chacun d'entre eux, apache (au lancement) doit lire les certificats
  et les clefs privées

les clefs privées sont cryptées et decryptées au lancement par une
pass phrase fournie par l'administrateur

schéma de mémorisation/réutilisation des pass phrase :

pour chaque clef privée, toutes les pass phrases mémorisées sont essayées
pour ne pas avoir a les redemander

SSLPassPhraseDialog 

  builtin  : pass phrase demandée interactivement avant que apache se
	     détache du terminal
  exec:/path/to/program :

  program server:port [RSA|DSA] est appelé (vérifications de l'intègrité du 
  système) et retourne sur la pass phrase sur stdout

  
3. Génération de nombres aléatoires

Random seed fournit au PRNG (Pseudo Random Number Generator) de openssl

SSLRandomSeed

  builtin 

    (time, process id, IPC scoreborad)
    toujours utilisable (time, process id, ...)
    inconvenient : faible entropie

  file:/path/to/source [size]

    à utiliser avec /dev/random (risque de blocage si nb d'octet demandés
    non encore disponible) ou /dev/urandom

  utilisation de EGD (Entropy Gathering Daemon)
  dans ce cas file=egd-socket

  egd:/path/to/egd-socket (egd)
 
  exec:/path/to/program 

4. Cache de session

utilisation d'un cache global accessible de toutes les instances
pré-forkées de apache-SSL pour réutiliser les clés de session
(et éviter des handshakes inutiles lorsqu'un client demande plusieurs
documents en parallèle)

Mutex utilise pour l'accès en écriture du cache session

SSLMutex

  none : dangereux
  file:/path/to/mutex : fichier sur le filesystem (local!)
  sem : sémaphore SYS V IPC (le système doit le supporter)

Format du cache de session (synchronisation du cache local en RAM de openSSL)

SSLSessionCache

  none  : pas de cache
  dbm:/path/to/datafile : fichier au format dbm (hash)
  shm:/path/to/datafile[(size)] : table de hash de size octets dans un segment
				  de mémoire partage base sur datafile

Timeout (en secondes) pour les infos du cache

SSLSessionCacheTimeout


5. Controle d'accès

- Versions de protocole autorisées

SSLProtocol [+-] protocol ...

  SSLv2 : protocole original défini par netscape
  SSLv3 : successeur de v2 - standard
  TLSv1 : successeur de v3 par IETF
  All : équivalent a +SSLv2 +SSLv3 +TLSv1

- Interdiction des accès si HTTPS non utilisé

SSLRequireSSL (contexte directory ou .htaccess)

Conditions d'accès par expression régulière

- SSLRequire expression

6. Suite cryptographique négociable lors du handshake

Suite cryptographique négociable par le client lors du handshake

SSLCypherSuite cipher-spec

cypher-spec : chaine spécifiant un ensemble ordonne d'algorithmes issus
	      des 4 groupes suivants

  - algorithmes d'échange de clés (RSA, Diffie-Helmann)
  - algorithmes d'authentification (RSA, Diffie-Hellman, DSS ou none) 
  - algorithmes de cryptage (DES, Triple-DES, RC4, RC2, IDEA ou none)
  - algorithmes MAC (controle par digest - MD5, SHA or SHA1)

algorithmes indiqués par :

- flags, préfixes par la fonction (s'ils peuvent avoir plusieurs fonctions)
  k pour key-exchange (ex : kRSA)
  a pour authentification (ex: aRSA)
  e pour encoding (eNULL)

- ou alias désignant un ensemble ordonné d'algorithmes

  HIGH : tous les algos utilisant 3DES
  MEDIUM : tous les algos 128 bits
  LOW : 
  RSA
  TLSv1 
  ...

7. Certificats

7.1 certificat du serveur

Fichier contenant le certificat du serveur encode suivant la methode PEM
(base 64) et éventuellement la clef privée RSA ou DSA (pas une bonne idée)

SSLCertificateFile filename

Fichier contenant la clef privée encodée PEM

SSLCertificateKeyFile filename

7.2 certificats des CA

- Chaine de certificats des CA envoyés au client

Fichier contenant la chaine des certificats des CA du certificat du serveur

SSLCertificateChainFile filename

  certificats non-utilisés pour l'authentification du client, sauf s'ils
  sont présents dans SSLCACertificatePath ou SSLCACertificateFile
  
- Vérification du certificat du client

Répertoire contenant fichiers contenant les certificats encodés PEM
des CA du client

Ces fichiers sont accedés via une table de hash des noms de ces fichiers

SSLCACertificatePath directory

Fichier contenant les certificats concatenés des CA du clients

SSLCACertificateFile filename

7.3 Revocation des certificats

Repertoire contenant les CRL (Certificat Revocation List) encodés PEM des CA
des clients
Les fichiers sont accedés via des tables de hash (les noms sont des valeurs
de hash)

SSLCARevocationPath directory

SSLCARevocationFile

CRL concatenes

8. Authentification du client

SSLVerifyClient level

2 niveaux (parmi 4) ayant un sens dans la pratique :

  none
  require

Nombre max de certificat de CA du client que le serveur doit regarder
dans la chaine des certificats de CA avant d'en trouver un qu'il connait
(i.e. dans son SSLCACertificatePath ou SSLCACertificateFile), pouvant ainsi
valider le certificat du client

SSLVerifyDepth

9. Logs

Fichier de log

SSLLog filename

  dupliqués dans logs apache (ErrorLog)

filename non absolu : relatif à ServerRoot
filename = |prog : pipe dans prog

Niveau de log

SSLLogLevel level

  none : seulement messages d'erreur dans logs apache
  error : messages d'erreur seulement
  warn
  info
  trace
  debug

  
10. Options d'execution

SSLOptions


-> Retour à la page de garde <- Cours IN327 Adresse Olivier.Perret@ensta.fr Adresse Thomas.Hummel@devinci.fr