Sans divulguer TROP d'informations, j'ai besoin de configurer un système de serveur Web destiné à être utilisé par les utilisateurs finaux sur Internet.
le cas d'utilisation est tel que:
Étant donné que le logiciel distribué sera un serveur Web unique sur la machine de chaque utilisateur individuel, je ne sais pas comment ni même si cela est possible, pour obtenir un certificat SSL SIGNÉ PAR UN TIERS qui ne causera pas d'erreurs de fiabilité lorsque l'utilisateur s'y connectera via le navigateur Web. Bien sûr, il peut utiliser des certificats SSL auto-signés, mais l'idée est d'éviter les avertissements du navigateur afin que les utilisateurs finaux "fassent confiance" implicitement aux données provenant de leur propre application exécutant son serveur Web via SSL.
Est-ce possible?
Vous ne recevrez jamais de certificat https approprié pour localhost. C'est strictement interdit . Parce que raisons .
En bref:
/etc/hosts
localhost.foo.local
cela peut entraîner une mauvaise résolution de localhost
(vous avez probablement déjà vu cette classe d'erreur auparavant)Vous pouvez créer un certificat racine et puis créer un certificat dit "auto-signé", signé par le root ca que vous avez créé. Vous obtiendrez toujours l'écran d'avertissement laid, mais cela fonctionnera.
Au lieu de certificats localhost
réels, je fais ce qu'Eugène suggère - créer un enregistrement 127.0.0.1 sur un domaine public.
Vous pouvez obtenir des certificats HTTPS gratuits pour localhost.YOURSITE.com
via Let's Encrypt via https://greenlock.domains . Choisissez simplement l'option DNS au lieu de l'option de téléchargement de fichiers HTTP
*.localhost.example.com
certifie et délivre à chaque installation un secret xyz.localhost.example.com
(et l'inclure dans la liste publique des suffixes pour empêcher les attaques sur example.com)Si vous n'êtes pas inclus dans la PSL, notez que:
Mise à jour : avec des choses comme greenlock qui utilisent ACME/Let's Encrypt, ce n'est plus particulièrement pertinent.
C'est probablement une très mauvaise idée, car nous ne voulons pas que les utilisateurs s'habituent à installer les AC racine à volonté (et nous savons comment cela s'est avéré pour Lenovo ), mais pour les machines d'entreprise/clonées, cela peut être une option raisonnable à petit budget.
J'avais cette même exigence. Donc, la raison pour laquelle vous devez utiliser SSL est parce que presque tous les navigateurs barfs maintenant si vous utilisez https et essayez de vous connecter à une ressource http même si la ressource http est sur localhost, ce qui est idiot pour moi.
En raison de JS SOP notre serveur Web localhost sert un fichier js, puis le JS à l'intérieur de la webapp peut appeler ce serveur Web localhost.
Nous avons donc fait en sorte que local.example.com pointe vers 127.0.0.1 et avons effectivement acheté un certificat SSL pour ce nom d'hôte. Nous expédions ensuite la clé privée à l'intérieur de ce serveur Web qui est installé sur l'ordinateur de l'utilisateur. Oui, nous sommes fous.
Tout cela fonctionne plutôt bien. Nous courons ainsi avec quelques centaines d'utilisateurs depuis environ 6 mois maintenant.
Le seul problème que nous rencontrons parfois est que cela ne fonctionne pas correctement lorsqu'un utilisateur utilise un serveur proxy. Les demandes sont envoyées au serveur proxy et il essaie de se connecter à 127.0.0.1 sur le serveur proxy, ce qui ne fonctionne évidemment pas. La solution consiste à ajouter une exclusion à la configuration du serveur proxy afin qu'elle contourne le serveur proxy pour les demandes à local.example.com
Un autre scénario où cela deviendra un peu délicat est lorsque les utilisateurs essaient d'utiliser Citrix ou les services Terminal Server. Vous devez vous assurer que le serveur Web de chaque utilisateur s'exécute sur un port différent, puis informer votre serveur Web distant du numéro de port afin que les pages générées sur le serveur aient le bon numéro de port. Heureusement, nous n'avons pas encore rencontré cela. Il semble également que de plus en plus de personnes utilisent des machines virtuelles ces jours-ci au lieu de Citrix.
Avez-vous déjà trouvé un meilleur moyen?
Vous pouvez probablement nous faire cette offre de GlobalSign (d'autres CA offrent des services comparables). En bref, l'offre vous permet d'avoir un certificat CA (et d'inscrire des certificats d'utilisateur final pour localhost/quoi que ce soit) qui sera signé par le certificat GlobalSign. Le coût peut cependant être important (je pense qu'ils le déterminent au cas par cas).
Puisque vous êtes sur localhost, vous pouvez dire à votre navigateur de faire confiance à n'importe quel certificat que vous souhaitez.
Créez un certificat auto-signé pour localhost et dites à votre navigateur de lui faire confiance.
La solution "Pointez votre localhost.MY-SLD.MY-TLD vers 127.0.0.1" fournie par fournie par CoolAJ86 fonctionne très bien, et vous voyez une explication plus détaillée ici:
Comment PLEX fait https pour tous ses utilisateurs
PS: Je ne sais tout simplement pas à quel point cela est durable, car quelqu'un avec un scénario similaire a vu sa clé révoquée par l'AC comme si la clé avait été compromise.