J'ai une instance EC2 avec Apache comme serveur Web (et Wildfly comme serveur d'application, même si je ne suis pas sûr que cela ait quelque chose à voir avec ce problème). Devant EC2, j'ai un équilibreur de charge qui termine HTTPS et applique le certificat SSL.
HTTP et HTTPS fonctionnent bien dans Chrome, mais malheureusement pas dans Safari. Accéder à http://test.papereed.com fonctionne bien, mais accéder à https://test.papereed.com donne l'erreur
"Safari can't open the page. The error is "The operation couldn't be completed. Protocol error" (NSPOSIXErrorDomain:100)"
J'ai regardé dans/etc/httpd/logs/error_log et/etc/httpd/logs/access_log et aussi dans la console Safari sans trouver aucune indication pour résoudre le problème. Et c'est à peu près jusqu'où mes connaissances vont :-( Tout indice sur la façon de suivre ce problème serait très apprécié.
curl (si compilé avec le support HTTP/2) présente le même problème mais montre la raison:
erreur http2: un champ d'en-tête HTTP non valide a été reçu: type de trame: 1, flux: 1, nom: [mise à niveau], valeur: [h2, h2c]
Il semble que votre serveur propose une mise à niveau vers HTTP/2 même si la connexion est déjà établie avec HTTP/2 - ce qui n'a aucun sens. Non seulement cela, il est explicitement interdit. De RFC 7540 section 8.1.2.2 :
Un point d'extrémité NE DOIT PAS générer un message HTTP/2 contenant des champs d'en-tête spécifiques à la connexion; tout message contenant des champs d'en-tête spécifiques à la connexion DOIT être traité comme mal formé (Section 8.1.2.6) .... champs d'en-tête spécifiques à la connexion, tels que Keep -Alive, Proxy-Connection, Transfer-Encoding et Upgrade
Il me semble un bug car Apache ne devrait pas envoyer cet en-tête avec HTTP/2.
Je suppose que vous avez une configuration comme celle-ci
Protocols h2 h2c http/1.1
Étant donné que les navigateurs ne prennent pas en charge HTTP/2 sans TLS de toute façon et qu'aucun en-tête de mise à niveau n'est nécessaire avec HTTP/2 sur TLS, je vous recommande de remplacer cette configuration par
Protocols h2 http/1.1
Cela désactive la prise en charge du protocole HTTP/2 inutile sans TLS mais devrait, espérons-le, se débarrasser de l'en-tête de mise à niveau de cette façon, car il n'est nécessaire que pour la mise à niveau de HTTP simple vers HTTP/2 standard.
EDIT: selon le commentaire de l'OP, changer la configuration Protocols
n'a pas aidé. Il était nécessaire de contourner explicitement ce comportement (c'est-à-dire bogue) de mod_http2
en supprimant l'en-tête Upgrade
:
Header unset Upgrade
Je pense que c'est un problème Safari plutôt qu'un problème AWS/SSL. La recherche de cette erreur obtient de très nombreux résultats sur Google.
Tout se vérifie avec le site Web selon les SSL Shopper test et SSL Labs Test .
J'ai trouvé cette solution possible au problème.
La solution consistait à aller dans les préférences de Safari, sous Confidentialité et à répertorier tous les détails. Cela a fourni un journal de tous les sites où des cookies, etc. avaient été utilisés. J'ai trouvé la page du domaine MétéoMédia et j'en ai effacé tout le contenu. J'ai ensuite pu recharger la page MétéoMédia sans aucun problème. Je suppose que cela fonctionnerait pour d'autres sites singuliers similaires.
Il y a aussi this qui pourrait être fait avec Apache.