On a migré nos sites en full HTTPS !

Forum PHP 2017 - 26 octobre 2017

@srogier / srogier

Pour plus d'informations

Tapez "s" pour ouvrir les notes de présentation.

On a migré nos sites en full HTTPS !

Decitre.fr

L'équipe technique

  • 6 personnes
  • Nous gérons :
    • e-commerce B2C (decitre.fr et ses marques blanches)
    • e-commerce B2B (decitrepro.fr)
    • ORB, un outil de recherche bibliographique

Decitre.fr

Le site

  • 4,2 millions de pages vues par mois
  • 1,8 million de produits

HTTPS

HTTPS, c'est quoi ?

HTTP + TLS/SSL

  • Chiffrement des données
  • Authentification du serveur
  • Intégrité des données

TLS : Transport Layer Security
SSL : Secure Socket Layers

HTTPS, c'est quoi ?

60% des requêtes tous sites confondus dans Firefox

Source : Firefox Telemetry

Alertes de sécurité dans les navigateurs

Alertes de sécurité dans les navigateurs

Les enjeux de notre migration

  • Sécurité
  • Rassurance et confiance de nos clients
  • Performance Web
  • Positionnement Google

Nos contraintes

  • Éviter les coupures
  • Scénarios itératifs et réversibles
  • Site par site
  • Sans casser le SEO

SEO : Search Engine Optimization

HTTPS : comment ça marche ?

SSL puis TLS

SSL
  • v2 (1995)
  • v3 (1996)
TLS
  • v1.0 (1999)
  • v1.1 (2006)
  • v1.2 (2008)
  • v1.3 (brouillon)

TLS en détail

TLS en détail

TLS en détail

TLS en détail

2 A/R pour initialiser une connexion

TLS en détail

1 A/R pour restaurer une connexion

OpenSSL

  • Librairie open source
  • Outils de chiffrement
  • Implémente TLS

Les certificats

  • Norme X.509
  • Délivrés par une autorité de certification
  • Lient des informations à une clé publique

Les certificats

Typologie d'un certificat

Plusieurs types
  • DV - Domain Validation
  • OV - Organization Validation
  • EV - Extended Validation
Options
  • Multi-domaines
  • Wildcard (*.decitre.fr)

Validation des certificats

  • Validation en temps réel avec OCSP
  • Côté serveur avec l'OCSP Stapling

OCSP : Online Certificate Status Protocol

Let's Encrypt

  • Propose des certificats gratuits

Préparation de l'infra

Notre infra, avant

Établir la terminaison TLS

  • Conserver le cache Varnish ?
  • Trouver un outil pour gérer TLS
    • Hitch, NGINX, HAProxy
  • Et servir de reverse proxy

Notre infra, objectif

Modification de la configuration Varnish

Gestion par du cache par exclusion


if ( req.url ~ "^/(index.php/)?(vente|liste_souhait|avis|tunnel
    |compte_client|e-books/" ||
 req.url ~ "^/liste_souhait$" ||
 req.url ~ "^/contacts$" ||
 req.url ~ "^/rechercher/" ||
 req.url ~ "^/vente-flash/" ) {
     return (pass);
}
                

Modification de la configuration Varnish

  • Réécriture de la configuration
  • Inclusion au cas par cas
  • Maintenabilité et sécurité

Basculer HTTPS sur NGINX

https://mozilla.github.io/server-side-tls/ssl-config-generator

Basculer HTTPS sur NGINX

Valider le fonctionnement en production

Basculer HTTPS sur NGINX

Configuration et tests avec OpenSSL

echo '' | openssl s_client  -connect www.decitre.fr:443 -tlsextdebug

Basculer HTTPS sur NGINX

  • Bascule front par front

SSL Labs

Basculer vers du full HTTPS

Préparer la migration

S'inspirer des retours d'expérience

  • Yelp
  • A Little Market
  • Google
  • Stack Overflow

Liens disponibles sur https://srogier.fr/conferences/liens-migration-https.html

Détecter et corriger les Mixed Contents

Contenu non sécurisé sur des pages en HTTPS

Détecter et corriger les Mixed Contents

Utiliser HTTPS pour :
  • les images
  • les scripts externes
  • les iframes
  • ...
  • en fait, toutes les ressources appelées

Détecter et corriger les Mixed Contents

Si HTTPS n'est pas disponible ⇒ reverse proxy

server {
    listen 443 ssl http2;
    server_name aide-ebook.decitre.fr;

    [...]

    location / {
        proxy_pass http://aide-numerique.decitre.fr;
    }
}
                

Détecter et corriger les Mixed Contents

Nettoyage des contenus CMS
return preg_replace('~(src=[\'"]http):~', '$1s:', $cms);

CSP report

  • Content Security Policy
  • Filtrer les ressources utilisées sur le site

CSP report


Content-Security-Policy-Report-Only
    default-src 'self' https:;
    style-src 'unsafe-inline' 'self' https:;
    script-src 'unsafe-inline' 'unsafe-eval' 'self'  https:;
    img-src data: 'self' https:;
    report-uri https://monapi/csp_report
                    
https://github.com/nico3333fr/CSP-useful

Anticiper les besoins en certificats

Avant

  • www.decitre.fr
  • a.decitre.di-static.com et b.decitre.di-static.com

Après

  • www.decitre.fr
  • decitre.di-static.com

Adapter le Magento

  • Suppression de redirections forcées vers HTTP
  • Suppression d'URL en dur

Premiers tests en pré-production

  • Certificats gratuits à volonté avec Let's Encrypt
  • Validation du comportement global

Éviter la duplication de contenu

  • Contrôler les URL canoniques
  • Redirections 301 vers les pages HTTPS

Planification de la bascule

  • Site par site
  • 4 migrations sur deux semaines

Le jour J

Le jour J

  • Changement des URL
  • Vidage du cache

Le jour J

  • Activer les redirections

Le jour J

\o/

Le jour J

  • Création nouveau site dans Search Console

Le jour J

  • Nettoyage robots.txt
  • Nouvelles sitemaps
  • Portage de la configuration
  • Fetch And Render

Après la migration

Les ratés

  • Plus de IE8/WinXP :(

Activer HTTP/2

  • Compression des entêtes HTTP
  • Push de contenu
  • Multiplexage des requêtes

Activer HTTP/2


--- a/conf_nginx/www.decitre.fr.conf
+++ b/conf_nginx/www.decitre.fr.conf
@@ -1,5 +1,5 @@
 server {
-    listen 443 ssl;
+    listen 443 ssl http2;

     server_name www.decitre.fr;
                     

Activer HTTP/2

Pour Debian 8

  • Utiliser ALPN
  • Mettre à jour OpenSSL à partir des backports
  • Recompiler NGINX

Amélioration de la performance web ?

  • Légère augmentation du temps de réponse

Monitorer le trafic

  • Surveillance quotidienne
  • Répartition des codes retours HTTP

Crawl Google

Impact SEO

Nombre de sessions venant de Google équivalentes

mai 2016 vs mai 2017

juillet 2016 vs juillet 2017

hausse de 40 %

TLS, c'est lent ?

TLS has exactly one performance problem:
it is not used widely enough.
Everything else can be optimized.
Ilya Grigorik

https://istlsfastyet.com/

Pour aller plus loin

  • HSTS
  • TLS 1.3

Allez-y !

Des questions ?

https://joind.in/talk/70ae4

Retrouvez les différentes sources et outils mentionnés
https://srogier.fr/conferences/liens-migration-https.html

@srogier

Visuels utilisés