Commit 8cfa93bf authored by Kourser's avatar Kourser
Browse files

Une interface en https ne propose plus une WebSocket en clair

Qui saisit « https://kastell.exemple.org » comme adresse publique se voyait
proposer « ws:// » pour le serveur média, puis avertir trois lignes plus bas
que son navigateur refuserait cette adresse. Le script fabriquait l'erreur
qu'il annonçait.

La mutualisation avait le défaut inverse et plus discret : elle proposait
« wss:// » quoi qu'il arrive, y compris derrière une interface en clair, où
il n'y a ni certificat ni raison d'en vouloir un.

Les deux voies déduisent maintenant le schéma de celui de l'interface, qui
était déjà connu — schema_public servait à l'avertissement, il sert
désormais aussi au défaut.

L'avertissement gagne son pendant
  Défaut « wss:// » et silence auraient laissé croire que le TLS vient tout
  seul. Il ne vient pas : LiveKit écoute en clair, et « wss:// » ne répond que
  s'il y a un proxy et un certificat devant ce port. Le script le dit
  maintenant quand l'adresse est en wss:// et que le serveur est celui de la
  composition — le cas où l'exploitant est responsable de cette terminaison.

  L'avertissement de contenu mixte reste, pour qui force « ws:// » malgré
  tout. Les deux ne se déclenchent jamais ensemble.

Contrôlé
  https donne wss:// et l'avertissement de terminaison TLS ; http donne ws://
  et rien ; la mutualisation suit les deux ; et « ws:// » saisi à la main
  derrière une interface https déclenche toujours l'avertissement de contenu
  mixte.

Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
parent 7caa2ede
Loading
Loading
Loading
Loading
Loading
+29 −4
Changes for outils/installer.sh: 29 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -790,6 +790,16 @@ if [ "$ecrire_env" = "oui" ]; then
       "  crisis handling remains whole — the product simply announces that"
  dire "  visio est absente, au lieu d'échouer au premier appel." \
       "  video is absent, instead of failing on the first call."
  # Le schéma WebSocket suit celui de l'interface : un navigateur servi en
  # https refuse une WebSocket en clair (contenu mixte), et proposer « ws:// »
  # à qui vient de saisir une adresse https fabrique l'erreur qu'on avertira
  # trois lignes plus bas.
  if [ "$schema_public" = "https" ]; then
    schema_ws="wss"
  else
    schema_ws="ws"
  fi

  # Valeurs du serveur livré, que chaque voie corrige à sa façon.
  livekit_mode=""
  livekit_url=""
@@ -913,7 +923,8 @@ if [ "$ecrire_env" = "oui" ]; then
          dire "  celle que compose le navigateur, celle que compose ce serveur." \
               "  browser dials, and the one this server dials."
          echo
          demander_b "Adresse publique du serveur média" "Public address of the media server" "wss://$hote_public:7880"
          demander_b "Adresse publique du serveur média" "Public address of the media server" \
                     "$schema_ws://$hote_public:7880"
          livekit_url="$REPONSE"
          echo
          dire "  Le serveur mutualisé n'est pas sur le réseau de cette" \
@@ -990,15 +1001,16 @@ if [ "$ecrire_env" = "oui" ]; then
           "  This address is dialled by the BROWSER: it must stay reachable"
      dire "  joignable depuis les postes de la cellule." \
           "  from the cell's workstations."
      demander_b "Adresse du serveur média" "Media server address" "ws://$hote_public:$livekit_port"
      demander_b "Adresse du serveur média" "Media server address" \
                 "$schema_ws://$hote_public:$livekit_port"
      livekit_url="$REPONSE"
      livekit_url_interne="http://livekit:$livekit_port"
      livekit_ws_interne="ws://livekit:$livekit_port"
    fi

    if [ "$schema_public" = "https" ]; then
    case "$livekit_url" in
      ws://*)
        if [ "$schema_public" = "https" ]; then
          echo
          dire "  ⚠  Votre interface est en https et cette adresse en ws:// —" \
               "  ⚠  Your interface is https and this address is ws:// — a browser"
@@ -1008,9 +1020,22 @@ if [ "$ecrire_env" = "oui" ]; then
               "     wss:// and a certificate in front of port"
          dire "     $livekit_port." \
               "     $livekit_port."
        fi
        ;;
      esac
      wss://*)
        if [ "$livekit_mode" = "livre" ]; then
          echo
          dire "  ⚠  LiveKit ne termine pas le TLS lui-même : il écoute en clair" \
               "  ⚠  LiveKit does not terminate TLS itself: it listens in the"
          dire "     sur $livekit_port. Pour que « wss:// » réponde, il faut un" \
               "     clear on $livekit_port. For \"wss://\" to answer, a reverse"
          dire "     proxy et un certificat devant ce port — faute de quoi la" \
               "     proxy and a certificate must sit in front of it — without"
          dire "     salle s'ouvrira et la connexion média échouera." \
               "     which the room opens and the media connection fails."
        fi
        ;;
    esac
  fi

  echo