Certificaten om in te loggen
Wat is er mooier dan zelf certificaten maken om via https in te loggen in je eigen website. Deze beschrijving regelt het maken in installeren van die certificaten. De authenticatie gaat niet verder dan het controleren of het certificaat klopt.
Nadeel is dat certificaten als inlogmechanisme wel wat problemen oplevert: gebruikers weten niet wat het is, configuratie in apache kan lastig zijn als je tegelijkertijd andere authenticaties toestaat.
Selfsigned server certificate maken
Maken een private key:
openssl genrsa -des3 -out server.key 2048
Maak een CSR
openssl req -new -key server.key -out server.csr
Verwijder het wachtwoord van de key
cp server.key server.key.org openssl rsa -in server.key.org -out server.key
Maak een self signed certificate (dit zou je ook kunnen gebruiken voor je server key, maar daar gebruik je tegenwoordig let’s encrypt voor.
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
De client keys
Nu gaan we de keys maken waarmee je client via de browser kan inloggen.
Maak een client key aan
openssl genrsa -des3 -out jaap.key 2048
Maak een CSR voor de client
openssl req -new -key jaap.key -out jaap.csr
(vul hier de velden in. Common Name wordt belangrijk, hier kan je b.v. mee zoeken in de LDap)
ga nu de client key tekenen
openssl x509 -req -days 365 -in jaap.csr -CA server.crt -CAkey server.key -set_serial 01 -out jaap.crt
Maak er een pkcs van
openssl pkcs12 -export -clcerts -in jaap.crt -inkey jaap.key -out jaap.p12
Maak er een gecombineerde pem van
openssl pkcs12 -in jaap.p12 -out jaap.pem -clcerts
Maar wat we met dit laatste moeten, is mij niet duidelijk. Het stond zo aardig in het voorbeeld…
De Server
Nu moet het geheel op de server worden geïnstalleerd. Om het goed te laten werken zal je de headers module moeten laden.
Een mooie beschrijving is te vinden op Apache site. Daar kan ik verder weinig aan toevoegen. Dat weinige zijn de headers. Het zou kunnen dat je client applicatie iets wil doen met de gegevens van de ingelogde gebruiker. Hieronder een voorbeeld:
<Directory /home/jaap/public_html> SSLVerifyClient require SSLVerifyDepth 1 Header set MyHeader "Hello Jaap, dit is een header voor de browser, op de terugweg." RequestHeader set X-Client-Name "%{SSL_CLIENT_S_DN_CN}s" RequestHeader set X-Client-Verify "%{SSL_CLIENT_VERIFY}s" RequestHeader set X-Client-Serial "%{SSL_CLIENT_M_SERIAL}s" RequestHeader set X-Client-DN "%{SSL_CLIENT_S_DN}s" </Directory>