Le certificat
Vous nâen avez pas besoin pour utiliser le tĂ©lĂ©phone. DĂšs lâinstallation, sans aucune configuration, un joueur peut scanner le QR code dans ParamĂštres âș Appareils liĂ©s pour transformer son vrai smartphone en tĂ©lĂ©phone de son personnage : messages, e-mails, contacts, City ID, garage, propriĂ©tĂ©s, tableau dâannonces, lieux sauvegardĂ©s. Tout fonctionne sur une simple connexion HTTP via le port que votre serveur a dĂ©jĂ dâouvert.
Ce quâapporte un certificat, câest ce quâun navigateur refuse dâaccorder Ă une page non sĂ©curisĂ©e :
| HTTP simple | HTTPS | |
|---|---|---|
| Messages, e-mails, garage, tout le reste | oui | oui |
| Notifications avec la page fermée | non | oui |
| Le microphone, pour enregistrer des notes vocales | non | oui |
| Lâinstaller comme une app sur Android, avec son icĂŽne | non | oui |
| Mention âNon sĂ©curisĂ©â dans la barre dâadresse | affichĂ©e | masquĂ©e |
| Le token de session | circule en clair | chiffré |
Cette derniĂšre ligne nâest pas quâune question dâesthĂ©tique. En HTTP classique, une personne connectĂ©e au mĂȘme rĂ©seau Wi-Fi que votre joueur peut intercepter sa session et lire son tĂ©lĂ©phone. Pour une ville de jeu de rĂŽle, cela peut ĂȘtre un compromis acceptable ; encore faut-il que ce soit un choix dĂ©libĂ©rĂ© et non une surprise.
Dans quelle situation vous trouvez-vous
Section intitulĂ©e « Dans quelle situation vous trouvez-vous »Vous avez un nom de domaine pointĂ© sur le serveur â laissez le tĂ©lĂ©phone obtenir son propre certificat
Section intitulĂ©e « Vous avez un nom de domaine pointĂ© sur le serveur â laissez le tĂ©lĂ©phone obtenir son propre certificat »Câest la mĂ©thode la plus rapide, et elle ne nĂ©cessite aucun logiciel additionnel sur la machine. La ressource effectue la demande de certificat auprĂšs de Letâs Encrypt, valide le challenge dâelle-mĂȘme, sert le flux TLS et renouvelle le certificat automatiquement tant quâelle fonctionne.
-- shared/server_config.lua (server-only: this file is never sent to a client)ServerConfig.Web = { Url = 'https://phone.yourserver.com/', Https = { Enabled = true, Names = { 'phone.yourserver.com' }, },}Ensuite, une seule fois :
- Faites pointer ce nom de domaine vers le serveur. Sur un VPS, câest un simple enregistrement A. Vous nâavez pas de domaine Ă vous ?
duckdns.orgvous en fournit un gratuitement en une minute qui ne changera jamais. - Laissez passer les ports 443 et 80 Ă travers le pare-feu. Le port 80 nâest ouvert que pendant la demande du certificat, puis refermĂ© aussitĂŽt la rĂ©ponse reçue â le journal de log signale ces deux Ă©tapes.
La commande phonehttps affiche lâĂ©tat actuel du certificat. phonehttps check interroge le serveur de test de Letâs Encrypt pour savoir sâil parvient Ă communiquer avec votre machine, une dĂ©marche idĂ©ale Ă entreprendre si aucun certificat nâarrive : cela permet de distinguer un souci sur votre pare-feu dâun problĂšme sur cette ressource.
Le renouvellement sâopĂšre automatiquement lorsquâil reste encore un tiers de durĂ©e de vie au certificat, avec une vĂ©rification toutes les six heures.
Si le serveur est hĂ©bergĂ© Ă domicile, lâadresse IP change
Section intitulĂ©e « Si le serveur est hĂ©bergĂ© Ă domicile, lâadresse IP change »Un fournisseur dâaccĂšs rĂ©sidentiel modifie lâadresse IP quand bon lui semble, et dĂšs que cela arrive, le nom de domaine pointe vers la box dâun inconnu : les smartphones liĂ©s ne peuvent plus joindre le serveur et le certificat ne peut plus ĂȘtre renouvelĂ©. Cette ressource le dĂ©tecte dĂ©jĂ dâelle-mĂȘme â elle interroge sa propre adresse toutes les demi-heures pour le QR code â et sur un domaine DuckDNS, elle peut Ă©galement corriger le tir :
-- shared/server_config.luaDuckDNS = { Enabled = true, Domains = { 'yourname' }, -- the part in front of .duckdns.org Token = '01d8b39f-...', -- from your duckdns.org page},La ressource est prĂ©venue dĂšs que lâadresse change, ainsi quâune fois par jour en lâabsence de changement â ce battement de cĆur sert Ă©galement Ă rĂ©tablir la situation aprĂšs une coupure Internet oĂč lâadresse aurait changĂ© sans pouvoir ĂȘtre signalĂ©e. Lorsque la mise Ă jour rĂ©ussit, le journal le consigne sans dĂ©clencher dâalerte ; lorsquâelle Ă©choue, lâavertissement classique est envoyĂ©, y compris vers le webhook Server.
Sur un VPS, lâadresse IP est fixe et rien de tout cela nâest nĂ©cessaire. Laissez Enabled = false.
Vous ĂȘtes derriĂšre le proxy de connexion Cfx.re
Section intitulĂ©e « Vous ĂȘtes derriĂšre le proxy de connexion Cfx.re »Vous nâavez rien Ă faire. Si sv_listingHostOverride est configurĂ©, le QR code est automatiquement gĂ©nĂ©rĂ© sous la forme https://your.domain/mic_phone/web/, car ce proxy achemine lâintĂ©gralitĂ© de la racine vers votre serveur. Câest le scĂ©nario le plus simple et il est dĂ©jĂ pris en charge nativement.
Vous utilisez déjà un reverse proxy et préférez conserver cette configuration
Section intitulée « Vous utilisez déjà un reverse proxy et préférez conserver cette configuration »Une ligne dans shared/config/web.lua :
Url = 'https://phone.yourserver.com/mic_phone/web/',et un reverse proxy en amont qui gÚre le TLS et transfÚre le trafic vers le port de jeu. Avec Caddy, cela se résume à deux lignes dans un Caddyfile :
phone.yourserver.com { reverse_proxy 127.0.0.1:30120}Avec nginx, redirigez / vers 127.0.0.1:30120 et dĂ©sactivez la mise en mĂ©moire tampon (proxy_buffering off;), sous peine de bloquer le flux dâĂ©vĂ©nements et de priver le tĂ©lĂ©phone de toute rĂ©ception en temps rĂ©el.
Une configuration qui ne fonctionne pas : activer le nuage orange de Cloudflare sur un enregistrement DNS pointant directement vers le port 30120. Le proxy Cloudflare nâaccepte quâune liste restreinte de ports dâorigine â 80, 8080, 8880, 2052, 2082, 2086, 2095 et 443, 2053, 2083, 2087, 2096, 8443 â et 30120 nâen fait pas partie. Vous devez intercaler votre propre proxy devant, comme expliquĂ© ci-dessus.
Vous louez votre serveur chez un hébergeur FiveM
Section intitulĂ©e « Vous louez votre serveur chez un hĂ©bergeur FiveM »Vous ne pouvez rien installer sur la machine â mais ce nâest pas nĂ©cessaire : la premiĂšre mĂ©thode prĂ©sentĂ©e plus haut nâinstalle rien dâautre que cette ressource. Ce dont vous avez besoin de la part de votre hĂ©bergeur, ce sont deux ports dĂ©diĂ©s, le 443 et le 80, ainsi quâun nom de domaine pointĂ© vers le serveur. De nombreux prestataires vous les accordent, tandis que certains partagent ces ports entre tous les clients de la machine et vous refuseront les deux. Demandez-leur lâaccĂšs Ă ces ports avant toute chose ; si la rĂ©ponse est nĂ©gative, faites pointer un domaine vers un tunnel Cloudflare nommĂ© Ă la place.
Vous ne pouvez ouvrir aucun port â pas de domaine ou blocage par lâopĂ©rateur
Section intitulĂ©e « Vous ne pouvez ouvrir aucun port â pas de domaine ou blocage par lâopĂ©rateur »Dans ce cas, utilisez un tunnel : tools/tunnel.ps1 lance un tunnel rapide Cloudflare (quick tunnel), Ă©crit lâadresse obtenue dans la configuration et vous invite Ă redĂ©marrer la ressource. Aucun port Ă ouvrir, aucun certificat Ă manipuler.
Gardez nĂ©anmoins Ă lâesprit ce que cela implique : un quick tunnel est Ă©phĂ©mĂšre par conception. Lâadresse est gĂ©nĂ©rĂ©e alĂ©atoirement et une nouvelle adresse est rĂ©attribuĂ©e Ă chaque redĂ©marrage du tunnel â or, un navigateur associant une application installĂ©e, son token mĂ©morisĂ© et son abonnement push Ă lâadresse exacte dâorigine, tous ces Ă©lĂ©ments doivent ĂȘtre reconfigurĂ©s Ă chaque fois. Cette solution est idĂ©ale pour tester. Pour tout environnement destinĂ© Ă durer, faites pointer un nom de domaine vers un tunnel nommĂ©, qui conserve son adresse â cela nĂ©cessite un compte Cloudflare avec un domaine rattachĂ©.
Remarque sur le flux dâĂ©vĂ©nements (event stream)
Section intitulĂ©e « Remarque sur le flux dâĂ©vĂ©nements (event stream) »Le tĂ©lĂ©phone maintient une connexion persistante ouverte pour intercepter les messages dĂšs leur arrivĂ©e, et il lâinitialise avec une requĂȘte POST plutĂŽt que le traditionnel GET de lâAPI EventSource. Deux raisons motivent ce choix, Ă retenir si vous placez un reverse proxy en amont :
- Un token prĂ©sent dans une query string se retrouve consignĂ© dans chaque journal de proxy traversĂ© entre le tĂ©lĂ©phone et le serveur. Dans le corps dâune requĂȘte POST, ce nâest pas le cas.
- Un quick tunnel Cloudflare maintient un flux dâĂ©vĂ©nements GET bloquĂ© tant que le serveur ne clĂŽture pas la connexion, alors quâil laisse circuler un flux POST (cloudflared#1449). De nombreux proxys mettent Ă©galement en mĂ©moire tampon les flux GET par dĂ©faut.
Le serveur rĂ©pond Ă©galement aux requĂȘtes GET sur les mĂȘmes routes, pour les clients ne prenant en charge que lâAPI EventSource.