Post

http2_et_diffie-hellmann

http2_et_diffie-hellmann

http2_et_diffie-hellmann

http/2

L’enjeu du protocole HTTP/2 est de réduire le temps de téléchargement des pages, en permettant la parallélisation des requêtes.

http/2

Compilé nginx pour une version qui accepte le http2 (Nginx (compilation), PHP5 et PHP7 ,MariaDb )
Mise en place du nouveau binaire nginx

1
2
3
4
5
6
7
8
9
10
11
    sudo -s
    # Arrêt et sauvegarde binaire nginx 1.6.2  
    systemctl stop nginx
    mv /usr/sbin/nginx nginx1.6.2
    # copie du nouveau binaire nginx
    cp /usr/share/nginx/sbin/nginx /usr/sbin/
    # relance
    systemctl start nginx
    # Vérification version
    nginx -V
    nginx version: nginx/1.13.8

Il faut interdire la mise à jour par dpkg ou apt des paquets nginx
Liste des paquets concernés

1
dpkg -l |grep nginx
1
2
3
root@xeuyakzas:/home/yak# sudo dpkg -l |grep nginx
ii  nginx-common                       1.6.2-5+deb8u4                   all          small, powerful, scalable web/proxy server - common files
ii  nginx-extras                       1.6.2-5+deb8u4                   amd64        nginx web/proxy server (extended version)

Les paquets nginx-common et nginx-extras ne doivent pas faire l’objet d’une mise à jour

1
2
3
  sudo -s
  echo "nginx-common hold" | dpkg --set-selections
  echo "nginx-extras hold" | dpkg --set-selections

Pour avoir la liste des paquets bloqués

1
dpkg --get-selections | grep hold
1
2
nginx-common					hold
nginx-extras					hold

Utiliser le protocole HTTP/2

HTTP/2 (supporté depuis la version nginx 1.9.5) va vous permettre de gagner du temps au niveau des états d’attente car plusieurs ressources pourront être directement déchargées dans le même flux de réponse HTTP.
Afin de vous assurer que HTTP/2 est bien activé sur votre serveur, je vous invite à taper nginx -V afin de vous assurer que vous disposiez bien de l’option de compilation –with-http_v2_module ainsi qu’à vérifier que votre version d’OpenSSL utilisée par nginx est récente.

Il vous suffit simplement de spécifier dans l’attribut listen que vous souhaitez utiliser : « http2 »

1
2
3
4
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ...
1
2
nginx -t
systemctl restart nginx

Passage http/2 de tous les fichiers conf

find /etc/nginx -name "*.conf" -type f -exec sed -i "s#443 ssl;#443 ssl http2;#g" {} \;

Clé Diffie-Hellman

Générer une clé Diffie-Hellman

1
sudo openssl dhparam -out /etc/ssl/private/dh4096.pem -outform PEM -2 4096  

Clé sous /etc/ssl/private ,propriétaire et droits

1
2
sudo chown root.ssl-cert /etc/ssl/private/dh4096.pem   
sudo chmod 640 /etc/ssl/private/dh4096.pem  

Modifier les fichiers de configuration des différents domaines activer Diffie-Hellmann ssl_dhparam /etc/ssl/private/dh4096.pem;

find /etc/nginx -name "*.conf" -type f -exec sed -i "s:#ssl_dhparam /etc/ssl/private/dh2048.pem;:ssl_dhparam /etc/ssl/private/dh4096.pem;:g" {} \;

Vérifier syntaxe
sudo nginx -t
Recharger nginx
sudo systemctl reload nginx

Cet article est sous licence CC BY 4.0 par l'auteur.