X509Credential with UZI server certificates
PKI
Care overheidorganizations &authenticate with an X509Credential, created from their UZI server certificatescertificate.
TheThis Dutchpage governmentexplains has a Public Key Infrastructure (PKI) that is used to establish trust between parties. The PKI framework is currently in place and makes use of PKI Overheid Certificates issued byhow the rootcertificate CAsends of the Dutch government. In healthcare a specific instance of PKI overheid certificates are issued: the UZI certificates. These certificates are used to establish trust between partiesup in the healthcarecredential, sector.and Thewhat a use case's Discovery Service and policy definitions need to check.
For the X509Credential and did:x509 in general, see RFC023. For how to create one, see "Get an X509Credential from a UZI certificate" in Implementing a Nuts v2 Use Case.
Which CA to trust: the CA tree
UZI server certificates are issued by the UZI register,register which(CIBG), under the PKIoverheid hierarchy. The X509Credential's issuer is a trusteddid:x509 partyDID, thatwhich iscontains capablethe fingerprint (ca-fingerprint) of verifyingone CA in the identitycertificate's chain. A definition trusts a CA by listing its fingerprint.
Use the fingerprint of the holderUZI CA: the CA that issues the UZI server certificates. Not the root or intermediate CA above it: those also issue certificates through other providers (e.g. KPN, DigiCert), which don't contain a URA.
Production G1
Staat der Nederlanden Private Root CA - G1
└── Staat der Nederlanden Private Services CA - G1
├── UZI-register Private Server CA G1 ◄ ca-fingerprint
│ └── UZI server certificate
└── KPN, DigiCert, QuoVadis, ... (other providers, no URA)
Production G4 (from 12 November 2026)
Staat der Nederlanden - G4 Root Priv G-TLS - 2024
└── Staat der Nederlanden - G4 Intm Priv G-TLS SYS - 2024
├── UZI Server - G4 PKIo Priv G-TLS SYS - 2025 ◄ ca-fingerprint
│ └── UZI server certificate
└── KPN, DigiCert, Digidentity, ... (other providers, no URA)
Test G1
TEST Zorg CSP Private Root CA G1
└── TEST Zorg CSP Level 2 Private Services CA G1
└── TEST UZI-register Private Server CA G1 ◄ ca-fingerprint
└── UZI server certificate
Acceptance G4
ACCEPTATIE Zorg CSP - G4 Root Priv G-TLS - 2024
└── ACCEPTATIE Zorg CSP - G4 Intm Priv G-TLS SYS - 2024
└── ACCEPTATIE UZI Server - G4 Priv G-TLS SYS - 2025 ◄ ca-fingerprint
└── UZI server certificate
ca-fingerprint (SHA-256, base64url)
UZI-register Private Server CA G1
Production
vdhg746H4rLH67NN1unhdxo6PF3shQunCA4-KQTb2Jc
UZI Server - G4 PKIo Priv G-TLS SYS - 2025
Production, from 12 November 2026
sDTL__yv54TtrvSf7601TtvHgj2NZSLT2m-Okf8oqkI
TEST UZI-register Private Server CA G1
Test
GwlhBZuEFlSHXSRUXQuTs3_YpQxAahColwJJj35US1A
ACCEPTATIE UZI Server - G4 Priv G-TLS SYS - 2025
Test, acceptance
svKzNxhS07V1dKkekWOZV0d6Ao7_qvjqXegWB32YjZE
CIBG starts issuing G4 certificates on 12 November 2026; G1 certificates stop working on 12 November 2028. Until then, definitions should trust both.
From certificate to credential
These certificate fields end up in the X509Credential:
subject.O
credentialSubject.subject.O
Name of the UZI certificate structure for organisations
The UZI certificate is used to identify the holder of the certificate. The UZI certificate contains information about the holder of the certificate. This information is used to identify the holder of the certificate. The UZI certificate contains the following information (of intrest):
subject.CNsubject.Osubject.serialNumber subject.Csubject.STsubject.L
credentialSubject.subject.L
City
san.otherName
credentialSubject.san.otherName
UZI number, URA and more, see below
The subjectURA locality (city)
subject.CNsan.otherName
san.otherName is one string containingwith seven parts, separated by -:
<OID CA>-<versie-nrversion>-<UZI-nrUZI number>-<pastypepass type>-<Abonnee-nrURA>-<rolrole>-<AGB-AGB code> 2.16.528.1.1007.99.2110-1-900025039-S-90000382-00.000-00000000,
-
<Part Example Meaning
2.16.528.1.1007.99.2110
<versie-nr>1
900025039
Number of the <UZI-nr>subject.serialNumber<pastype>S
S<Abonnee-nr>90000382
00.000
<rol>00.000
00000000
<AGB-code>Mapping UZI certificate to X509Credential
TheTo mapping of certificates to did:x509 depends on the UZI X.509 Certificate structure.
The ROOT G3
The did:x509 specification dictates that the fingerprint of the Root CA is part of the did:x509. For mapping an UZI certificate to an X509Credential the ROOT CA MUST match one of the certificates in the UZI ROOT CA register hierarchy. For G3 this is:
┌────────────────────────────────────┐
│ Staat der Nederlanden Root CA - G3 │
└────────────────┬───────────────────┘
│
┌────────────────────────▼───────────────────────────┐
│ Staat der Nederlanden Organisatie Services CA - G3 │
└────────────────────────┬───────────────────────────┘
│
┌────────────────────▼───────────────────────┐
│ UZI-register Medewerker niet op naam CA G3 │
└────────────────────────────────────────────┘
Field mapping of the UZI credential
The following fields are commonly used for mapping UZI certificates to X509Credentials
subject.Osubject.Osubject.Lsan.otherName<OID CA>-<versie-nr>-<UZI-nr>-<pastype>-<Abonnee-nr>-<rol>-<AGB-code><OID CA>2.16.528.1.1007.99.2110<versie-nr><UZI-nr>subject.serialNumber<pastype>S<Abonnee-nr><rol><AGB-code>The use of UZI server certificate in the Nuts network or identifying organizations
The focus on trust in the NUTS network for organizations lies primarily onget the URA numberin identifieda asdefinition, use a pattern with a capture group on this field. The node then returns only the captured <Abonnee-nr>onpart, the UZI certificate. This number is used to identify the subject of the certificate within the Dutch healthcare ecosystem . The subject of the certificate can use the UZI certificatee.g. in combinationsearch with the private key to proof the ownership of the URA number. The diagram below shows how the UZI certificate can be used to transfer the trust from the UZI register acting as "authentieke bron" into the NUTS ecosystem using the did:x509 methodresults and thetoken X509Credential Verifiable Credential.introspection:
{
┌─────────┐"id": ┌──────────┐"organization_ura",
│"path": Keypair["$.credentialSubject.san.otherName"],
┼───────┤"filter": did:x509{ │"type": └────┬────┘"string", └────┬─────┘"pattern": │"^[0-9.]+-\\d+-\\d+-S-(\\d+)-00\\.000-\\d+$" │}
│ │
┌───────────┐ ┌───────┴───────┐ │
│ ROOT CA │ │ UZI │ ┌───────────────────┐ ┌────┐
└─────┬─────┘ │ Certificate │ │ X509Credential ┼────────────► VP │
│ └───────────────┘ └───────────────────┘ └─┬──┘
│ │ │ │ ┌────────────┐ │ ┌────────────┐
┌─────┴─────┐ 1.Request ┌───────┴───────┐ │ │ │ │ │ │ │
│ Authentic ◄────────────┼ Holder of ┼─────────┴──┼────► Wallet ┼─────┴─────► Verifier │
│ Source of ┌────────────► Trust │ 3.Issue │ │ │ 4.Present │ │
│ Trust │ 2.Issue └───────────────┘ │ └──────┬─────┘ └────────────┘
└───────────┘ │ │
│ │
┌───────┴─┐ ┌────┴────┐
│ did:web ├────┤ Keypair │
└─────────┘ └─────────┘}
This diagram represents the process of establishing trust, based on the use of X.509 certificates, the X509Credential and did:x509 within a trust network. Below is a step-by-step explanation of the diagram:
Key Components
did:x509Process Steps
Step 1: Keypair Generation and Request
The holder generates a keypair (private and public key) to represent their identity. They submit the public key as part of a Certificate Signing Request (CSR) to the Root CA (or intermediate CA). Within the CSR terminology, the holder is the subject of the CSR.
Step 2: Certificate Issuance
The Root CA (or its intermediate CA) verifies the request and issues an X.509 certificate (e.g., a UZI certificate) to the subject. This certificate includes information about the subject (e.g., subject name and organization) and is signed by the CA. This guarantees the authenticity of the certificate. Note that the holder and subject are the same concepts but are named differently between the different terminologies.
Step 3: X509Credential Issuance
The holder uses their X.509 certificate to create a X509Credential or Verifiable Credential. The process includes:
did:x509Step 4: Credential Presentation
When the holder needs to prove their identity to a verifier (e.g., during authentication), they present the X509Credential from their wallet to the Verifier. This process includes:
Step 5: Verification
The Verifier validates the credential and presentation. This includes:
Trust is Established:
If all checks pass, the Verifier trusts the credential presented by the holder. The credential's trustworthiness is derived from:
did:x509