Using Registrar Certificates in Presentation Requests¶
Audience: Relying Parties building OpenID4VP / HAIP presentation requests for the German EUDI Wallet Ecosystem.
This page explains how to use the two registrar certificates in your presentation request: the Access Certificate in the request header and the Registration Certificate in verifier_info.
1. Which certificate belongs in which part of the request?¶
The Sandbox Registrar provides two distinct certificates:
- Access Certificate: identifies the RP or EAA Provider to the wallet and establishes verifier trust in the presentation request. This certificate is delivered in the
x5cheader of the presentation request. - Registration Certificate: contains verifier metadata used by the wallet to determine additional information such as the requested presentation purpose and user-facing context. This certificate is carried in
verifier_info.
2. What the registrar actually provides¶
- The Access Certificate is provided as a
.crtfile. - The Registration Certificate is provided as a
registration-certificate.jsonfile containing a JWT.
Because the naming is confusing, remember:
.crt→ Access Certificate →x5cregistration-certificate.json→ Registration Certificate (JWT) →verifier_info
3. Include the Access Certificate in x5c¶
Your signed request object should include the Access Certificate in its JOSE header, using the x5c header array.
Preparing the Access Certificate¶
The Access Certificate is downloaded as a .crt file. Before including it in the x5c header, you must:
-
Convert the
.crtfile to DER format: -
Base64 encode the DER file:
-
Include the Base64 encoded certificate in the
x5cheader array.
Example header fragment:
Only include the access certificate and not any other additional certificate in the header!
The wallet uses this certificate to identify your verifier and validate the request signature or certificate binding.
4. Include the Registration Certificate in verifier_info¶
The Registration Certificate is conveyed in the request body using verifier_info. The registration-certificate.json file contains a JWT that can be used directly.
Example:
"verifier_info": {
"format": "registration_cert",
"data": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Simply extract the JWT string from the registration-certificate.json file and place it in the verifier_info.data field. The wallet reads this JWT to obtain metadata such as the purpose of the presentation and other verifier-specific context.
5. How these pieces work together¶
- The Access Certificate in
x5cproves who is making the request. - The Registration Certificate in
verifier_infotells the wallet why the request is being made and how it should be presented to the user.
6. Validation guidance¶
- Confirm the
.crtfile you received is the Access Certificate and that it has been converted to DER and Base64URL encoded before appearing in the request headerx5c. - Confirm the
registration-certificate.jsonfile contains the Registration Certificate JWT and that the JWT appears inverifier_info.data. - Do not swap these two certificates.
7. Common issues¶
- Wallet rejects the request: make sure the Access Certificate is present in
x5cand the signed request object uses it consistently. - If the Access Certificate is missing, the wallet often reports:
Validation Error: Could not trust certificate chain. - Wallet does not show the presentation purpose: ensure the Registration Certificate JWT is present in
verifier_infoand contains the required metadata.