Hello,
Avec les navigateurs affichant sans arrêt des avertissements sur les champs mots de passe des sites HTTP, et l'arrivée de
Let's Encrypt, je suis en train de faire la bascule complètement HTTPS.
J'avais du HTTPS sur mes admins et certains sites, mais avec de l'auto-signé. L'échange est sécurisé, mais il faut accepter le certificat, pas utilisable pour le grand publique.
Let's Encrypt fournit gratuitement des certificats reconnus par les navigateurs, mais avec une courte date de validité (90 jours). Donc sur un server dédié avec une cron le renouvellement est simple. Pour de l'hébergement mutualisé ou gratuit bon courage.
Au final le problème n'a pas été la génération des certificats. Le script
certbot de l'EFF fonctionne bien. Le problème viens de ma config server (rien d'exceptionnel, mais pas celle d'un hébergement de base). J'ai un serveur Nginx qui gère le HTTPS et le statique (image, javascript...) et qui proxy le dynamique (php, cgi...) à Apache en HTTP.
Le problème c'est que beaucoup d'appli WEB comme GuppY, PiWiGo..., ne gère pas le fait d'être derrière un proxy.
- GuppY demandant l'url du site dans la config, c'est HTTP ou HTTPS mais pas les 2.
- PiWiGo gère beaucoup de liens en relatif, mais pour les liens absolus, il se croit en HTTP.
Niveau NGinx, pour que le maximum d'appli fonctionnent, j'ai du mettre dans la "location" :
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
Car certaines applications testent le protocole transmis par le proxy et d'autre le port (donc https sur autre que 443 c'est mort).
Pour faire fonctionner correctement PiWiGo et éviter les url HTTP renvoyées par l'API et certains plugins, j'ai du ajouter dans le fichier de config :
// | HTTPS behind proxy in HTTP
// +-----------------------------------------------------------------------+
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT']; //443;
}
Pour faire fonctionner correctement Webtrees et éviter les redirection 301 en boucle, j'ai du ajouter dans le fichier de includes/session.php :
// HTTPS behind proxy in HTTP
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT']; //443;
}