Archives de mots clés: SSL

Rustine pour un serveur Web antédilluvien

Pas facile de maintenir un serveur qui tourne depuis presque 10 ans sur une vénérable Debian Etch … Cela fait bien longtemps qu’il n’y a plus de mises à jour de sécurité pour cette distribution. Il héberge une application critique: un serveur Sympa qui gère pas loin de 1500 listes de diffusion. Heureusement, ce dernier est installé à partir des sources et n’est pas complètement à la ramasse.

Cependant, les failles s’accumulent, notamment du côté du serveur Apache et surtout d’OpenSSL. Certaines peuvent être colmatées avec un peu de configuration, par contre il est impossible de corriger la faille CRIME en l’état: la version d’Apache est trop ancienne pour permettre la désactivation de la compression TLS. Enfin la version d’OpenSSL supporte, au mieux TLS 1.0 …

J’ai essayé deux solutions:

  • Passer le service derrière un reverse-proxy Nginx => impossible de faire fonctionner correctement le CGI de Sympa avec le SSO Cas !
  • Remplacer Apache par Nginx / fcgi-wrapper => effets de bord indésirables …

Troisième et dernière solution: compiler et installer Apache + OpenSSL + fastcgi sans écraser les composants déjà présents sur le système.

Quelques contraintes à respecter:

  • Rester en Apache 2.2.x
  • Passer à OpenSSL >= 1.x.x (support de TLSv1 et TLSv2)
  • Lien statique entre OpenSSL et Apache
  • Les module ne sont pas intégrés à Apache (sauf OpenSSL)
  • Conserver mod_fastcgi (fastcgid poserait des problèmes)
  • Conserver mod_security
  • Quelques coups de lime pour compiler des vieux machins avec du neuf (OpenSSL v1.0.2e) !

Reste ensuite à ré-écrire la configuration d’Apache (récupérer celle du serveur d’origine n’est pas un bonne idée) et debugger petit à petit.

La rustine permettra de tenir 2 ou 3 mois, en attendant la prochaine Ubuntu LTS (16.04), pour la migration sur la dernière version de Sympa (encore une procédure bien compliquée …).

=> Procédure de compilation le Wiki.

Installer Nginx et OpenSSL (compilé en statique)

Cette procédure permet d’installer une version récente de “Nginx” en intégrant une version également récente d’OpenSSL (compilée en statique) sur une vieille distribution Debian ou Ubuntu (plus maintenue / obsolète).

Il s’agit d’une rustine qui permet de contourner les failles des implémentation obsolètes d’OpenSSL:

  • améliorer la sécurité SSL/TLS lorsque la mise à jour d’Apache ou de libSSL est difficile voire impossible,
  • remplacer un vieux serveur Apache 2 / OpenSSL (pas de mise à jour possible) par un frontal Nginx configuré en reverse-proxy.

La mise en oeuvre nécéssite quelque modifications de configuration:

  • désactiver l’écoute sur https/433 du serveur Apache,
  • changer le port d’écoute http/80 Apache (par exemple http/8080),
  • configurer Nginx en reverse-proxy / mandataire SSL
    • écoute sur http/80 => “redirect temporary” vers https/443
    • écoute sur https/443 => reverse-proxy vers http/8080 assuré par le serveur Apache.

Cette procédure ne casse pas les paquets et les librairies installés sur la machine (libSSL est compilée en statique avec Nginx).

Cette procédure a été écrite pour Debian Lenny (5.0).

Procédure sur le Wiki

Installer Nginx à partir du code source

Le script suivant permet d’installer automatiquement la version la plus récente de “Nginx” et de profiter des dernières innovations telles que le protocole HTTP/2.

  • Installation préalable du paquet “nginx-light” pour bénéficier de l’arborescence Debian,
  • Téléchargement du code source,
  • Compilation et installation:
    • intégration du module externe “header more” qui permet de jouer avec toutes les entêtes HTTP,
    • options de compilation: HTTP/2, SSL, IPv6, WebDav.

Cette procédure a été écrite pour Ubuntu 14.04 LTS.

Procédure sur le Wiki