Skip to content →

Étiquette : Serveur Web

Perfect Forward Secrecy pour Apache

Lors de l’utilisation d’un protocole comme SSL/TLS pour le chiffrement et la sécurisation des données sur des réseaux non sûrs, il est important de garantir la confidentialité totale des communications, même en cas de capture du trafic chiffré.

TLS n’est en effet pas un protocole unique, mais une multitude de briques permettant la sécurisation des échanges, grâce à :

  • L’authentification du serveur (et optionnellement du client). On utilise en général un certificat x509v3 délivré par une autorité de certification.
  • La confidentialité des données, en utilisant les suites de chiffrement disponibles dans les CipherSpecs.
  • L’intégrité des donnés, en utilisant des fonctions de hachage disponibles dans les CipherSpecs.

Un des problèmes de TLS est que pour que cela fonctionne, il faut bien un clé master symétrique définie dans l’étape client key exchange. Heureusement, celle-ci est chiffrée par la clé publique du certificat serveur, empêchant sa lecture par un tiers autre que le serveur.

Un des problèmes est que si l’on récupère la clé master et la clé privée du serveur, même à postériori, il est techniquement possible (même si cela n’est pas à la porté de quiconque !) de déchiffrer l’ensemble d’une capture du trafic par exemple. On perd ainsi la confidentialité des données transmises, ce qui n’est pas acceptable pour un protocole de sécurisation de données. Quand on connait les impacts potentiels de la faille HeartBleed, on se rend compte que l’obtention de la clé privée est possible (même si encore une fois, cela reste une attaque très complexe et non garantie, cela reste possible et envisageable).

Afin d’éviter cela, nous allons utiliser la propriété Perfect Forward Secrecy, qui va faire appel à des suites de chiffrement basées sur les échanges de clé DH (au lieu de RSA) qui ne sont pas faillibles (en théorie) à ce principe, car les clés échangées sont éphémères et signées. Cette propriété permet d’éviter le déchiffrement à postériori d’une capture, même en possession de la clé privée du serveur. Attention, ceci est vrai si le groupe DH est suffisamment grand et valide, et uniquement sur des communications antérieures à l’obtention de la clé privée.

Il est possible de renforcer ce mécanisme de Perfect Forward Secrecy en utilisant la cryptographie basée sur des courbes elliptiques (ECDHE pour l’échange de clés éphémères, et ECDSA pour l’authentification du serveur), réputée plus sûre que la cryptographie par factorisation.

Par exemple, sur le logiciel Apache, on peut utiliser les CipherSuites suivantes pour renforcer la sécurité de nos échanges basés sur TLS :

# Activation du mod_ssl dans Apache
SSLEngine on

# On désactive SSLv2 et SSLv3 pour n'utiliser que TLS v1.x
SSLProtocol all -SSLv2 -SSLv3

# Au lieu de préférer les suites du client (mécanisme par défaut), on privilégie les suites proposées par le serveur
SSLHonorCipherOrder on

# On propose les suites avec ECDHE, ECDSA uniquement pour PFS
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
 
# On autorise les clients non compatibles SNI à accéder à ce vhost
SSLStrictSNIVHostCheck on

# Certificat, clé et chîne de certification
SSLCertificateFile      /etc/ssl/certs/cert_beufa.net.cert
SSLCertificateKeyFile   /etc/ssl/private/cert_beufa.net.key
SSLCertificateChainFile /etc/ssl/certs/CAcert_chain.pem

Ces options sont bien sûr à activer avec précaution en cas de forte charge sur vos serveurs Apache. En effet, la baisse de performances liées à l’usage de la propriété Perfect Forward Secrecy entraîne des baisses de performances importantes, de l’ordre de 15% à 20% en fonction de la longueur des clés et CipherSpecs utilisés.

Comments closed

Installation de mailpile et de RainLoop

Après recherche de solutions remplaçant un Roundcube pour mon webmail perso, je suis tombé sur plusieurs projets :

  • MailPile, un webmail python, en cours de développement
  • RainLoop, un webmail PHP/Ajax, qui semble plus fini

 

Installation de RainLoop

L’installation de RainLoop est assez simple :

cd /var/www/html/rainloop/
find . -type d -exec chmod 777 {} ;
find . -type f -exec chmod 666 {} ;
wget -qO- http://repository.rainloop.net/installer.php | php

Ensuite, il suffit de créer un vhost sur votre apache (ici en SSL sur myhost.beufa.net) :

<VirtualHost *:443>
        ServerAdmin postmaster@beufa.net
        ServerName  myhost.beufa.net
        DocumentRoot /var/www/html/rainloop
        SSLEngine on
        SSLCipherSuite ALL:!ADH:RC4+SHA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
        SSLProtocol all -SSLv2
        SSLStrictSNIVHostCheck on
        SSLOptions StrictRequire
        SSLCertificateFile      /etc/ssl/certs/myhost.cert
        SSLCertificateKeyFile   /etc/ssl/private/myhost.key
        #GnuTLSEnable on
        #GnuTLSPriorities SECURE:!ANON-DH:!MD5
        #GnuTLSCertificateFile cert.pem
        #GnuTLSKeyFile cert.pem
        #GnuTLSCertificateChainFile cert.pem
        #GnuTLSCACertificatePath /

        <Directory /var/www/html/rainloop>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        <Directory /var/www/html/rainloop/data>
                Options -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Deny from all
        </Directory>

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        ErrorLog /var/log/httpd/myhost.beufa.net/error_log
        CustomLog /var/log/httpd/myhost.beufa.net/access_log combined

</VirtualHost>

Et vous obtiendrez alors le webmail après une configuration sur https://myhost.beufa.net/?admin (Le login / mot de passe par défaut est admin :: 12345, il faut donc le changer !)

Une version de démonstration est disponible ici : http://rainloop.net/try-now/

Installation de MailPile

MailPile est encore en développement, et honnêtement, ca a l’air loin d’être fini. Curieux, j’ai quand même gratter pour l’installer :

# Installation des dépendances (suivant votre système, ici en CentOS 6.5)
yum install python-imaging python-jinja2 python-lxml python-devel python-pip python-setuptools

# Clone git du repository github
cd /opt/
git clone https://github.com/pagekite/Mailpile.git 
cd Mailpile

# Installation des dépendances pip (upgrade de jinja2 pour éviter l'erreur sur les templates)
pip install -r requirements.txt
pip install jinja2 --upgrade

# Setup de Mailpile
./mp --setup

# On ajoute un compte et son dossier de stockage
./mp --set "profiles.0.email = mymail@beufa.net"
./mp --set "profiles.0.name = My Name FirstName"
./mp --add /opt/vmail/mymailhost.net/myname/  --rescan all

# On démarre le démon www
./mp --www

Le démon écoutant sur localhost et le port 33441, le plus simple est de créer un Reverse Proxy Apache pour le test :

<VirtualHost *:443>
        ServerAdmin postmaster@beufa.net
        ServerName  myhost.net
        #DocumentRoot /var/www/html/mailpile
        SSLEngine on
        SSLCipherSuite ALL:!ADH:RC4+SHA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
        SSLProtocol all -SSLv2
        SSLStrictSNIVHostCheck on
        SSLOptions StrictRequire
        SSLCertificateFile      /etc/ssl/certs/myhost.net.cert
        SSLCertificateKeyFile   /etc/ssl/private/myhost.net.key
        #GnuTLSEnable on
        #GnuTLSPriorities SECURE:!ANON-DH:!MD5
        #GnuTLSCertificateFile cert.pem
        #GnuTLSKeyFile cert.pem
        #GnuTLSCertificateChainFile cert.pem
        #GnuTLSCACertificatePath /

        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>

        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / http://localhost:33411/
        ProxyPassReverse / http://localhost:33411/

        <Location />
                Order allow,deny
                Allow from all
        </Location>
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        ErrorLog /var/log/httpd/myhost.net/error_log
        CustomLog /var/log/httpd/myhost.net/access_log combined

</VirtualHost>

Vous pouvez alors tester sur le vhost reverse proxy ainsi créé. Par contre, par encore de formulaire d’authentification, ce qui fait que votre mail est accessible “all around the world” ! Protégez l’interface à minima avec un htaccess ou une authentification basique dans le vhost.

En résumé

RainLoop semble un produit fini, mais il y a certaines choses manquantes :

  • Pas d’import possible des contacts
  • Fonctionnalités et configuration très très basiques
  • Gestion des threads de conversation limitée et pas forcément pratique
  • Pas d’affichage des headers mail comme sur Roundcube
  • Pas de vérification des sous dossiers IMAP

Pour MailPile, même si le projet est prometteur (Support OpenPGP, chiffrement des pièces jointes …), il manque encore :

  • Un formulaire d’authentification !!!
  • Une interface d’administration à minima comme sur RainLoop
  • La gestion des dossiers IMAP
  • Un produit fini et utilisable tout simplement.

Je vais suivre donc ce dernier plus spécifiquement, RainLoop me semblant agréable pour l’instant en plus de RoundCube, que je garde pour l’usage avancé (gestion des filtres Sieve/ManageSieve). La bonne nouvelle de ces 2 projets est qu’ils supportent tous les deux mon serveur Dovecot / Postfix avec SASL pour IMAPS et SMTP/STARTTLS.

Bref, deux produits intéressants à suivre !

2 Comments

Auto héberger son RSS Reader, part 2

Après vous avoir indiquer comment installer Tiny Tiny RSS pour auto héberger son ex futur Google Reader, voici quelques retours et aperçus.

Pour ce qui est de la home, rien de plus classique :

Tiny Tiny RSS HomePage
Tiny Tiny RSS HomePage

Mais ça remplit son rôle et ça fournit quelques options en plus de Google Reader (et en moins) :

  • ++ Quand on clique sur “marquer tous comme lus”, on passe directement à la catégorie suivante qui permet de lire en bloc des articles (j’avoue ne pas tout lire dans mes RSS, juste survoler les titres dans certaines catégories).
  • + La fenêtre qui s’affiche ouvre un volet de lecture façon Outlook qui n’est pas déplaisant. Cependant comme la majorité des RSS ne publient pas des flux de données entiers, il est irréaliste de pouvoir l’utiliser vraiment.
  • – L’affichage “Magic” marche beaucoup moins bien, les articles sont parfois désordonnés en terme de polling (i.e. des articles sont plus vieux, mais non lus, mais apparaissent plus tard dans le désordre, en fonction du polling php)
  • — En comparaison, j’ai l’impression que je perds certains flux, mais au moins je sais ceux qui ne marchent pas/plus (erreur 404 ou autre, l’appli propose directement de le supprimer ^^)

La version mobile est sympa aussi, mais pas pratique avec mes systèmes d’authentification à moi (authentification Basic Apache pour mon serveur web chez moi et monocompte Reader).

Tiny Tiny RSS Mobile Web
Tiny Tiny RSS Mobile Web

Une version Android est quand même plus pratique.

Tiny Tiny RSS Reader for Android
Tiny Tiny RSS Reader for Android

Perso j’apprécie cette application web et elle me parait aussi simple que d’utiliser mon Google Reader et chez moi.

J’ai quand même quelques soucis encore avec le polling des RSS, mais en se résolvant, ça devrait me permettre de gagner en confort et de supprimer les – et — affichés plus haut 😉

 

Comments closed
fr_FRFR
en_USEN fr_FRFR