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
| Besoin | mkcert | Tunnel |
|---|---|---|
| HTTPS dans votre navigateur local | Oui | Oui (via URL publique) |
| Service worker / cookies sécurisés | Oui | Oui |
| Provider externe peut vous joindre | Non | Oui |
| Téléphone en main peut vous joindre | Non (sans installer la CA) | Oui |
| OAuth accepte l'URL | Parfois | Oui |
| Webhooks Stripe / GitHub / Twilio | Non | Oui |
| Fonctionne hors ligne | Oui | Non |
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.