0 votes

Pourquoi est-ce que j'obtiens une erreur SSL sur mon portail captif ?

J'ai configuré un portail captif sur un point d'accès sans fil. Si j'utilise un ordinateur portable pour m'y connecter, celui-ci fait apparaître un navigateur me demandant de me connecter au portail captif. Je peux ouvrir n'importe quel navigateur sur l'ordinateur portable (IE, Chrome, Firefox) et cela fonctionne bien.

Avec mon Samsung Galaxy S8 (Android 9), lorsque je me connecte au point d'accès sans fil, Android vérifie automatiquement les portails captifs, comme le font tous les autres appareils de nos jours. Comme il le détecte, il fait également apparaître un navigateur et tente de charger la page de connexion, et sur mon téléphone, il affiche une erreur de certificat SSL. Les autres téléphones Android n'affichent pas cette erreur.

enter image description here

Si je dis à mon téléphone de rester connecté au WiFi bien que je ne sois pas connecté, et que j'ouvre Chrome sur mon téléphone, la même redirection vers le portail captif se charge sans aucun problème. Il est clair que quel que soit le navigateur interne de mon téléphone, il ne s'agit pas du navigateur Chrome normal, car celui-ci fonctionne bien. Il ne s'agit pas non plus de l'application "Internet" fournie avec mon téléphone, car elle ne présente pas non plus d'erreur SSL.

Quel navigateur mon Galaxy S8 utilise-t-il pour détecter les portails captifs ? Pourquoi une erreur SSL se produit-elle alors que les autres navigateurs et appareils n'en ont pas ? Comment puis-je commencer à déboguer cela ?

Remarque : mon certificat SSL a été généré par LetsEncrypt. Il pointe vers http://ocsp.int-x3.letsencrypt.org comme serveur pour vérifier que le certificat n'a pas été révoqué. J'ai ajouté ce domaine à la liste de contournement de mon portail captif, de sorte que les connexions à ce domaine ne soient PAS redirigées, mais cela n'a pas aidé.

1voto

John Points 111

Après une tonne de recherches, j'ai enfin trouvé la solution.

D'abord, un bref rappel : Le rôle du portail captif est d'intercepter toutes les requêtes vers Internet et de les rediriger vers la page de connexion du portail captif. Comme ma page de connexion est cprewrite.hyperlinkinc.ca, un site Web distant, j'ai dû l'ajouter à la liste blanche. Toute demande adressée à ce domaine sera effectivement mise en ligne. Cela fonctionne très bien.

Le problème est que lorsque l'utilisateur est redirigé vers cette page web, le HTML de la page web fait référence à des ressources externes. Ma page s'appuyait sur bootstrap pour un certain formatage css. Mon bootstrap était stocké localement, sur cprewrite.hyperlinkinc.ca, donc ce n'était pas un problème. Malheureusement, lorsque je lis le code source de bootstrap (bootstrap.min.css), l'une des premières lignes se lit comme suit :

*/@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");

Essentiellement, bootstrap fait référence à une ressource externe pour ses polices. Le Galaxy S8 essaie alors de charger cette ressource. Comme le lien est un lien HTTPS (et non HTTP), il s'attend à recevoir un certificat SSL pour fonts.googleapis.com. Comme fonts.googleapis.com ne figurait pas dans la liste blanche, mon portail captif redirigeait la demande vers lui-même, renvoyant son propre certificat SSL, au lieu du certificat attendu.

Certains navigateurs, comme le navigateur habituel Google Chrome sur Android, échouent simplement en silence. D'autres, comme ce navigateur In-App, échouent bruyamment et affichent un avertissement SSL.

Je ne suis pas encore tout à fait sûr de ce qu'est ce navigateur qui s'affiche lorsque des portails captifs sont détectés, mais la question est maintenant sans objet, puisque je sais pourquoi il n'a pas aimé ma page.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X