Certificaat testen met Curl
Vooraf
Voor het testen van een certificaat, maken we onderscheid tussen:
- het maken van een connectie en authenticatie
- Het maken van een call met de FHIR service en authorisatie.
Als voorbeeld maken we gebruik van ziekenhuis 88. We hebben drie bestanden nodig:
- de private key: zkh88.key
- de public key: zkh88.crt
- de CA-chain: nice-ca-chain.pem
De NICE CA Chain is hier te downloaden.
Let op: de CA-chain anders kan zijn, indien u gebruik maakt van een erkende CA!
Connectie en authenticatie
Als eerste willen we alleen kijken of het certificaat geaccepteerd wordt door de server. Dit kan op verschillende
manieren. Hier maken we gebruik van de tool curl
. Met curl kunt u het commando gebruiken:
curl --cert zkh88.crt --key zkh88.key --cacert nice-ca-chain.pem https://fhir.stichting-nice.nl/R4/metadata
Omdat het certificaat nog niet geregistreerd is, krijgt u het volgende antwoord:
<!doctype html><html lang="en"><head><title>HTTP Status 403 – Forbidden</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 403 – Forbidden</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Access to the requested resource has been denied</p><p><b>Description</b> The server understood the request but refuses to authorize it.</p><hr class="line" /><h3>Apache Tomcat</h3></body></html>
Wanneer er in het antwoord de http status 403
staat, betekent dit dat het certificaat is geaccepteerd, maar dat aan het
certificaat nog geen rechten zijn gekoppeld. Dit klopt omdat het pas rechten krijgt wanneer het certificaat wordt
geregistreerd.
Wanneer het antwoord de http status 401
is, dan is het certificaat niet geaccepteerd. Mogelijk is dan het certificaat
niet goed (bijv expired) of is de ca-chain niet goed of de ca-chain ontbreekt. Een voorbeeld hiervan is een curl opdracht zonder certificaat:
curl https://fhir.stichting-nice.nl/R4/metadata
Het antwoord:
<!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized .....
Indien de CA-chain niet goed is, of zoals hieronder ontbreekt:
curl --cert zkh88.crt --key zkh88.key https://fhir.stichting-nice.nl/R4/metadata
Dan geeft curl zelf een foutmelding:
curl: (56) OpenSSL SSL_read: error:0A000418:SSL routines::tlsv1 alert unknown ca, errno 0
Connectie en autorisatie
Wanneer het certificaat is geregistreerd via de certificaat registratie applicatie (registratie-certificate applicatie), dan geeft hetzelfde curl commando die we eerst zonder registratie hadden verstuurd en antwoordde met http status 403 geeft, nu een http status 200 (ok) met als body de fhir capability statement:
curl --cert zkh88.crt --key zkh88.key --cacert nice-ca-chain.pem https://fhir.stichting-nice.nl/R4/metadata
{"resourceType":"CapabilityStatement","status":"active","date":"2024-05-22T14:05:43+02:00","publisher":"Not provided","kind":"instance","software":{"name":"HAPI FHIR Server","version":"5.1.0"},"implementation":{"description":"HAPI FHIR","url":"https://fhir.stichting-nice.nl/R4/"},"fhirVersion":"4.0.1","format":["application/fhir+xml","application/fhir+json"],"rest":[{"mode":"server","resource":[{"type":"Bundle","profile":"http://hl7.org/fhir/StructureDefinition/Bundle",
... etc
Hiermee is de test geslaagd: Het certificaat is geaccepteerd en geauthoriseerd.