Tous les articles
HTTPSmkcertlocal developmentlocalhost tunneling

HTTPS sur localhost : mkcert vs tunnel, comparaison honnête

Deux outils, un problème : votre serveur de dev doit être joignable en HTTPS. mkcert fournit un certificat localement reconnu pour que https://localhost:3000 fonctionne. Un tunnel fournit une URL HTTPS publique avec un vrai certificat. Ils résolvent des problèmes différents — mais les gens les traitent souvent comme des concurrents.

La réponse courte

  • HTTPS uniquement sur votre machine, dans votre navigateur ? mkcert.
  • Un service externe (Stripe, GitHub, un téléphone) doit joindre votre dev ? Tunnel.
  • Les deux ? Lancez les deux. Ils ne se gênent pas.

mkcert : certificat localement reconnu en 30 secondes

mkcert installe une autorité de certification locale dans le trust store de votre OS et émet des certificats depuis elle. Votre navigateur fait confiance car la CA est de confiance.

mkcert -install
mkcert localhost 127.0.0.1

Le piège : seule votre machine fait confiance à cette CA. Le navigateur d'un collègue affichera un avertissement. Votre téléphone non plus, sans installer manuellement la racine.

Tunnel : vrai HTTPS, vraie URL publique

Un tunnel localhost redirige le trafic d'une URL HTTPS publique vers votre port local. Le certificat vient d'une vraie CA (Let's Encrypt par ex.), reconnue partout.

npx portpreview 3000

Comparaison directe

BesoinmkcertTunnel
HTTPS dans votre navigateur localOuiOui (via URL publique)
Service worker / cookies sécurisésOuiOui
Provider externe peut vous joindreNonOui
Téléphone en main peut vous joindreNon (sans installer la CA)Oui
OAuth accepte l'URLParfoisOui
Webhooks Stripe / GitHub / TwilioNonOui
Fonctionne hors ligneOuiNon

Erreurs courantes

Tenter mkcert pour les webhooks

Stripe ne peut pas faire confiance à votre CA locale. Peu importe à quel point le cert est joli dans votre navigateur — Stripe est sur un autre réseau.

Tunnel pour du HTTPS solo navigateur

Si vous voulez juste service workers et cookies sécurisés dans votre propre navigateur, mkcert est plus rapide et fonctionne hors ligne.

Choisir un seul outil

Faites cohabiter. mkcert pour le travail navigateur quotidien, tunnel quand vous testez webhooks ou OAuth. Aucun conflit.

Caddy ou nginx ?

Caddy avec HTTPS automatique fonctionne — c'est essentiellement "mkcert avec un reverse proxy". Pour la plupart du dev local, mkcert est plus simple. Pour du routage élaboré entre plusieurs services locaux, Caddy se justifie.

Notre vrai setup

Dans un de nos repos, mkcert dans le script dev pour HTTPS local, et un script tunnel séparé qui lance portpreview pour webhooks ou tests mobile. URL tunnel passée en variable d'env pour les redirect URIs OAuth. 20 minutes à câbler, plus jamais réfléchi à du TLS local depuis.

Voir aussi tester les callbacks OAuth en local et partager votre serveur de dev. Rejoignez la waitlist PortPreview.

Questions fréquentes

Faut-il choisir mkcert ou un tunnel pour HTTPS local ?
Les deux, pour des choses différentes. mkcert donne un certificat reconnu sur localhost et fonctionne hors ligne. Un tunnel donne une URL HTTPS publique joignable par des services externes et d'autres appareils. Aucun conflit — la plupart des équipes utilisent les deux.
mkcert convient-il pour les webhooks Stripe ou GitHub ?
Non. Les certificats mkcert sont reconnus uniquement sur la machine qui a installé la CA. Les providers webhook externes ne peuvent pas joindre localhost, peu importe la confiance du certificat dans votre navigateur.
mkcert fonctionne-t-il pour les callbacks OAuth localhost ?
Certains providers (Google, certains tiers Auth0) acceptent localhost en HTTP ou HTTPS pour le dev. Beaucoup non. mkcert couvre les premiers ; pour les stricts, un tunnel avec URL HTTPS publique est nécessaire.