Noms et TLS
Obtenir un nom d'hôte et HTTPS avec ou sans domaine — mDNS, sslip.io / nip.io, votre DNS, Let's Encrypt
Navigateurs, apps natives, passkeys et devices ont tous besoin d'un nom d'hôte qui résout vers le serveur, et d'un certificat qui le porte. Les navigateurs et les apps passent par le port 443 ; les devices par le point d'entrée devices (port 4443, TLS mutuel avec un certificat client par carte), dont ils épinglent l'autorité de certification dans leur firmware : choisissez le nom avant de les flasher.
--domain | Exemple | Résolution | TLS | Quand |
|---|---|---|---|---|
| (défaut) | pnex.local | mDNS sur le réseau local | CA locale | Raspberry Pi ou Linux sur un réseau de maison ou de labo |
sslip / nip | pnex-203-0-113-7.sslip.io | DNS wildcard public | Let's Encrypt (--tls cloud) | VM publique sans nom de domaine |
| votre nom | pnex.example.com | votre DNS | Let's Encrypt (--tls cloud) ou CA locale | production, accès public |
| une IP | 192.168.1.20 | aucune | CA locale | dernier recours : pas de passkeys |
DNS wildcard : sslip.io et nip.io
sslip.io et nip.io sont des services DNS gratuits qui répondent avec l'adresse IP écrite dans le nom :
pnex-203-0-113-7.sslip.io → 203.0.113.7
pnex-203-0-113-7.nip.io → 203.0.113.7Leur intérêt : Let's Encrypt sans DNS. Une VM publique nommée ainsi obtient pour l'interface un certificat que tous les navigateurs et apps reconnaissent déjà — aucune autorité de certification à importer. Les devices, eux, ne font pas confiance au magasin de leur système : ils épinglent la racine compilée dans leur firmware (voir Let's Encrypt).
curl -fsSL https://raw.githubusercontent.com/Pnex/pnex-deploy/main/install.sh \
| sudo bash -s -- --domain sslip --ip 203.0.113.7 --tls cloud \
--acme-email [email protected] --admin-user [email protected]--domain sslip (ou nip) construit le nom à partir de l'adresse du serveur ;
--ip donne l'adresse publique quand la VM ne voit qu'une adresse privée
derrière le NAT du fournisseur. L'installeur utilise la forme à tirets : le nom
reste un seul label, ce que les certificats gèrent le mieux.
Avec une IP privée, un nom sslip.io fonctionne aussi, avec la CA locale :
on importe la CA comme pour .local. Le seul gain par rapport à une IP nue
est un vrai nom d'hôte là où mDNS échoue (WSL, Android avant 12, navigateurs
en DNS-over-HTTPS), ce qui garde les passkeys utilisables. C'est pourquoi
l'installeur l'utilise par défaut sous WSL.
À savoir :
- Clients et devices ont besoin du DNS d'internet. Un réseau totalement hors ligne a besoin de mDNS ou de son propre serveur DNS.
- Certaines box rejettent les noms publics qui résolvent vers une adresse
privée (protection DNS rebinding) : autorisez
sslip.io/nip.iodans la box, ou utilisez un autre résolveur. - Le nom contient l'IP : donnez au serveur une réservation DHCP. Après un
changement d'adresse, relancez l'installeur avec
--domain sslipet reflashez les devices. - Pour ne dépendre d'aucun tiers, déléguez un sous-domaine de votre zone à un
serveur DNS sslip.io auto-hébergé, ou créez un enregistrement wildcard
(
*.lab.example.com) pointant vers le serveur.
Autorité de certification locale
En mode local, l'installeur crée une CA racine une seule fois (10 ans) et
renouvelle automatiquement le certificat du serveur. Chaque client fait
confiance à la CA une fois ; elle est servie sur
https://<serveur>/api/v1/meta/ca et affichée dans l'app web sous Profil → À
propos. Sauvegardez-la : pnexctl backup l'inclut, et les devices doivent être
reflashés si elle est perdue.
Let's Encrypt
--tls cloud remplace la CA locale par Let's Encrypt pour l'interface
(challenge HTTP-01, renouvellement toutes les 12 heures). Il faut un nom public et
les ports 80 et 443 ouverts sur internet, plus 4443 là où sont les devices.
Le point d'entrée devices (4443) sert le même certificat ; le firmware épingle donc la racine Let's Encrypt (ISRG Root X1), et le certificat client de chaque carte reste émis par la CA de son organisation. Avec le chart Helm, le point d'entrée devices a par défaut sa propre CA privée, générée une fois : voir Kubernetes.
Ce que les devices épinglent
| Installation | CA épinglée par le firmware |
|---|---|
install.sh, --tls local | la CA locale |
install.sh, --tls cloud | ISRG Root X1 (Let's Encrypt) |
| Helm, par défaut | la CA privée générée par le chart pour devices.<publicHost> |
Helm, deviceEdge.tls.existingSecret | la racine placée dans deviceCa.pem |
Changer d'autorité impose de recompiler et reflasher les devices.

