Certificate Signing Request (CSR) aanmaken

Vooraf

Het kan een uitdaging zijn om een geldig certificaat te kunnen verkrijgen. Hoewel het de voorkeur heeft om een geldig certificaat van een erkende Certificate Authority (CA) te gebruiken, zijn er ook mogelijkheden om een eigen certificaat aan te maken en te laten tekenen door NICE. Hiervoor dient een Certificate Signing Request (CSR) te worden aangemaakt. Hieronder de uitleg.

Aanmaken van een CSR

Voor het aanmaken van een CSR kan openssl dit opensource pakket is meestal al aanwezig op linux distributies en is ook op windows mbv WSL (Windows Subsystem for Linux) te gebruiken. Als voorbeeld wordt ziekenhuisnummer 88 gebruikt. Het commando wat vervolgens moet worden uitgevoerd is:

user@localhost: ~> openssl req -newkey rsa:4096 -out zkh88.csr -keyout zkh88.key

Uitleg:

  • req is het subcommand om requests aan te maken
  • -newkey rsa:4096 is om een sleutel aan te maken met een lengte van 4096 bits.
  • -out zkh88.csr is het signing request en bevat de publieke sleutel. Dit is het bestand dat moet worden verstuurd, liefst met het ziekenhuisnummer in de bestandnaam.
  • -keyout zkh88.key is de private key en moet goed worden bewaard. Dit bestand mag NIET worden verstuurd.

Tijdens het uitvoeren van het commando krijg je de volgende output waarbij een paar vragen worden gesteld:

  • PEM pass phrase (2x) is het wachtwoord op de private key. (goed bewaren!)
  • Een tal van optionele vragen, zoals country name, state, locality etc. Deze zijn optioneel en mag naar eigen inzicht worden ingevuld.
  • Organisatie Name is ook optioneel maar we verzoeken om hier het ziekenhuisnaam in te vullen
  • Common Name (verplicht!). Vul hier het ziekenhuisnaam in.
  • De overige vragen laten we default.

Console output:

user@localhost: ~>openssl req -newkey rsa:4096 -out zkh88.csr -keyout zkh88.key
.......+..+.+.....+............+.......+......+..+...+....+..+...+.........................+.....+.+............+...+.....+.......+...+.........+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...............+......+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*........+......+....+.....+.+.....+.+........+.......+..+......+....+......+.....+..........+...........................+...+............+..+......+.+...............+...........+....+...+........+...+......+...+.+...........+....+..+..........+........+...............+.+......+..+...+.......+.................+.+...+..+.........+.+..+..........+...........+..........+.........+...........+...............+.........+...+....+...+..+......+...+................+...+......+............+.....+....+......+...+............+..+............+.+...............+...............+...+.........+.....+......+..........+..............+.............+..+.......+.....+...+..........+..+....+..+.........+....+.........+.....+...............+...+....+...............+..................+..+...+.............+........+....+........+....+...........+...+.+...........+...+.+........................+.....+....+.....+.....................+...................+......+.................+...+......+.+...+......+........+...+....+........+......+.+.........+.....+......+......+.......+..+......+...+....+......+......+........+.+............+..+.+..+.......+..+.+.........+.....................+..+.......+...........+...+.........+......+.+...+..+.....................+....+........+..........+..+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+.+.........+...+.....+......+....+...+............+..+.+..+.......+........+...............+...+...+.+...+...+........+......+...+.+..+.......+..+..........+.....+....+..+.........+......+.......+......+.........+.....+.+..+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+.........................+......+.........+..+..........+......+.....+....+.........+......+.....+...+.+......+.....+.+.....+..................+......+....+...........+....+..+....+.........+...........+.........+.........+...+...+..................................+.....+...+....+...+..+..........+.........+...............+...........+.............+..+.+.....+...+...................+..+.+.....+....+.....+......+..........+...............+..+................+...........+...+.............+.................+.+..............+.+..............+.......+......+..+.+...............+..............+...+....+.........+..+.........+...+...+...........................+.............+.........+......+...+.........+...+..................+..+..........+..+...+............+......................+.....+...+.+......+.....+...+...+.......+............+.....+.........+......+.+...+...........+.........+....+...+........+.+......+..+.......+........+..........+..+...+..........+...........+............+............+.......+...+......+.........................................+......+...+....+..+....+...........+....+..+.............+..+.......+...+..+.+.........+...........+......+.+.................+...+...+............+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:NL
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:Amsterdam
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nice Test Ziekenhuis
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Nice Test Ziekenhuis 88
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
user@localhost: ~>

Verificatie CSR

Wanneer je wilt weten wat er na de generatie van het CSR in het bestand is opgenomen, kan je het volgende commando gebruiken:

openssl req -text -noout -verify -in zkh88.csr
user@localhost: ~>openssl req -text -noout -verify -in zkh88.csr
Certificate request self-signature verify OK
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = NL, L = Amsterdam, O = Nice Test Ziekenhuis, CN = Nice Test Ziekenhuis 88
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
                Modulus:
                    00:92:2e:2d:f9:0f:a9:a4:82:02:e5:f2:1e:54:8d:
                    a7:d7:f5:bf:fd:1b:1d:2a:b8:dd:9a:dd:ae:f5:e3:
                    6f:ae:5a:ed:c9:fa:df:df:01:65:a3:04:32:03:dd:
                    ea:35:45:01:ed:79:59:5c:8f:14:71:18:ba:d9:72:
                    a2:b7:87:be:55:74:92:46:40:1f:54:9a:be:30:c3:
                    45:83:61:c6:84:14:3a:b8:5b:8f:9b:f3:9e:8e:38:
                    27:07:6d:d0:4f:6d:12:8e:13:17:ad:e8:b3:63:31:
                    d4:bd:40:c1:f7:b6:af:fe:82:ce:b4:16:1b:1c:ab:
                    30:90:cd:24:7f:5b:f7:da:36:7c:6b:91:03:37:71:
                    02:cd:b2:ca:c8:6f:e2:a6:0e:04:88:0c:09:04:63:
                    9c:02:c4:c4:38:03:f8:53:1d:9d:32:ac:6c:40:e0:
                    c5:b1:a6:a4:fb:6a:89:64:48:62:e1:88:fd:ac:40:
                    66:2c:bb:ec:d8:8a:19:58:13:88:c4:e3:f8:bf:0d:
                    20:c2:97:61:40:b5:84:ae:f6:48:95:85:e0:dc:2e:
                    d8:c5:c2:49:d4:7d:8d:2c:77:3c:58:47:64:2a:f1:
                    df:45:2d:10:8e:83:a2:bc:2e:b4:96:da:d4:5b:e6:
                    75:a5:03:ce:76:fc:d3:1a:77:a4:8d:3e:dd:25:57:
                    77:be:77:09:11:41:d3:26:8e:7a:27:f2:c1:10:d0:
                    3b:51:cc:c6:39:43:b9:09:13:2f:5f:04:66:82:0b:
                    05:3e:3b:61:a4:fd:ea:85:32:2c:6a:62:89:47:33:
                    df:fe:e2:b8:1b:55:56:8a:fc:69:ba:48:36:ab:1b:
                    cc:52:66:08:a3:75:19:f3:8b:09:33:f8:9a:4a:b8:
                    9c:9d:c4:22:6c:aa:86:01:5a:9f:66:6a:d8:3d:f6:
                    2f:37:66:64:7d:18:8b:22:ce:b6:e5:80:80:37:bc:
                    c7:37:91:c5:49:95:9f:d5:95:e8:a9:47:7e:b7:3d:
                    0d:f5:f4:f0:52:0f:87:38:cc:f0:12:75:6b:ea:82:
                    4d:bb:47:b5:29:10:5b:3a:3c:d9:38:03:e1:f0:ee:
                    7c:eb:9a:b7:e8:4b:e5:f4:fb:1c:f8:f6:2c:93:76:
                    46:3c:98:7a:b6:f1:6f:4a:19:30:17:23:16:6c:bd:
                    91:36:50:28:a9:8a:f0:98:42:11:52:c2:40:da:53:
                    7b:cd:b1:85:93:10:6b:2e:ca:6c:f0:de:ec:26:97:
                    b0:31:58:23:43:90:a2:a3:74:22:f0:46:1f:be:48:
                    d6:1d:8d:fc:ea:4a:b2:74:85:11:4b:bf:00:1a:c0:
                    e4:39:57:3e:24:d4:d2:e8:55:41:03:a8:db:6a:2d:
                    f7:12:1f
                Exponent: 65537 (0x10001)
        Attributes:
            (none)
            Requested Extensions:
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        83:6b:0e:fd:49:95:6d:85:ab:7d:4d:2a:d3:b6:41:b8:e1:46:
        a6:13:05:05:8b:7f:6e:6f:93:c1:6d:75:4d:14:41:38:69:09:
        4a:9e:47:1e:e7:90:02:f8:11:57:e2:2a:99:6a:b8:ef:81:9f:
        f0:3e:fa:1d:eb:d7:27:3f:c4:56:b1:a4:ff:f1:5a:94:d2:e0:
        e1:e2:55:09:b2:4d:ea:6b:81:32:b7:76:4b:7d:8e:7b:ad:3c:
        08:dc:b6:8b:42:8c:ae:2e:98:69:d9:4f:13:37:dc:72:b8:fc:
        9f:bb:5a:87:37:07:bd:cc:99:93:90:91:9b:9d:e1:40:03:28:
        2b:74:1f:ca:4f:4e:38:86:67:fe:66:25:cf:58:34:f6:e0:db:
        a4:a6:dc:df:4c:42:e9:d0:9d:0b:ae:5f:b2:83:36:97:c0:cd:
        5b:b3:93:6b:83:4a:e4:67:2d:c3:d0:f8:e6:af:90:74:f1:c9:
        36:36:09:a9:12:f9:ed:22:9d:40:7a:60:1a:dd:db:a4:4c:3b:
        f5:d3:10:38:89:bf:1a:da:2f:8d:ed:ca:bf:51:e2:05:27:4b:
        d2:7a:18:91:ff:e8:1d:5c:3a:e3:7b:e9:6a:0b:da:b7:a5:5f:
        8e:b3:18:7e:aa:f5:ff:43:93:ca:c2:fe:fd:c8:08:05:8f:f3:
        67:94:d7:aa:c7:cd:27:c4:36:5d:25:5a:dc:46:7e:fa:39:ff:
        69:8e:df:20:52:b6:05:16:4d:08:ab:7a:9b:e5:8e:98:35:32:
        54:31:29:f4:98:29:b1:a6:1e:71:db:b7:41:62:18:e4:79:cb:
        9e:d8:cf:2b:52:27:16:40:a8:d0:09:ae:bb:98:7e:cd:d8:e5:
        f1:48:64:d2:cd:4e:9a:55:9f:2d:a8:cb:27:0b:51:a4:33:f0:
        c2:c4:e6:55:1e:ba:45:a6:71:5e:c0:51:6e:9c:64:c6:cb:34:
        a4:c4:a0:41:16:e6:e2:8c:99:ea:30:86:73:74:5d:40:67:1d:
        2a:8f:d6:b5:20:0c:ae:5c:fa:25:bb:df:d1:e4:1e:cc:b8:43:
        ad:77:4b:f5:b8:4b:0a:04:4d:ee:3e:42:39:91:7e:19:57:d2:
        e6:b2:dc:a5:25:38:fa:0a:0c:0d:f2:f7:df:37:38:bb:a4:da:
        85:82:55:f5:cf:65:83:7d:de:5e:d9:a1:16:5d:a8:42:65:49:
        c9:80:ee:c2:f1:3d:89:9e:1f:b3:28:37:20:10:95:47:f6:a4:
        81:7e:03:e5:72:91:c9:fa:09:7f:3b:31:db:41:b2:2e:de:87:
        8b:28:85:aa:20:a7:32:b2:fa:ce:b5:01:15:c1:2c:eb:78:9f:
        07:d1:a6:91:b2:5d:2b:16

Belangrijk hier is Public-Key: (4096 bit) en de common name hier CN = Nice Test Ziekenhuis 88.

Opsturen CSR

Tijdens dit proces zijn er twee bestanden gemaakt:

  • zkh88.key: Dit is de private key en moet goed worden bewaard.
  • zkh88.csr: Dit is de certificate signing request. Met andere woorden het certificaat met de publieke sleutel die nog moet worden ondertekend.

Stuur vervolgens alleen het csr naar NICE via de mail.

Wanneer NICE dit ontvangt en verifieert, dan zal zij het CSR ondertekenen (signen) en daarna u het ondertekende certificaat (CRT) opsturen. Dit certificaat bevat nu de signature van NICE, wat aangeeft dat het door NICE wordt vertrouwd voor de duur van 1095 dagen (3 jaar).

Registreren

Een certificaat zelf heeft geen directe koppeling met een ziekenhuisnummer. Om deze koppeling te maken, moet het certificaat worden geregistreerd. Op de website van NICE heeft een gebruiker met de juiste rechten (role) de mogelijkheid om de public key te uploaden. Hiermee wordt het certificaat gekoppeld met het nice-ziekenhuisnummer van de ingelogde gebruiker.

Registreer hier je certificaat voor aanlevering via FHIR