Scheijgrond.com

Ik Google mijzelf

OpenSSL en de certificate chain

Een SSL certificaat (het slotje in de browser) bestaat eigenlijk uit een hele reeks certificaten die aan elkaar gerelateerd zijn. Er is het certificaat voor de site, dan 1 of meer intermediate certificaten en uiteindelijk aan het einde van de keten het Trusted Root of certificate authority certificaat. Deze laatste staan ook vaak al standaard geinstalleerd in besturingssystemen om certificaten te kunnen valideren.

Verificatie van de keten

In een van de projecten hadden we de sites en api's die we via Kubernetes hosten voorzien van een SSL certificaat welke binnen een NGinx instantie werd gebruikt om Transport Level Security (TLS) toe te voegen aan de sites en api's.

SSL zonder intermediate certificaat

De NGinx installatie was alleen voorzien van het laatste certificaat in de keten. Dit was voor de meeste browsers geen probleem en was de verbinding voldoende beveiligd voor een (groen) slotje. Sommige afnemers en ook openSSL vertrouwden het certificaat echter niet en gaven een foutmelding bij het controleren. De controle via openSSL is als volgt: openssl s_client -connect www.sitetocheck.com:443 Dit leide tot een error 21 unable to trust the first certificate dat een van de certificaten niet werd vertrouwd.

installeren van de volledige chain

In eerste instantie was de volledige chain niet in de juiste vorm beschikbaar. Verschillende pakketten gaan op verschillende manieren met de certificaten om. Er zijn applicaties die het laatste certificaat en de chain los zien van elkaar, maar NGinx wil de chain aan certificaten gecombineerd hebben tot 1 bestand waarbij het eind certificaat als eerste in de keten moet staan. Deze certificaten zijn gemakkelijk in 1 bestand te zetten middels cat eindcertificaat.crt chaincertificaat.crt > compleet.crt Voor het aanmaken van de certificaten zijn ook export opties beschikbaar die in 1 keer de juiste gegevens opleveren.

controleren of de set bij elkaar hoort.

Om te controleren of een certificaat, private key en certificate request bij elkaar horen kan ook openssl gebruikt worden om te controleren of alle bestanden dezelde hash hebben. Dit kan middels de commando's:

For your SSL certificate: openssl x509 -noout -modulus -in <file>.crt | openssl md5

For your RSA private key: openssl rsa -noout -modulus -in <file>.key | openssl md5

For your CSR: openssl req -noout -modulus -in <file>.csr | openssl md5

Gevonden op: www.SSL247.com

certificaten toevoegen aan Kubernetes

Om een certificaat in Kubernetes beschikbaar te maken kan hij als secret toegevoegd worden en vervolgens gebruikt worden in de deployment en ingress van applicaties. Het toevoegen van een certificaat als secret gaat als volgt:

kubectl create secret tls geheimnaam \
  --cert=path/to/cert/file \
  --key=path/to/key/file \
  -n namespace