De non-profit organisatie waar ik wat vrijwilligerswerk doe wil de veiligheid van de IT infrastructuur verbeteren. Ik heb daarbij aangeboden om EAP-TLS te implementeren als WIFI beveiliging, onder andere om de gevolgen van de verspreiding van het PSK wachtwoord in de huidige situatie voorgoed in te dammen. En omdat ik het leuk vind om te doen
Relevante software en hardware die ik gebruik
ALs test heb ik een labje gemaakt met een Cisco WLC, drie Cisco lightweight AP's en een Freeradius server die draait op Debian 10. De bedoeling is dat Windows 10 en Android 10 of hoger uiteindelijk kan connecten met de WIFI via certificaten (EAP-TLS).
Het is me gelukt om de basis waarbij enkel username/password (PEAP) betrokken is, te laten werken op alle systemen. EAP-TLS.... not so much. Ben nu al dagen bezig
Er zijn wat handleidingen te vinden op Internet om EAP-TLS te configureren, maar die zijn vaak incompleet, oud, onduidelijk of een combinatie daarvan. Dat maakt duidelijk info gefragmenteerd, en lastig te interpreteren op mijn situatie.
Ik loop voornamelijk aan tegen creëren van de relevante certificaten, configuratie daarvan en die compatible zijn met zowel Windows 10 als Android. Degenen die ik maak bij genoemde gevonden info op indernet worden niet geaccepteerd door Windows, of Android. Bijvoorbeeld PEM certs snapt Windows niet, Pem certs die samen gaan met een .key file snapt Android niet (die .key files Windows geloof ik ook niet), P12 certs lijkt Android zich in te verslikken, ik weet niet goed hoe Freeradius op PFX files reageert....Het helpt ook niet dat ik niet zo thuis ben in certificaten.
Mijn vraag/uitdaging:
Heeft iemand dit al eens gedaan en werkend gekregen? Zo ja, hoe heb je het gedaan, en zou je een handleiding willen maken?
Om het interessant te maken knip
[Voor 14% gewijzigd door Question Mark op 19-07-2021 19:38]
Ok, ik had achteraf zelf ook wel kunnen bedenken dat dit kon gebeuren.
Excuses aan iedereen die hierbij betrokken is
Dat gezegd hebbende, niemand heeft gereageerd. Misschien ben ik wel de enige idioot in Nederland dit interessant/belangrijk vind.
Ondertussen heb ik zelf ook niet stil gezeten, en ik heb het inmiddels al 'opgelost'. Dus dan kan ik net zo goed mijn eigen vraag gaan beantwoorden. "Wat heb ik daaraan" hoor ik u roepen. Ja, hee, zoek dat lekker zelf uit! Misschien ben je die andere zeldzame medelander die dit ook interessant vind. Of heb je een k*topdracht van je baas gekregen met betrekking hierop. Of gewoon, omdat het kan. Of misschien heb je er ook helemaal niks aan.
Ik zal nu stap voor stap aangeven hoe je vanuit vrijwel niks een Freeradius server opzet voor EAP-TLS, en Windows-, Android 10/11 en IOS-clients kan laten connecteren op een WIFI netwerk met deze methode. Het is geschreven vanuit het perspectief dat je net als ik 'iets weet van computers', maar weinig van Linux, certificaten en Freeradius.
Benodigd: een computer met Linux (ik gebruik Debian 10, maar andere kunnen waarschijnlijk ook). Heb je die niet? Geeft niet, je hebt niet veel nodig. Die ouwe computer die in de kast ligt te verstoffen voldoet waarschijnlijk al. Of je schaft een Raspberry PI aan (kost weinig) en installeert er Raspberry PI OS op. Het kan ook in een VM. Zoek het uit, er zijn een miljoenmiljard handleidingen te vinden op internet hoe je een basis linux installatie doet.
Verder heb je een Access Point nodig die 802.1x authenticatie ondersteund. Waarschijnlijk niet die van je provider. Enige bekendheid met je AP is erg handig. Anders heb je Google.
Je omgeving is wat je typisch thuis aantreft. Alle Clients zijn unmanaged, en/of zijn geen onderdeel van een logisch netwerkidentiteit (domeinen e.d.)
DISCLAIMER: Dit is bedoeld voor educatie en hobby, mijn kennis van alle genoemde is eigenlijk zwaar onvoldoende. Ik neem aan dat meer ervaren tweakers bij het lezen zullen gaan lachen of facepalmen. Het resultaat werkt echter wél. Maar ik raad het ten zeerste af het eindproduct 'as is' te gebruiken in een professionele omgeving.
Basis Installatie Freeradius
Ok, je hebt je linux-bak vers klaargemaakt, en je opent een terminal sessie ernaar.
Eerst ga je wat algemene updates uitvoeren:
ijsblok@Debian-VM:~$ sudo apt update
Installeer Freeradius (vanuit de repository)
ijsblok@Debian-VM:~$ sudo apt install freeradius
Configureer freeradius om verkeer van de ap/router te accepteren. Hierna te noemen als NAS (Network Access Server, niet verwarren met dat ding van Synology op je zolderkamer). Browse naar /etc/freeradius/3.0.
Makkelijkste omdat als root te doen:
ijsblok@Debian-VM:~$ sudo -i
root@Debian-VM:~# cd /etc/freeradius/3.0/
root@Debian-VM:/etc/freeradius/3.0#
Druk ctrl+o om op te slaan, dan ctrl+x om af te sluiten.
NB: andere al ingestelde regels komen later nog van pas.
Je kunt het beste even testen of je client.conf file ‘goed’ hebt ingevuld. Dwz, vanuit het oogpunt van Freeradius natuurlijk. Kan je doen in debug mode.
Eerst freeradius service even stoppen:
Freeradius zal nu vergeten brackets, spelfouten en dergelijke weergeven, indien aanwezig.
Als de laatste regel is
Ready to process requests
Dan is het goed.
NB: mocht je nog een foutmelding krijgen iets met ‘failed binding’, dan heb je de freeradius service niet gestopt voordat je debug mode startte.
Druk ctrl+c om debug mode te beëindigen.
EAP-TLS
Voor EAP-TLS zijn certificaten nodig. In de Freeradius package is al e.e.a. voor je klaargezet om op een eenvoudiger manier (als bijvoorbeeld met openssl) wat certificaten te maken en de ‘tekenen’. We hebben een CA (root) certificaat nodig, een server certificaat en een client certificaat.
Ga naar de ‘certs’ directory
root@Debian-VM:/etc/freeradius/3.0# cd certs
root@Debian-VM:/etc/freeradius/3.0/certs# dir
bootstrap client.cnf inner-server.cnf README xpextensions
ca.cnf dh Makefile server.cnf
root@Debian-VM:/etc/freeradius/3.0/certs#
In deze dir staan een paar .cnf files. Die kan je openen met een tekst editor, en dat gaan we ook doen; met client.cnf, server.cnf en ca.cnf. We beginnen met ca.cnf voor de ca certifcaten.
NB: De certs dir is ook als default certificaat dir voor Freeradius. Dit kan je terugvinden/aanpassen in de verschillende configuratie bestanden.
Je kunt hier vanalles aanpassen, bijvoorbeeld de encryptiesterkte van je certificaat. Maar we focussen nu op wat het meest belangrijk is voor deze handleiding. Twee sectie zijn relevant: [ req ] en [certificate_authority].
Belangrikste is om hier countryName, stateOrProvinceName localityName en commonName aan te passen. De commonName is hoe het certificaat gaat heten wanneer je hem zou willen terugvinden in bijvoorbeeld Windows. De rest is wat optioneel, maar je moet wel de wachtwoorden onthouden.
ca.der, ca.key, en ca.pem zijn aangemaakt. Voor linux gebruiken we de .key en .pem file, waarvoor .der file voor dient is mij niet duidelijk. Ik lees hier en daar dat het bedoeld zou zijn voor Windows, maar daar werkt het voor zover ik weet in elk geval niet. Hier komen we later op terug.
[ req ]
prompt = no
distinguished_name = server
default_bits = 2048
input_password = supersecretpassword123
output_password = supersecretpassword123
[server]
countryName = NL
stateOrProvinceName = Netherlands
localityName = Amsterdam
organizationName = EAP-TLS voor dummies united
emailAddress = admin@eap-tls4dummies.org
commonName = "ServerCert4Dummies"
Belangrijk is wel dat de commonName anders is dan die van de CA. CountryName, stateOrProvinceName, localityName en organizationName moeten hetzelfde zijn als die van de CA.
Opslaan en certificaat maken
root@Debian-VM:/etc/freeradius/3.0/certs# make server
openssl req -new -out server.csr -keyout server.key -config ./server.cnf
Generating a RSA private key
...........................................................+++++
.........................................................................+++++
writing new private key to 'server.key'
-----
chmod g+r server.key
openssl ca -batch -keyfile ca.key -cert ca.pem -in server.csr -key 'supersecretpassword123' -out server.crt -extensions xpserver_ext -extfile xpextensions -config ./server.cnf
Using configuration from ./server.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Jul 27 12:09:39 2021 GMT
Not After : Sep 25 12:09:39 2021 GMT
Subject:
countryName = NL
stateOrProvinceName = Netherlands
organizationName = EAP-TLS voor dummies united
commonName = ServerCert4Dummies
emailAddress = admin@eap-tls4dummies.org
X509v3 extensions:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 CRL Distribution Points:
Full Name:
URI:http://www.example.com/example_ca.crl
Certificate is to be certified until Sep 25 12:09:39 2021 GMT (60 days)
Write out database with 1 new entries
Data Base Updated
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -passin pass:'supersecretpassword123' -passout pass:'supersecretpassword123'
chmod g+r server.p12
openssl pkcs12 -in server.p12 -out server.pem -passin pass:'supersecretpassword123' -passout pass:'supersecretpassword123'
chmod g+r server.pem
server.pem: OK
root@Debian-VM:/etc/freeradius/3.0/certs#
root@Debian-VM:/etc/freeradius/3.0/certs# make client
openssl req -new -out client.csr -keyout client.key -config ./client.cnf
Generating a RSA private key
.....+++++
............................................................+++++
writing new private key to 'client.key'
-----
chmod g+r client.key
openssl ca -batch -keyfile ca.key -cert ca.pem -in client.csr -key supersecretpassword123' -out client.crt -extensions xpclient_ext -extfile xpextensions -config ./client.cnf
Using configuration from ./client.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 2 (0x2)
Validity
Not Before: Jul 27 12:27:08 2021 GMT
Not After : Sep 25 12:27:08 2021 GMT
Subject:
countryName = NL
stateOrProvinceName = Netherlands
organizationName = EAP-TLS voor dummies united
commonName = youknownothinJS@eap-tls4dummies.org
emailAddress = youknownothinJS@eap-tls4dummies.org
X509v3 extensions:
X509v3 Extended Key Usage:
TLS Web Client Authentication
X509v3 CRL Distribution Points:
Full Name:
URI:http://www.example.com/example_ca.crl
Certificate is to be certified until Sep 25 12:27:08 2021 GMT (60 days)
Write out database with 1 new entries
Data Base Updated
openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 -passin pass:'supersecretpassword123' -passout pass:'supersecretpassword123'
chmod g+r client.p12
openssl pkcs12 -in client.p12 -out client.pem -passin pass:'supersecretpassword123' -passout pass:'supersecretpassword123'
chmod g+r client.pem
cp client.pem 'youknownothinJS@eap-tls4dummies.org'.pem
root@Debian-VM:/etc/freeradius/3.0/certs#
In certs map staan nu een boel certificaat bestanden. Voor linux gebruiken we voor nu de PEM en KEY bestanden.
NB: er staan ook CRT en P12 bestanden. Het lijkt er dus op dat er al gesigneerde certificaten zijn voor clienten zoals bijvoorbeeld een Windows machine Maar dat blijkt niet zo te zijn. Ik kom hier later op terug.
Vreemd genoeg, hoewel de certmap dus de standaard certdir is voor freeradius, alles wat je aanmaakt moet nog de juiste toegangsrechten krijgen voor freeradius om ze te kunnen gebruiken.
Voor het gemak passen we alles maar aan.
Nu moeten we Freeradius configureren voor TLS met de nieuwe certificaten. Hiervoor bewerken we het bestand ‘EAP’
root@Debian-VM:/etc/freeradius/3.0/certs# cd ..
root@Debian-VM:/etc/freeradius/3.0# cd mods-enabled
root@Debian-VM:/etc/freeradius/3.0/mods-enabled# nano eap
NB: De EAP file heeft al wat voorbeeld certificaten (‘snakeoil’) gedefinieerd voor Freeradius. Het wordt afgeraden om deze anders te gebruiken dan voor test. In deze handleiding worden in zijn geheel niet gebruikt.
De ${certdir} variabele wordt gedefinieerd in de radiusd.conf file. Standaard is die dus /etc/freeradius/3.0/certs. Als je een ander cert dir wil, kan je het beste dat daar aanpassen.
Het is mij niet duidelijk waarom de aangegeven ‘standaard’ tempdir in de /tmp dir staat, deze wordt standaard bij elke reboot geleegd. Dit heeft als gevolg dat freeradius niet start als je tempdir daarin staat.
NB: freeradius checkt de rechten van deze dir. Als die ‘te ruim’ zijn (bijvoorbeeld toegankelijk voor iedereen) dan zal de freeradius service niet starten om veiligheidsoverwegingen.
Check of alles nog werkt door freeradius weer in debug mode te starten
Deze stap kan je overslaan, maar kan inzicht geven als dingen niet werken met Windows/Android/IOS. Daarom dat ik het toch even behandel.
Met wat installatie en configuratie, maken we een soort NAS en client op je linux bak. Daarvoor gebruiken we onder andere software genaamd WPA_supplicant.
Deze moet je manueel downloaden en uitpakken. Om te kijken wat de laatste versie is, check https://w1.fi/wpa_supplicant/. Op deze pagina staat ook de download link. In mijn geval was het versie 2.9.
NB: voor de test kan je bij identity alles invullen wat je wilt, heeft weinig invloed op het eindresultaat. Wel kan je in de logs zien dat wat je invult wellicht niet bestaat. Je kunt dit ‘mooier’ maken door een user met dezelfde naam aan te maken in de ‘users’ file.
Nu kan je testen. Open een extra terminal naar je Linux bak, zodat je er twee hebt.
In de ene start je freeradius in debug mode
Als het eindigt met SUCCESS dan werkt het. Met FAILURE dus niet. Je zou dan kunnen natrekken waar het fout gaat door het achtergebleven log te bekijken. Als deze handleiding nog recent is, dan is de kans het grootst dat je iets uit deze handleiding niet juist hebt overgenomen. Als deze handleiding oud is… sterkte...
Nu je een werkende Freeradius voor EAP-TLS hebt opgeleverd, kan je Freeradius als een service gereed maken. Beëindig de debug mode, als die die nog aan staat.
Dan configureer Freeradius te starten bij boot
Ik heb hier geen handleiding voor want ik ken je NAS niet. Maar zorg ervoor dat je NAS een SSID heeft met WPA2 (enterprise) 802.1x authenticatie, en dat er een RADIUS server is geconfigureerd met het IP-adres van je linux-bak en het wachtwoord wat je eerder in clients.conf hebt opgegeven.
Certificaten opnieuw aanmaken/signeren voor Windows/Android/IOS
Zoals eerdergenoemd, is mijn ervaring dat de certificaten zoals aangeboden in de /certs map niet gereed blijken te zijn voor iets anders dan linux, hoewel veel documentatie anders beweerd. Ik weet niet hoe dat komt, maar ik krijg foutmeldingen in Windows als ik de huidige ca certs en client certs (p12) probeer te importeren in Windows, en Android lijkt er ook geen raad mee te weten. Sterker nog, ik krijg het niet voor elkaar om werkende certificaten te creëren door de boel opnieuw te te converteren naar de juiste format en/of te signeren met openssl in Linux. Gelukkig werkt het (gek genoeg) wel met openssl op Windows. En gelukkig zijn de basis bestanden wél goed.
Wanneer geïnstalleerd is het handig om de openssl.exe (te vinden in je installatiemap) te kopiëren naar %windir%/system32, of op andere manier in PATH te hebben.
Vervolgens zorg je dat de volgende bestanden in een map staan op je Windows-bak, ze staan in de /certs map van freeradius:
Ca.pem
Client.key
[email@adres.nl].pem (in mijn geval youknownothinJS@eap-tls4dummies.org.pem)
Hoe je daar krijgt hangt van je omstandigheden af. Google het eventueel.
Wanneer eenmaal gereed, open een command prompt, en ga naar de map waar je bestanden hebt gelaten. En voer het volgende uit
D:\certs>openssl x509 -outform der -in ca.pem -out ca.crt
Nu is een root cert gemaakt wat werkt buiten linux. Nu nog het client certificaat:
D:\certs>openssl pkcs12 -in [email@adres.nl].pem -inkey client.key -certfile ca.pem -export -out client.p12
Enter pass phrase for client.key:
Enter Export Password:
Verifying - Enter Export Password:
D:\certs>
Bij [email@adres.nl].pem heb ik dus youknownothinJS@eap-tls4dummies.org.pem opgegeven. Bij ‘Enter pass phrase for client.key:’ vul je het wachtwoord ‘Supersecretpassword123’ of datgene wat je zelf eerder verzonnen hebt. Bij ‘Enter Export Password:’ verzin je weer een nieuw wachtoord (mag hetzelfde wachtwoord zijn als wat je zojuist hebt gebruikt).
Nu is er een werkende client cert aangemaakt.
NB: Je kunt deze commando’s precies zo uitvoeren op je linux bak. Maar ik heb de ervaring dat het om onduidelijke redenen niks werkends oplevert.
Nu gaan we de gemaakte certificaten (ca.crt en client.p12) installeren op de verschillende besturingssystemen.
Windows 10 (20H2)
Dubbelklik ca.crt
Klik 'Install Certificate...'
Selecteer ‘Local machine’ en Next
Gewoon zo laten, klik ‘next’
Klik Finish
Dubbelklik client.p12
Kan je zo laten, klik Next
Klik Next
Vul het export wachtwoord in wat je hebt opgegeven bij aanmaken van het certificaat in Windows. Klik Next
Kan je zo laten. Klik Next
Klik finish
Ga naar settings --> Network & Internet --> Wifi
Klik op ‘Manage known networks’
Klik ‘Add a new network’
Tik bij “network Name’ het SSID van je NAS wat geconfigureerd is voor 802.1x. In dit voorbeeld heet hij 'Hyperv'. Bij ‘Security type’ selecteer je ‘WPA2-Enterprise AES’, bij ‘EAP Method’ selecteer je ‘Smart Card or other certifcate’. Klik ‘Save’
Dan selecteer de SSID van de lijst
Klik ‘Connect’
Klik ‘Connect’
Jeej! Verbonden!
Android 10
Zorg ervoor dat ca.crt en client.p12 die je aangemaakt hebt in Windows, in de /downloads map staan van je android apparaat.
Ga dan naar Settings --> Biometrics and security --> Other security settings
Tap ‘Install from device storage’
Begin met ca.crt. tap ‘done’
Geef het een makkelijk te herkennen naam. Tap ‘OK’
Doe nu de client.p12. Tap ‘Done’
Vul het export wachtwoord in wat je eerder hebt ingegeven bij het maken van het certificaat in Windows. Tap ‘OK’
Geef het een herkenbare naam. Tap ‘OK’
Ga nu naar je WIFI settings en tap je 802.1x SSID. In dit voorbeeld 'Hyperv'
Selecteer zoals in plaatje. Je moet iets invullen bij ‘Identity’ anders werkt het mogelijk niet. Maakt niet uit wat. Klik op ‘Connect’
Jeej! Verbonden!
Android 11
In android 11 werkt het vrijwel hetzelfde als in Android 10. Maar er is een belangrijk verschil bij het verbinden naar je 802.1x SSID:
Er is een extra veld bijgekomen, ‘Domain’. Hier moet je de naam invullen wat je hebt opgeven bij ‘commonName’ van het server certificaat.
NB: In een grote-mensen-omgeving zal je waarschijnlijk hier iets anders moeten opgeven. Google het.
IOS
Hier is een link van iemand die het werk al zo'n beetje voor me gedaan heeft, dus die kan je volgen
In deze handleiding wordt als bron de webpagina van Mikrotik router gebruikt. Maar je kunt de CA.crt en de client.p12 ook per mail sturen als attachments naar het emailadres wat geconfigureerd staat in de standaard mail app van je Apple device, en vandaar 'openen' (dubbeltappen). Pak het dan weer op waar in de handleiding het deel 'Configure CLIENT PROFILE:' begint.
Normaliter wordt EAP-TLS in een professionele omgeving uitgerold met een MDM (IOS/Android) of AD Policies (Windows). Eindgebruikers krijgen normaalgesproken geen mogelijkheden om de ontvangen certificaten te bekijken/exporteren op hun device.
Ik vind het in elk geval beter dan het standaard WIFI wachtwoord waar sommige bedrijven nog steeds mee werken dat zogenaamd 'geheim' moet blijven, maar dat je als eindgebruiker na verloop van tijd de uitzondering bent als je het wachtwoord NIET weet
Tja je kan je afvragen in zo'n geval waarom vraag je dan een wachtwoord. Anderzijds kijk waartegen je je netwerk moet beschermen als het niks anders is dan internet toegang laat het dan en zet het open is het in ieder geval duidelijk dat het een open onveilig netwerk is.
Voor een Tweaker is de weg naar het resultaat net zo belangrijk als het resultaat.
Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.
Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.
Functioneel en analytisch
Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie.
Meer details
janee
Relevantere advertenties
Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht.
Meer details
Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.
Ingesloten content van derden
Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden.
Meer details