Skip to content

Commit e043cb3

Browse files
authored
fix: update eduroam CA certificates and improve connection handling (#110)
## Summary Updates the pinned RADIUS CA certificates from the outdated USERTrust/GEANT chain to the current HARICA roots that Saxion's server actually uses, and improves the connection activation flow with explicit timeouts and better error messaging. ## Type of change - [x] `fix` — bug fix (broken link, incorrect command, layout issue) - [x] `content` — update or improve existing content ## Details ### Script Changes (`saxion-eduroam.py`) **Certificate Update:** - Replaces pinned certificates with the actual chain served by `ise.infra.saxion.net`: - Hellenic Academic and Research Institutions RootCA 2015 (depth=3) - HARICA TLS RSA Root CA 2021 (depth=2) - Removes the outdated USERTrust RSA CA and GEANT OV RSA CA 4 that caused "unknown CA" failures after GÉANT's migration to HARICA - Adds comprehensive documentation explaining the certificate chain, why pinning is necessary, and how to refresh if Saxion changes CAs again **Connection Handling Improvements:** - Adds `CONNECT_TIMEOUT = 45` constant to prevent the script appearing frozen during the 90-second default nmcli wait - Passes `--wait` flag to nmcli with explicit timeout - Adds subprocess timeout as a backstop - Prints status message during connection attempt so users know the script is still running - Improves error handling to log full nmcli errors before checking for certificate failures - Adds graceful timeout handling with helpful guidance to check logs **File Permissions:** - Changes CA certificate file permissions from 0600 to 0644, since these are public root certificates (not keys) and NetworkManager reads them as a system service ### Documentation Changes **English (`eduroam-network-installation.md`):** - Updates explanation of certificate pinning to reference HARICA roots instead of USERTrust/GEANT - Adds context about GÉANT's migration and the previous failure mode - Updates SHA256 checksum **Dutch (`eduroam-network-installation.nl.md`):** - Parallel updates to Dutch documentation - Updates SHA256 checksum ## Checklist - [x] PR title follows the commit convention - [x] Both EN and NL versions updated - [x] No broken image references - [x] Changes tested against actual certificate chain from live handshake
1 parent 1feba84 commit e043cb3

3 files changed

Lines changed: 248 additions & 140 deletions

File tree

src/content/docs/networking/eduroam-network-installation.md

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,14 @@ script, plus `domain-suffix-match` (the modern replacement for the deprecated
3636

3737
The script used to point at the system trust store, which meant any of the roughly 150
3838
public CAs your distribution ships could vouch for a server calling itself
39-
`ise.infra.saxion.net`. It now trusts only the chain Saxion publishes through eduroam
40-
CAT — USERTrust RSA Certification Authority and GEANT OV RSA CA 4 — which is what the
41-
official CAT installers do.
39+
`ise.infra.saxion.net`. It now trusts only the HARICA roots that Saxion's RADIUS server
40+
actually chains to — Hellenic Academic and Research Institutions RootCA 2015 and HARICA
41+
TLS RSA Root CA 2021 — which is what the official CAT installers do.
42+
43+
GÉANT moved its Trusted Certificate Service to HARICA, so an earlier version of this
44+
script pinned the pre-migration USERTrust chain and every connection failed with
45+
`unknown CA`. If Saxion changes certificate authority again the same thing will happen;
46+
the script now says so explicitly instead of hanging.
4247

4348
**Requirements:**
4449
- Python 3.10+
@@ -67,13 +72,34 @@ A Python script automates the full `nmcli` connection setup for Saxion:
6772
curl -LO https://zephyrus-linux.stensel.nl/scripts/saxion-eduroam.py
6873

6974
# 2. Verify checksum
70-
echo "fad48d500af6eb90deec5e0e21ccf7cbaaac6678b5d3e8cb4f26d814c525e3d2 saxion-eduroam.py" | sha256sum -c
75+
echo "447a0979166cc801ba7406cc660b0403156532862ac031835291bb9d721f33e1 saxion-eduroam.py" | sha256sum -c
7176

7277
# 3. Run
7378
python3 saxion-eduroam.py
7479
```
7580

76-
**SHA256:** `fad48d500af6eb90deec5e0e21ccf7cbaaac6678b5d3e8cb4f26d814c525e3d2`
81+
#### When the certificate stops matching
82+
83+
The trusted chain is pinned inside the script, so it breaks the day Saxion
84+
changes certificate authority — which is exactly what happened in
85+
[#109](https://github.com/THectic-NL/Zephyrus-Linux/issues/109). If the script
86+
reports `unknown CA` or fails to authenticate, `--ignore-certificate` connects
87+
without validating and prints the chain the server actually served:
88+
89+
```bash
90+
python3 saxion-eduroam.py --ignore-certificate
91+
```
92+
93+
Copy the root it reports into `SAXION_CA_PEM`, open an issue with it, and
94+
reconnect without the flag.
95+
96+
**Do not leave this on.** Without validation, any access point calling itself
97+
`eduroam` is trusted. It can terminate the TLS tunnel itself and capture the
98+
MSCHAPv2 exchange, which is crackable offline — that is your Saxion password.
99+
`domain-suffix-match` does not help here: it checks the name on a certificate
100+
nobody verified. Use the flag to diagnose, then reconnect properly.
101+
102+
**SHA256:** `447a0979166cc801ba7406cc660b0403156532862ac031835291bb9d721f33e1`
77103

78104
The script removes any existing eduroam profile, prompts for your **username** via a GUI dialog (zenity, kdialog, or yad) or terminal fallback, and activates the connection. Your password is never asked by the script; it is requested by your GNOME Keyring at connection time and stored securely, never in plaintext.
79105

src/content/docs/networking/eduroam-network-installation.nl.md

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,14 @@ is vastgelegd, plus `domain-suffix-match` (de moderne vervanging voor het veroud
3636

3737
Het script wees eerder naar de systeem-truststore. Daarmee kon elk van de ongeveer 150
3838
publieke CA's die je distributie meelevert instaan voor een server die zich
39-
`ise.infra.saxion.net` noemt. Nu wordt alleen de keten vertrouwd die Saxion via eduroam
40-
CAT publiceert — USERTrust RSA Certification Authority en GEANT OV RSA CA 4 — precies
41-
wat de officiële CAT-installers doen.
39+
`ise.infra.saxion.net` noemt. Nu worden alleen de HARICA-roots vertrouwd waar Saxion's
40+
RADIUS-server daadwerkelijk naartoe ketent — Hellenic Academic and Research Institutions
41+
RootCA 2015 en HARICA TLS RSA Root CA 2021 — precies wat de officiële CAT-installers doen.
42+
43+
GÉANT heeft zijn Trusted Certificate Service naar HARICA verhuisd. Een eerdere versie van
44+
dit script legde daardoor nog de oude USERTrust-keten vast en elke verbinding faalde met
45+
`unknown CA`. Wisselt Saxion opnieuw van certificaatautoriteit, dan gebeurt hetzelfde;
46+
het script meldt dat nu expliciet in plaats van vast te lopen.
4247

4348
**Vereisten:**
4449
- Python 3.10+
@@ -67,13 +72,36 @@ Een Python-script automatiseert de volledige `nmcli`-verbindingsconfiguratie voo
6772
curl -LO https://zephyrus-linux.stensel.nl/scripts/saxion-eduroam.py
6873

6974
# 2. Controleer de checksum
70-
echo "fad48d500af6eb90deec5e0e21ccf7cbaaac6678b5d3e8cb4f26d814c525e3d2 saxion-eduroam.py" | sha256sum -c
75+
echo "447a0979166cc801ba7406cc660b0403156532862ac031835291bb9d721f33e1 saxion-eduroam.py" | sha256sum -c
7176

7277
# 3. Uitvoeren
7378
python3 saxion-eduroam.py
7479
```
7580

76-
**SHA256:** `fad48d500af6eb90deec5e0e21ccf7cbaaac6678b5d3e8cb4f26d814c525e3d2`
81+
#### Als het certificaat niet meer klopt
82+
83+
De vertrouwde keten ligt vast in het script, dus die breekt zodra Saxion van
84+
certificaatautoriteit wisselt — precies wat er in
85+
[#109](https://github.com/THectic-NL/Zephyrus-Linux/issues/109) gebeurde. Meldt
86+
het script `unknown CA` of lukt authenticatie niet, dan verbindt
87+
`--ignore-certificate` zonder te valideren en toont het welke keten de server
88+
werkelijk stuurde:
89+
90+
```bash
91+
python3 saxion-eduroam.py --ignore-certificate
92+
```
93+
94+
Zet de root die eruit komt in `SAXION_CA_PEM`, meld hem in een issue, en verbind
95+
daarna opnieuw zonder de vlag.
96+
97+
**Laat dit niet aanstaan.** Zonder validatie wordt elk access point dat zich
98+
`eduroam` noemt vertrouwd. Dat kan de TLS-tunnel zelf afsluiten en de
99+
MSCHAPv2-uitwisseling opvangen, die offline te kraken is — dat is je
100+
Saxion-wachtwoord. `domain-suffix-match` helpt hier niet: die controleert de naam
101+
op een certificaat dat niemand geverifieerd heeft. Gebruik de vlag om te
102+
diagnosticeren en verbind daarna netjes.
103+
104+
**SHA256:** `447a0979166cc801ba7406cc660b0403156532862ac031835291bb9d721f33e1`
77105

78106
Het script verwijdert een eventueel bestaand eduroam-profiel, vraagt je **gebruikersnaam** via een GUI-dialoog (zenity, kdialog of yad) of terminal-fallback, en activeert de verbinding. Je wachtwoord wordt nooit door het script gevraagd; dat wordt bij het verbinden opgevraagd door je GNOME Keyring en veilig opgeslagen, nooit in platte tekst.
79107

0 commit comments

Comments
 (0)