Unable to connect to eduroam on Fedora 43

So I just installed Fedora 43 KDE edition which looks nice and works pretty well, but won’t let me connect to eduroam. When I start connecting, it will wait for a minute and then prompt again for my password, until it gives up.
I’ve already tried plenty of solutions offered on this forum (like update-crypto-policy or 802-1x.phase1-auth-flags 32), but without success so far.

Logs for wpa_supplicant:

Successfully initialized wpa_supplicant
Started wpa_supplicant.service - WPA supplicant.
dbus: fill_dict_with_properties dbus_interface=fi.w1.wpa_supplicant1.Interface.P2PDevice dbus_property=P2PDeviceConfig getter failed
wlp2s0: SME: Trying to authenticate with 50:06:04:6f:28:af (SSID='eduroam' freq=5660 MHz)
wlp2s0: Trying to associate with 50:06:04:6f:28:af (SSID='eduroam' freq=5660 MHz)
wlp2s0: Associated with 50:06:04:6f:28:af
wlp2s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
wlp2s0: CTRL-EVENT-EAP-STARTED EAP authentication started
wlp2s0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=4 -> NAK
wlp2s0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
wlp2s0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
wlp2s0: CTRL-EVENT-EAP-PEER-CERT depth=1 subject='/C=GR/O=Hellenic Academic and Research Institutions CA/CN=GEANT TLS RSA 1' hash=5b6[...]
wlp2s0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/C=DE/ST=Saarland/O=Universitaet des Saarlandes/CN=horus.net.uni-saarland.de' hash=aa1[...]
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:horus.net.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radius2.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radius2.rz.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radiant.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radiant.rz.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radius1.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radius1.rz.uni-saarland.de
TLS: Certificate verification failed, error 2 (unable to get issuer certificate) depth 1 for '/C=GR/O=Hellenic Academic and Research Institutions CA/CN=GEANT TLS RSA 1'
wlp2s0: CTRL-EVENT-EAP-TLS-CERT-ERROR reason=1 depth=1 subject='/C=GR/O=Hellenic Academic and Research Institutions CA/CN=GEANT TLS RSA 1' err='unable to get issuer certificate'
SSL: SSL3 alert: write (local SSL3 detected an error):fatal:unknown CA
OpenSSL: openssl_handshake - SSL_connect error:0A000086:SSL routines::certificate verify failed
wlp2s0: CTRL-EVENT-EAP-FAILURE EAP authentication failed
wlp2s0: Authentication with 50:06:04:6f:28:af timed out.
wlp2s0: Added BSSID 50:06:04:6f:28:af into ignore list, ignoring for 10 seconds
nl80211: send_event_marker failed: Source based routing not supported
wlp2s0: CTRL-EVENT-DISCONNECTED bssid=50:06:04:6f:28:af reason=3 locally_generated=1
wlp2s0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="eduroam" auth_failures=1 duration=10 reason=AUTH_FAILED
wlp2s0: BSSID 50:06:04:6f:28:af ignore list count incremented to 2, ignoring for 10 seconds
wlp2s0: CTRL-EVENT-DSCP-POLICY clear_all
wlp2s0: CTRL-EVENT-SSID-REENABLED id=0 ssid="eduroam"
wlp2s0: SME: Trying to authenticate with 50:06:04:6f:28:af (SSID='eduroam' freq=5660 MHz)

Interestingly, I also have Ubuntu installed, which does connect to eduroam, and there the logs look like this:

wlp2s0: SME: Trying to authenticate with 50:06:04:6f:28:af (SSID='eduroam' freq=5660 MHz)
wlp2s0: Trying to associate with 50:06:04:6f:28:af (SSID='eduroam' freq=5660 MHz)
wlp2s0: Associated with 50:06:04:6f:28:af
wlp2s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
wlp2s0: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=DE
wlp2s0: CTRL-EVENT-EAP-STARTED EAP authentication started
wlp2s0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=4 -> NAK
wlp2s0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
wlp2s0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
wlp2s0: CTRL-EVENT-EAP-PEER-CERT depth=2 subject='/C=GR/O=Hellenic Academic and Research Institutions CA/CN=HARICA TLS RSA Root CA 2021' hash=d95[...]
wlp2s0: CTRL-EVENT-EAP-PEER-CERT depth=1 subject='/C=GR/O=Hellenic Academic and Research Institutions CA/CN=GEANT TLS RSA 1' hash=5b6[...]
wlp2s0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/C=DE/ST=Saarland/O=Universitaet des Saarlandes/CN=horus.net.uni-saarland.de' hash=aa1[...]
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:horus.net.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radius2.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radius2.rz.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radiant.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radiant.rz.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radius1.uni-saarland.de
wlp2s0: CTRL-EVENT-EAP-PEER-ALT depth=0 DNS:radius1.rz.uni-saarland.de
EAP-MSCHAPV2: Authentication succeeded
EAP-TLV: TLV Result - Success - EAP-TLV/Phase2 Completed
wlp2s0: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully

The main difference that I can see is that on the Fedora, the line

wlp2s0: CTRL-EVENT-EAP-PEER-CERT depth=2 subject='[...] CA/CN=HARICA TLS RSA Root CA 2021' hash=d95[...]

is missing, and as far as I understand, this should be the Root CA, for which the certificate is not found.
So what is going wrong here, and how can I somehow fix this issue?

Thanks in advance :slight_smile:

1 Like

Oh great, so your uni’s radius server has a cert from the new DFN/GEANT CA at Harica. That will affect all German universities sooner or later.

I had to import their CA cert into Thunderbird to get S/MIME working, so I guess their certs are not in Fedora yet, or something along the chain does not verify on Fedora.

You can try and download the proper cert PEM (e.g. from https://repo.harica.gr/rep_dyn.php, or -preferrably - from your uni’s site) and specify it in your eduroam connection settings under “Sicherheit des Funknetzwerks/CA-Zertifikat).

3 Likes

Ok I see, this probably explains why my university asked everybody to reconfigure eduroam last month.

However, they already provide us with a certificate that I have to specify into the settings, as you proposed, and this does not work. Looking at this certificate with openssl x509 -text -in chain.pem gives me:

Certificate:
   Data:
       Version: 3 (0x2)
       Serial Number:
           14:d5:7b:f3:69:22:28:21:9a:55:67:fa:91:65:1b:22
       Signature Algorithm: sha256WithRSAEncryption
       Issuer: C=GR, O=Hellenic Academic and Research Institutions CA, CN=HARICA TLS RSA Root CA 2021
       Validity
           Not Before: Jan  3 11:15:00 2025 GMT
           Not After : Dec 31 11:14:59 2039 GMT
       Subject: C=GR, O=Hellenic Academic and Research Institutions CA, CN=GEANT TLS RSA 1
       Subject Public Key Info:
           Public Key Algorithm: rsaEncryption
               Public-Key: (3072 bit)
               Modulus:
                   [...]
               Exponent: 65537 (0x10001)
       X509v3 extensions:
           X509v3 Basic Constraints: critical
               CA:TRUE, pathlen:0
           X509v3 Authority Key Identifier: 
               0A:48:23:A6:60:A4:92:0A:33:EA:93:5B:C5:57:EA:25:4D:BD:12:EE
           Authority Information Access: 
               CA Issuers - URI:http://crt.harica.gr/HARICA-TLS-Root-2021-RSA.cer
           X509v3 Certificate Policies: 
               Policy: X509v3 Any Policy
           X509v3 Extended Key Usage: 
               TLS Web Client Authentication, TLS Web Server Authentication
           X509v3 CRL Distribution Points: 
               Full Name:
                 URI:http://crl.harica.gr/HARICA-TLS-Root-2021-RSA.crl

           X509v3 Subject Key Identifier: 
               86:01:72:3F:8C:A9:70:E2:31:06:53:16:CE:01:5F:5B:79:C8:3C:3B
           X509v3 Key Usage: critical
               Digital Signature, Certificate Sign, CRL Sign
   Signature Algorithm: sha256WithRSAEncryptionn
   Signature Value:
         [...]

So apparently they provide us with the certificate for the intermediate CA, but not for the root CA. Does it mean that they expect us to already have the Root CA certificate somewhere on the OS? Can I also add this certificate manually?

Now, I just had a look at the certificates installed in /etc/pki/tls/certs/ca-certificates.crt and could find the certificate for “HARICA TLS RSA Root CA 2021”, also it matches the one that is installed on Ubuntu.
So to me it looks like my OS has access to all certificates it needs. But my knowledge on this topic is quite limited, so maybe it works differently than I would think…

It looks to me like the root CA certificate you found isn’t used for PEAP on Fedora. You can see that in your Ubuntu logs there’re three certs involved: RADIUS, intermediate CA and root CA. But in the Fedora logs, the root CA (depth=2) isn’t found. If your uni provided you with both the root CA certificate and the intermediate CA certificate, you can put them into one file, for example:

cat intermediate.pem root.pem >chain.pem

You should be able to use the chain.pem in your eduroam settings as your CA file for PEAP.

Yes, this is similar to what I had to do for S/MIME (Thunderbird): While the root CA cert is there, somehow the chaining from intermediate to root did not work, so I had to trust the intermedate (if I remember correctly). Maybe something in the intermediate’s signature (by the root CA) is not to Fedora’s likings.

Now I had a closer look at the CA certification provided by my university, and when I just print it with cat, it already has both certificates:

-----BEGIN CERTIFICATE-----
[Certificate for intermediate CA]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Certificate for root CA]
-----END CERTIFICATE-----

So cat intermediate.pem root.pem >chain.pem is just appending the root certificate again, without effect

Yes, if they already gave you a chain then there’s no need to concatenate them. Using this chain directly in the network manager configuration for eduroam on your machine doesn’t work? That’s rather strange. Or do you just rely on system CAs and didn’t select a CA certificate within the eduroam configuration directly?

No, I did specify this “custom certificate” that was provided by my university, exactly as they told us. I tried with the automatic eduroam configuration tool as well as configuring manually, with the same unsuccessful result.
So yes, it is quite strange. It almost looks like Fedora is reading the certificate file, checking the fist certificate (intermediate CA) but ignoring the second one (the root CA) and pretending it could not find it…

Weird yes, because specifying such a chain as ca-cert in the eduroam NetworkManager
nmconnection had worked for years on Fedora.

I suggest to verify the nmconnection declared and the content of this chain.

Assuming the nmconnection name is eduroam, the following command will give the pathname of the chain used:

nmcli --fields 802-1x.ca-cert connection show eduroam
802-1x.ca-cert: PATH_TO_THE_CHAIN_FILE

Then check this file as follows (from a bash shell):

chain_file=PATH_TO_THE_CHAIN_FILE # instanciate that from the previous result

ls -l $chain_file
file $chain_file

rm -f /tmp/c?
awk '
    BEGIN { n=0 }
    /BEGIN CERTIFICATE/ { n++ }
    { print > "/tmp/c" n }
' $chain_file

for i in /tmp/c?; do
    openssl x509 -in $i -noout -subject -issuer
    echo
done

Send us this result.

This is what I get:

-rw-------. 1 anybest anybest 4164 20 janv. 20:48 /home/anybest/.local/share/geteduroam/ca-cert.pem
/home/anybest/.local/share/geteduroam/ca-cert.pem: PEM certificate
subject=C=GR, O=Hellenic Academic and Research Institutions CA, CN=GEANT TLS RSA 1
issuer=C=GR, O=Hellenic Academic and Research Institutions CA, CN=HARICA TLS RSA Root CA 2021

subject=C=GR, O=Hellenic Academic and Research Institutions CA, CN=HARICA TLS RSA Root CA 2021
issuer=C=GR, O=Hellenic Academic and Research Institutions CA, CN=HARICA TLS RSA Root CA 2021

Seems fine, except perhaps the location and modes of the chain file: it will not be
accessible to NetworkManager and/or wpa_supplicant if they don’t run as root.

The logs (journalctl) of NetworkManager may perhaps show that.

One may try to put this file under /etc and configure the nmconnections to use it.
As follows for example:

sudo rsync -pit --chmod a=r /home/anybest/.local/share/geteduroam/ca-cert.pem /etc/pki/eduroam-ca-cert.pem 

nmcli connection modify eduroam 802-1x.ca-cert /etc/pki/eduroam-ca-cert.pem

then try to connect to eduroam.

I finally found a solution:
A friend of mine also has Fedora and encountered the same issue, but was able to connect to eduroam via a research institute. We looked at their certificate, they are only providing the root certificate, no intermediate, and it works just fine.

So we tried the same with university eduroam, and just submitting the root certificate did the job for both of us.
We also checked what happens if we inverse the certificates in the chain (root CA, then intermediate CA) and this also worked.

So it really looks like Fedora only needs the root certificate and is just happy when it is submitted first, but never looks at it when it is submitted second in the chain.pem file. But apparently on Ubuntu the certificate order is not a problem. For another friend with ArchLinux this also worked without any further configuration.

So is this a bug of Fedora not reading correctly a certificate that is accepted by all other OS? Or if we only need the root certificate, what is the point of university providing us with a certificate chain?

1 Like

Giving you the whole chain doesn’t hurt, especially if people are using systems that don’t have the root cert.

It’d be interesting to find out whether people have the same problems on non-Fedora systems that also use KDE. I’ll have a look at it tomorrow, I’m currently looking into RADIUS certificate stuff myself. I’m also using Fedora 43 KDE so I should be able to replicate the problem. We used to provide our users with the whole chain in the past and didn’t have any problems with most systems.

I’m curious if using system CAs works for you:

nmcli connection show
nmcli connection modify CON_NAME 802-1x.system-ca-certs yes

What I can say is the friend who had the same issues actually runs Bluefin, so this is with GNOME, not KDE. Friend with Arch runs KDE and did not encounter the issue, so this is probably not very helpful…

Anyway, thanks for looking at it. Now that I got involved into the topic, I’m actually curious about your results, so feel free to update us here :slight_smile:

Also is this a good idea to mark my post as a solution (at least temporary one)? It’s the first time I’m posting here so I’m not sure about good practices.

I had a similar problem a while ago. I think it’s related exclusively with wpa_supplicant. You could try to change the wifi backend to iwd to see if it works (at least for a while).

You can always return to wpa_supplicant by deleting the file /etc/NetworkManager/conf.d/iwd.conf given that you tried what I posted.

Same as @vgaetera I’d also be interested whether or not using the system CAs works for you. Would you mind giving it a try?

1 Like

Hi, I had the same issue. This fixed it for me too. Thanks!

For everyone stumbling upon this, a more indepth rundown of the fix:

Go to the certificate which is currently installed. I just went to wifi setting, security, CA certificate, then select from file… to see where it is currently located.
Upon clicking on the certificate I saw two certificates as described by @anybest, one of which has ‘ROOT’ in it’s name. For me this was listed second.
Open the file in a text editor and delete the certificate inside the first BEGIN CERTIFICATE bracket
Save and close.

I’m glad it works now, although I find this behavior very odd. Glad I found your post, thanks again.

1 Like

My testing confirmed what’s been said a number of timesby you guys in this thread before: you can’t use a CA chain as a CA certificate file. It only works if it contains the root cert. Strangely enough, not using a CA file at all works even for RADIUS certs issued by private (!) CAs that aren’t part of the bunch of trusted CAs. Does anyone have any insight why this works? It’s quite a significant security risk and if I remember correctly there used to be a UI element in the 802.1x settings along the lines of “accept any RADIUS certificate” (which you really shouldn’t!) which isn’t present at least in the KDE DE which would mean to me that either a given CA certificate file is used or the trusted CAs installed on the system. But trusting any RADIUS cert certainly isn’t a good choice.