| Home | Techniek | Keywords


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>