web-dev-qa-db-fra.com

Certificat SSL signé par un tiers pour localhost ou 127.0.0.1?

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:

  • les utilisateurs finaux se trouvent (généralement) chez eux derrière leurs pare-feu locaux lorsqu'ils se connectent au système.
  • Le système se compose d'un serveur distant hébergé par nous, strictement via https (en utilisant SSL)
  • Le mécanisme d'autorisation nécessite une auto-création de compte utilisateur sur le serveur distant qui, une fois le compte correctement créé, nécessitera ensuite le téléchargement et l'installation d'un logiciel sur l'ordinateur de l'utilisateur final. Ce logiciel contient, entre autres, un serveur Web local.
  • Ce serveur Web "local" ne doit également autoriser que les connexions https au navigateur de l'utilisateur.

É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?

24
Rimer

localhost

Vous ne recevrez jamais de certificat https approprié pour localhost. C'est strictement interdit . Parce que raisons .

En bref:

  • Périphériques mal configurés existent réellement, dans la nature, qui attendent les recherches avant de résoudre localhost à partir de /etc/hosts
  • Si un routeur définit 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.

localhost.YOURSITE.com (pointe vers 127.0.0.1)

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

Pointez votre localhost.MY-SLD.MY-TLD vers 127.0.0.1

  • Acheter un *.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)
  • Utilisez ne application compatible Greenlock pour générer de tels certificats à la volée (via https://letsencrypt.org ) directement sur le client (ou passez-les au client)

Si vous n'êtes pas inclus dans la PSL, notez que:

  • les sessions, le stockage local, l'indexeddb, etc. sont partagés par domaine
  • changer le port ne change pas leur partage

Soyez votre propre certificat racine

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.

25
CoolAJ86

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?

15
Sarel Botha

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.

1

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.

0
drizin