Certificati in IT Wallet

Introduzione ai certificati digitali: cosa sono e a cosa servono

Un certificato digitale è un documento elettronico rilasciato ad un soggetto da un'autorità di certificazione (Certificate Authority - CA) che attesta l'associazione univoca tra una chiave pubblica e l'identità del soggetto che dichiara di utilizzarla nell'ambito di operazioni di crittografia asimmetrica e/o autenticazione tramite firma digitale.

Uno degli standard più diffusi per la struttura dei certificati è lo standard X.509. Un certificato conforme a questo standard deve contenere, in linea generale:

Un'applicazione può verificare la validità di un certificato controllando la firma digitale usando la chiave pubblica dell'autorità emittente, recuperabile da un repository pubblico messo a disposizione dalla stessa autorità. In caso di verifica positiva e controllo che il certificato non sia scaduto, l'applicazione può utilizzare la chiave pubblica contenuta nel certificato per cifrare dati o per instaurare una connessione sicura con il soggetto indicato, la cui identità è garantita dall'autorità che ha rilasciato il certificato.

Il certificato può essere utilizzato anche per verificare firme digitali apposte dal soggetto stesso su documenti, garantendo così l'integrità e l'autenticità degli stessi. In questo caso, si utilizza la chiave pubblica presente nel certificato per verificare la firma creata con la corrispondente chiave privata.

Un certificato X.509 è solitamente rilasciato dalla CA sotto forma di file. I formati più comuni sono:

-----BEGIN CERTIFICATE-----
MIIDyzCCA3GgAwIBAgIGAZdZtZ63MAoGCCqGSM49BAMCMIGzMQswCQYDVQQGEwJJ
VDEOMAwGA1UECAwFTGF6aW8xDTALBgNVBAcMBFJvbWExMTAvBgNVBAoMKElzdGl0
dXRvIFBvbGlncmFmaWNvIGUgWmVjY2EgZGVsbG8gU3RhdG8xCzAJBgNVBAsMAklU
MR4wHAYDVQQDDBVwcmUudGEud2FsbGV0LmlwenMuaXQxJTAjBgkqhkiG9w0BCQEW
FnByb3RvY29sbG9AcGVjLmlwenMuaXQwHhcNMjUwNjEwMTE1OTI0WhcNMjcwNjEw
MTE1OTI0WjCBsjELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUxhemlvMQ0wCwYDVQQH
DARSb21hMTgwNgYDVQQKDC9Jc3RpdHV0byBQb2xpZ3JhZmljbyBlIFplY2NhIGRl
bGxvIFN0YXRvIFMuUC5BLjEjMCEGA1UEAwwacHJlLmVpZC53YWxsZXQuaXB6cy5p
dC8xLTAxJTAjBgkqhkiG9w0BCQEWFnByb3RvY29sbG9AcGVjLmlwenMuaXQwWTAT
BgcqhkjOPQIBBggqhkjOPQMBBwNCAAQqD6slqijWpA+WF5mxq6MOxsyB6WQg0Re+
0J1DIRUUZ+v8uQdI0DVl9m8jAdgzDtcuNMRTJy1XcBJqEgUHkRrzo4IBbjCCAWow
HQYDVR0OBBYEFOhZELxqeWeTmjGUlBYchbXreA4XMIHlBgNVHSMEgd0wgdqAFPNQ
g3GMQKld6bTPIimydOq/cMQZoYG5pIG2MIGzMQswCQYDVQQGEwJJVDEOMAwGA1UE
CAwFTGF6aW8xDTALBgNVBAcMBFJvbWExMTAvBgNVBAoMKElzdGl0dXRvIFBvbGln
cmFmaWNvIGUgWmVjY2EgZGVsbG8gU3RhdG8xCzAJBgNVBAsMAklUMR4wHAYDVQQD
DBVwcmUudGEud2FsbGV0LmlwenMuaXQxJTAjBgkqhkiG9w0BCQEWFnByb3RvY29s
bG9AcGVjLmlwenMuaXSCBgGXOvl5QzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1Ud
DwEB/wQEAwIBpjA9BgNVHR8ENjA0MDKgMKAuhixodHRwczovL3ByZS50YS53YWxs
ZXQuaXB6cy5pdC9wa2kvdGEtc3ViLmNybDAKBggqhkjOPQQDAgNIADBFAiEA07RG
FvA3EHTPucCfr8vExOEX3h/OwHYUqMFtkge4rzICIEVpq4rA0fNu+9y1DbyH7gAF
EaZV3r37SalIfdr6iq59
-----END CERTIFICATE-----

La catena di certificati digitali (Certificate Chain)

Una Certification Authority (CA) può emettere un certificato X.509 non solo ad un'entità finale, come un utente, un dispositivo, o un server (End-Entity Certificate), ma anche a un'altra CA (Intermediate CA Certificate), creando così una gerarchia di certificati, al cui vertice si trova il certificato della Root Certification Authority (Root CA Certificate).
La CA intermediaria utilizza il proprio certificato ricevuto dalla Root CA per:

L'Intermediate CA Certificate presenta:


Gli End-Entity Certificates possono essere utilizzati per operazioni crittografiche, come l'autenticazione, la firma o la cifratura, ma non possono essere impiegati per emettere altri certificati.
Questa limitazione è specificata:


Una catena di certificati (certificate chain) è una sequenza ordinata di certificati che inizia con un End-Entity Certificate, prosegue con uno o più Intermediate CA Certificates e termina con un Root CA Certificate, il quale è self-signed, cioè auto-firmato. In altre parole, la chiave pubblica utilizzata per verificare la sua firma è contenuta all'interno dello stesso certificato.

All'interno della catena:

Con la catena dei certificati, la validazione di un certificato non si limita alla verifica della sua firma e del suo periodo di validità, ma richiede anche la verifica di tutti i certificati della catena a cui appartiene dove il primo elemento della chain è il certificato stesso. La procedura inizia con la verifica della firma del primo certificato utilizzando la chiave pubblica contenuta nel secondo certificato, poi si prosegue risalendo la catena fino alla Root CA, il cui certificato è auto-firmato e deve essere considerato fidato a priori.

Gestione dei certificati X.509 all'interno della federazione IT Wallet

Il Trust Anchor (TA) svolge il ruolo di Root Certificate Authority (Root CA) all'interno della federazione IT Wallet, dove ciascun partecipante deve dotarsi di una CA Intermediaria, che discende dalla Root CA, per emettere in autonomia certificati X.509 che certificano le chiavi pubbliche dei propri servizi interni per le operazioni di crittografia (End-Entity Certificate). La durata consigliata per i certificati End-Entity è di 1 anno.

L'Intermediate CA Certificate rilasciato dal TA alla CA Intermediaria del partecipante della federazione IT Wallet ha durata di 2 anni ed è firmato digitalmente con la chiave privata del TA la cui pubblica è contenuta nel certificato X509 self-signed del TA stesso (Root CA certificate) la cui durata è di 5 anni.

Ciascuna entità della federazione IT Wallet è tenuta ad esporre il certificato X.509 della propria CA Intermediaria su un endpoint pubblico accessibile a tutti, così come il Trust Anchor per il proprio Root CA certificate.

Le entità utilizzano la chiave privata corrispondente a quella pubblica della propria CA Intermediaria non solo per emettere End-Entity Certificate, ma anche per firmare gli Entity Statements che producono per se stessi, per cui questa chiave funge da Federation Entity Key.

Per gli End-Entity Certificate di durata superiore alle 24 ore che sono stati revocati nel tempo, l'emittente deve pubblicare una CRL (Certificate Revocation List) che li contiene su un endpoint pubblico accessibile a tutti, regolarmente aggiornata.

Info:
Per maggiori dettagli si rimanda alla documentazione accessibile al seguente link.

Visualizzazione catena di certificati rilasciata dal Trust Anchor

Per visualizzare il contenuto dei certificati digitali X.509 che compongono la catena rilasciata dal Trust Anchor in risposta alla richiesta di Onboarding, è possibile utilizzare strumenti come OpenSSL.

1. Puoi scrivere uno script di questo tipo:

#!/bin/bash
# Array contenente certificati in formato DER codificati in Base64
certificati_base64=(
    "MIIDyzCCA3GgAwIBAgIGAZdZtZ63MAoGCCqGSM49BAMCMIGzMQswCQYDVQQGEwJJVDEOMAwGA1UECAwFTGF6aW8xDTALBgNVBAcMBFJvbWExMTAvBgNVBAoMKElzdGl0dXRvIFBvbGlncmFmaWNvIGUgWmVjY2EgZGVsbG8gU3RhdG8xCzAJBgNVBAsMAklUMR4wHAYDVQQDDBVwcmUudGEud2FsbGV0LmlwenMuaXQxJTAjBgkqhkiG9w0BCQEWFnByb3RvY29sbG9AcGVjLmlwenMuaXQwHhcNMjUwNjEwMTE1OTI0WhcNMjcwNjEwMTE1OTI0WjCBsjELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUxhemlvMQ0wCwYDVQQHDARSb21hMTgwNgYDVQQKDC9Jc3RpdHV0byBQb2xpZ3JhZmljbyBlIFplY2NhIGRlbGxvIFN0YXRvIFMuUC5BLjEjMCEGA1UEAwwacHJlLmVpZC53YWxsZXQuaXB6cy5pdC8xLTAxJTAjBgkqhkiG9w0BCQEWFnByb3RvY29sbG9AcGVjLmlwenMuaXQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQqD6slqijWpA+WF5mxq6MOxsyB6WQg0Re+0J1DIRUUZ+v8uQdI0DVl9m8jAdgzDtcuNMRTJy1XcBJqEgUHkRrzo4IBbjCCAWowHQYDVR0OBBYEFOhZELxqeWeTmjGUlBYchbXreA4XMIHlBgNVHSMEgd0wgdqAFPNQg3GMQKld6bTPIimydOq/cMQZoYG5pIG2MIGzMQswCQYDVQQGEwJJVDEOMAwGA1UECAwFTGF6aW8xDTALBgNVBAcMBFJvbWExMTAvBgNVBAoMKElzdGl0dXRvIFBvbGlncmFmaWNvIGUgWmVjY2EgZGVsbG8gU3RhdG8xCzAJBgNVBAsMAklUMR4wHAYDVQQDDBVwcmUudGEud2FsbGV0LmlwenMuaXQxJTAjBgkqhkiG9w0BCQEWFnByb3RvY29sbG9AcGVjLmlwenMuaXSCBgGXOvl5QzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBpjA9BgNVHR8ENjA0MDKgMKAuhixodHRwczovL3ByZS50YS53YWxsZXQuaXB6cy5pdC9wa2kvdGEtc3ViLmNybDAKBggqhkjOPQQDAgNIADBFAiEA07RGFvA3EHTPucCfr8vExOEX3h/OwHYUqMFtkge4rzICIEVpq4rA0fNu+9y1DbyH7gAFEaZV3r37SalIfdr6iq59",
    "MIIDQzCCAuigAwIBAgIGAZc6+XlDMAoGCCqGSM49BAMCMIGzMQswCQYDVQQGEwJJVDEOMAwGA1UECAwFTGF6aW8xDTALBgNVBAcMBFJvbWExMTAvBgNVBAoMKElzdGl0dXRvIFBvbGlncmFmaWNvIGUgWmVjY2EgZGVsbG8gU3RhdG8xCzAJBgNVBAsMAklUMR4wHAYDVQQDDBVwcmUudGEud2FsbGV0LmlwenMuaXQxJTAjBgkqhkiG9w0BCQEWFnByb3RvY29sbG9AcGVjLmlwenMuaXQwHhcNMjUwNjA0MTI0NTE3WhcNMzAwNjAzMTI0NTE3WjCBszELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUxhemlvMQ0wCwYDVQQHDARSb21hMTEwLwYDVQQKDChJc3RpdHV0byBQb2xpZ3JhZmljbyBlIFplY2NhIGRlbGxvIFN0YXRvMQswCQYDVQQLDAJJVDEeMBwGA1UEAwwVcHJlLnRhLndhbGxldC5pcHpzLml0MSUwIwYJKoZIhvcNAQkBFhZwcm90b2NvbGxvQHBlYy5pcHpzLml0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaE0xyhd3e9LDT7uwHOclL5H3389gwiCwFhI3KOvidn0glBIHYxqH+4Z9VTMYWG5L8cwC9AaJUCNGu2dp5ZiiTKOB5TCB4jAdBgNVHQ4EFgQU81CDcYxAqV3ptM8iKbJ06r9wxBkwHwYDVR0jBBgwFoAU81CDcYxAqV3ptM8iKbJ06r9wxBkwDwYDVR0TAQH/BAUwAwEB/zBEBggrBgEFBQcBAQQ4MDYwNAYIKwYBBQUHMAKGKGh0dHBzOi8vcHJlLnRhLndhbGxldC5pcHpzLml0L3BraS90YS5jZXIwDgYDVR0PAQH/BAQDAgEGMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHBzOi8vcHJlLnRhLndhbGxldC5pcHpzLml0L3BraS90YS5jcmwwCgYIKoZIzj0EAwIDSQAwRgIhAOsQYzR+eGf4je63VGHqkpmkBbfyOre+mfIdHHowWWR/AiEA58xBNb5UW5uMB+tQur8fq24RD5MmRHLYS6bDgIYmluw="
)
# Visualizza primo certificato
echo
echo "===================================="
echo " Il primo certificato della catena"
echo "===================================="
echo
echo "${certificati_base64[0]}" | base64 -d > cert_1.der
openssl x509 -in cert_1.der -inform DER -text -noout
# Visualizza secondo certificato
echo
echo "====================================="
echo " Il secondo certificato della catena"
echo "====================================="
echo
echo "${certificati_base64[1]}" | base64 -d > cert_2.der
openssl x509 -in cert_2.der -inform DER -text -noout
# Rimuovere i file temporanei
rm cert_1.der cert_2.der


2. Salvarlo in un file chain_viewer.sh

3. Eseguire: ./chain_viewer.sh

$ ./chain_viewer.sh
====================================
 Il primo certificato della catena
====================================

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            01:97:59:b5:9e:b7
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it
        Validity
            Not Before: Jun 10 11:59:24 2025 GMT
            Not After : Jun 10 11:59:24 2027 GMT
        Subject: C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato S.P.A., CN=pre.eid.wallet.ipzs.it/1-0, emailAddress=protocollo@pec.ipzs.it
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:2a:0f:ab:25:aa:28:d6:a4:0f:96:17:99:b1:ab:
                    a3:0e:c6:cc:81:e9:64:20:d1:17:be:d0:9d:43:21:
                    15:14:67:eb:fc:b9:07:48:d0:35:65:f6:6f:23:01:
                    d8:33:0e:d7:2e:34:c4:53:27:2d:57:70:12:6a:12:
                    05:07:91:1a:f3
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                E8:59:10:BC:6A:79:67:93:9A:31:94:94:16:1C:85:B5:EB:78:0E:17
            X509v3 Authority Key Identifier: 
                keyid:F3:50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19
                DirName:/C=IT/ST=Lazio/L=Roma/O=Istituto Poligrafico e Zecca dello Stato/OU=IT/CN=pre.ta.wallet.ipzs.it/emailAddress=protocollo@pec.ipzs.it
                serial:01:97:3A:F9:79:43
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment, Certificate Sign, CRL Sign
            X509v3 CRL Distribution Points: 
                Full Name:
                  URI:https://pre.ta.wallet.ipzs.it/pki/ta-sub.crl
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:45:02:21:00:d3:b4:46:16:f0:37:10:74:cf:b9:c0:9f:af:
        cb:c4:c4:e1:17:de:1f:ce:c0:76:14:a8:c1:6d:92:07:b8:af:
        32:02:20:45:69:ab:8a:c0:d1:f3:6e:fb:dc:b5:0d:bc:87:ee:
        00:05:11:a6:55:de:bd:fb:49:a9:48:7d:da:fa:8a:ae:7d

=====================================
 Il secondo certificato della catena
=====================================

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            01:97:3a:f9:79:43
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it
        Validity
            Not Before: Jun  4 12:45:17 2025 GMT
            Not After : Jun  3 12:45:17 2030 GMT
        Subject: C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:68:4d:31:ca:17:77:7b:d2:c3:4f:bb:b0:1c:e7:
                    25:2f:91:f7:df:cf:60:c2:20:b0:16:12:37:28:eb:
                    e2:76:7d:20:94:12:07:63:1a:87:fb:86:7d:55:33:
                    18:58:6e:4b:f1:cc:02:f4:06:89:50:23:46:bb:67:
                    69:e5:98:a2:4c
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                F3:50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19
            X509v3 Authority Key Identifier: 
                F3:50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19
            X509v3 Basic Constraints: critical
                CA:TRUE
            Authority Information Access: 
                CA Issuers - URI:https://pre.ta.wallet.ipzs.it/pki/ta.cer
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 CRL Distribution Points: 
                Full Name:
                  URI:https://pre.ta.wallet.ipzs.it/pki/ta.crl
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:46:02:21:00:eb:10:63:34:7e:78:67:f8:8d:ee:b7:54:61:
        ea:92:99:a4:05:b7:f2:3a:b7:be:99:f2:1d:1c:7a:30:59:64:
        7f:02:21:00:e7:cc:41:35:be:54:5b:9b:8c:07:eb:50:ba:bf:
        1f:ab:6e:11:0f:93:26:44:72:d8:4b:a6:c3:80:86:26:96:ec

📜 Primo Certificato X.509 della catena

Si tratta del certificato X.509 rilasciato dal Trust Anchor alla CA intermediaria dell'entità che ha richiesto l'Onboarding. Questo certificato è stato generato a partire dalla CSR inclusa nella richiesta ed è stato firmato con la chiave privata del Trust Anchor, corrispondente alla chiave pubblica contenuta nel secondo certificato della catena.

🔐 Dati del certificato
Campo Valore Descrizione
Version 3 (0x2) Versione X.509 v3
Serial Number 01:97:59:b5:9e:b7 Numero seriale che identifica in maniera univoca il certificato, in formato esadecimale
Signature Algorithm ecdsa-with-SHA256 Nome dell'algoritmo usato per firmare il certificato
Issuer C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it Distinguished Name (DN) dell'entità che ha emesso il certificato. Il Trust Anchor. L'Issuer deve corrispondere al Subject del secondo certificato X.509 della catena
Validity Not Before: Jun 10 11:59:24 2025 GMT
Not After : Jun 10 11:59:24 2027 GMT
Periodo durante il quale il certificato è considerato valido
Subject C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato S.P.A., CN=pre.eid.wallet.ipzs.it/1-0, emailAddress=protocollo@pec.ipzs.it Distinguished Name (DN) dell'entità proprietaria del certificato (Soggetto a cui appartiene il certificato)
Subject Public Key Info
Campo Valore Descrizione
Public Key Algorithm id−ecPublicKey Nome dell'algoritmo crittografico per cui deve essere utilizzata la chiave pubblica contenuta nel certificato
pub 04:2a:0f:ab:25:aa:28:d6:a4:0f:96:17:99:b1:ab:
a3:0e:c6:cc:81:e9:64:20:d1:17:be:d0:9d:43:21:
15:14:67:eb:fc:b9:07:48:d0:35:65:f6:6f:23:01:
d8:33:0e:d7:2e:34:c4:53:27:2d:57:70:12:6a:12:
05:07:91:1a:f3
La chiave pubblica contenuta nel certificato, in forma esadecimale
ASN1 OID: prime256v1 Nome della curva ellittica della chiave pubblica contenuta nel certificato, in notazione ASN.1 (Abstract Syntax Notation One)
NIST CURVE: P-256 Nome della curva ellittica della chiave pubblica contenuta nel certificato, in notazione NIST (National Institute of Standards and Technology)
Informazioni sulla chiave pubblica del Subject contenuta nel certificato

🧩 Estensioni del certificato
Campo Valore Descrizione
X509v3 Subject Key Identifier E8:59:10:BC:6A:79:67:93:9A:31:94:94:16:1C:85:B5:EB:78:0E:17 Identificativo univoco della chiave pubblica del Subject contenuta nel certificato (hash della chiave, in formato esadecimale).
X509v3 Subject Authority Identifier
Campo Valore Descrizione
keyid 50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19 Identificativo univoco della chiave pubblica dell'Issuer del certificato da utilizzare per validare la firma del certificato (hash della chiave, in formato esadecimale).
DirName /C=IT/ST=Lazio/L=Roma/O=Istituto Poligrafico e Zecca dello Stato/OU=IT/CN=pre.ta.wallet.ipzs.it/emailAddress=protocollo@pec.ipzs.it Distinguished Name (DN) dell'Issuer del certificato. Il Trust Anchor.
serial 01:97:3A:F9:79:43 Numero seriale che identifica in maniera univoca il certificato dell'Issuer contenente la chiave pubblica dell'Issuer a cui i riferisce il keyid, in formato esadecimale.
Informazioni utili a identificare la chiave pubblica corrispondente alla chiave privata utilizzata dall'Issuer per firmare il certificato. Questa chiave pubblica va ricercata all'interno del secondo certificato X.509 della catena
X509v3 Basic Constraints: critical CA:TRUE, pathlen:0 Vincolo imposto al certificato che può esere uilizzato come Intermediate CA Certificate per firmare altri certificati esclusivamente di tipo End-Entity.
X509v3 Key Usage: critical Digital Signature, Key Encipherment, Certificate Sign, CRL Sign Uilizzi consentiti per la chiave pubblica contenuta nel certificato
X509v3 CRL Distribution Points Full Name: URI:https://pre.ta.wallet.ipzs.it/pki/ta-sub.crl Endpoint esposto dall'Issuer del certificato dove reperire la CRL aggiornata

✍️ Algoritmo di firma del certificato

Nome dell'algoritmo usato per firmare il certificato: ecdsa-with-SHA256


✍️ Firma del certificato

La firma del certificato, in forma esadecimale:

30:45:02:21:00:d3:b4:46:16:f0:37:10:74:cf:b9:c0:9f:af: cb:c4:c4:e1:17:de:1f:ce:c0:76:14:a8:c1:6d:92:07:b8:af: 32:02:20:45:69:ab:8a:c0:d1:f3:6e:fb:dc:b5:0d:bc:87:ee: 00:05:11:a6:55:de:bd:fb:49:a9:48:7d:da:fa:8a:ae:7d
📜 Secondo Certificato X.509 della catena

Si tratta del certificato X.509 self-signed del Trust Anchor (Root CA certificate), contenente la chiave pubblica da utilizzare per verificare la firma del primo certificato della catena.

🔐 Dati del certificato
Campo Valore Descrizione
Version 3 (0x2) Versione X.509 v3
Serial Number 01:97:3a:f9:79:43 Numero seriale che identifica in maniera univoca il certificato, in formato esadecimale
Signature Algorithm ecdsa-with-SHA256 Nome dell'algoritmo usato per firmare il certificato
Issuer C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it Distinguished Name (DN) dell'entità che ha emesso il certificato. Il Trust Anchor
Validity Dal 2025-06-04 12:45:17 al 2030-06-03 12:45:17 Periodo durante il quale il certificato è considerato valido (5 anni)
Subject C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it Distinguished Name (DN) dell'entità proprietaria del certificato (Soggetto a cui appartiene il certificato)
Subject Public Key Info
Campo Valore Descrizione
Public Key Algorithm id−ecPublicKey Nome dell'algoritmo crittografico per cui deve essere utilizzata la chiave pubblica contenuta nel certificato
pub 04:68:4d:31:ca:17:77:7b:d2:c3:4f:bb:b0:1c:e7:
25:2f:91:f7:df:cf:60:c2:20:b0:16:12:37:28:eb:
e2:76:7d:20:94:12:07:63:1a:87:fb:86:7d:55:33:
18:58:6e:4b:f1:cc:02:f4:06:89:50:23:46:bb:67:
69:e5:98:a2:4c
La chiave pubblica contenuta nel certificato, in forma esadecimale
ASN1 OID: prime256v1 Nome della curva ellittica della chiave pubblica contenuta nel certificato, in notazione ASN.1 (Abstract Syntax Notation One)
NIST CURVE: P-256 Nome della curva ellittica della chiave pubblica contenuta nel certificato, in notazione NIST (National Institute of Standards and Technology)
Informazioni sulla chiave pubblica del Subject contenuta nel certificato

🧩 Estensioni del certificato
Campo Valore Descrizione
X509v3 Subject Key Identifier F3:50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19 Identificativo univoco della chiave pubblica del Subject contenuta nel certificato (hash della chiave, in formato esadecimale).
X509v3 Subject Authority Identifier 50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19 Identificativo univoco della chiave pubblica dell'Issuer del certificato da utilizzare per validare la firma del certificato (hash della chiave, in formato esadecimale).
X509v3 Basic Constraints: critical CA:TRUE Vincolo imposto al certificato che può esere uilizzato per firmare altri certificati di CA intermediarie.
X509v3 Key Usage: critical Certificate Sign, CRL Sign Uilizzi consentiti per la chiave pubblica contenuta nel certificato (Certificate Sign: può firmare altri certificati, CRL Sign: può firmare le CRL)
Authority Information Access (AIA) CA Issuers - URI:https://pre.ta.wallet.ipzs.it/pki/ta.cer URL dove scaricare il certificato corrente dell'Issuer (che contiene la chiave pubblica dell'Issuer). Nel caso di un certificato self-signed dove il Subject e l'Issuer coincidono, l'URL indicata nel campo AIA del certificato restituirà il medesimo certificato se quest'ultimo non è stato sostituito con un nuovo certificato, in caso contrario, il cerificato scaricato sarà diverso
X509v3 CRL Distribution Points Full Name: URI:https://pre.ta.wallet.ipzs.it/pki/ta.crl Endpoint esposto dall'Issuer del certificato dove reperire la CRL aggiornata

✍️ Algoritmo di firma del certificato

Nome dell'algoritmo usato per firmare il certificato: ecdsa-with-SHA256


✍️ Firma del certificato

La firma del certificato, in forma esadecimale:

30:46:02:21:00:eb:10:63:34:7e:78:67:f8:8d:ee:b7:54:61: ea:92:99:a4:05:b7:f2:3a:b7:be:99:f2:1d:1c:7a:30:59:64: 7f:02:21:00:e7:cc:41:35:be:54:5b:9b:8c:07:eb:50:ba:bf: 1f:ab:6e:11:0f:93:26:44:72:d8:4b:a6:c3:80:86:26:96:ec

Validazione catena di certificati rilasciata dal Trust Anchor

L'entità valida la catena di certificati digitali X.509 rilasciata dal Trust Anchor in risposta alla sua richiesta di Onboarding, effettuando le seguenti operazioni:

Tali operazioni possono essere effettuate con strumenti come OpenSSL.

1. Puoi scrivere uno script di questo tipo:

#!/bin/bash

# Array contenente certificati in formato DER codificati in Base64
certificati_base64=(
    "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"
)

# Validazione della catena di cerificati
echo "${certificati_base64[0]}" | base64 -d > cert_1.der
echo "${certificati_base64[1]}" | base64 -d > cert_2.der

# Convertire i certificati DER in PEM e salvarli in file temporanei
openssl x509 -inform der -in cert_1.der -out cert_1.pem
openssl x509 -inform der -in cert_2.der -out cert_2.pem

# Verificare il certificato radice (il secondo certificato della catena)
echo "Controllo validità secondo certificato della catena..."
openssl verify -CAfile cert_2.pem cert_2.pem
echo

# Verificare il primo certificato dell catena usando il certificato radice
echo "Controllo validità primo certificato della catena..."
openssl verify -CAfile cert_2.pem cert_1.pem
echo

# Rimuovere i file temporanei
rm cert_1.der cert_2.der cert_1.pem cert_2.pem


2. Salvarlo in un file chain_verify.sh

3. Eseguire: ./chain_verify.sh

$ ./chain_verify.sh
Controllo validità secondo certificato della catena...
cert_2.pem: OK

Controllo validità primo certificato della catena...
cert_1.pem: OK

URL per il download del certificato dell'autorità emittente di un determinato certificato

L'URL per scaricare il certificato dell'autorità che ha emesso un determinato certificato (necessario per verificarne la firma, in quanto contiene la chiave pubblica dell'autorità stessa) può essere indicato in un'estensione specifica del certificato, chiamata Authority Information Access (AIA).

Il Trust Anchor rilascia alle entità che ha onboardato una catena di certificati dove il primo elemento della catena è il certificato X.509 richiesto, che certifica la Federation Entity Public Key dell'entità, e il secondo elemento della catena è il certificato X.509 self-signed del Trust Anchor, da utilizzare per validare il primo certificato.

Poiché il certificato del Trust Anchor è già incluso nella catena, il certificato dell'entità onboardata non include al suo interno l'estensione AIA.

Il certificato X.509 self-signed del Trust Anchor include al suo interno l'estensione AIA.

URL per il download della CRL

Il Trust Anchor rilascia alle entità che ha onboardato una catena di certificati dove il primo elemento della catena è il certificato X.509 richiesto, che certifica la Federation Entity Public Key dell'entità, e il secondo elemento della catena è il certificato X.509 self-signed del Trust Anchor, da utilizzare per validare il primo certificato.

Ogni certificato della catene presenta l'estensione X509v3 CRL Distribution Points contenente l'URL per scaricare dal Trust Anchor la relativa CRL aggiornata

Visualizzazione CRL

Per visualizzare il contenuto di una CRL (Certificate Revocation List) è possibile utilizzare strumenti come OpenSSL.

1. Puoi scrivere uno script di questo tipo:

#!/bin/bash
# Certificato in formato DER codificato in Base64
certificato_base64="MIIDqjCCA1GgAwIBAgIGAZc6/V9qMAoGCCqGSM49BAMCMIGzMQswCQYDVQQGEwJJVDEOMAwGA1UECAwFTGF6aW8xDTALBgNVBAcMBFJvbWExMTAvBgNVBAoMKElzdGl0dXRvIFBvbGlncmFmaWNvIGUgWmVjY2EgZGVsbG8gU3RhdG8xCzAJBgNVBAsMAklUMR4wHAYDVQQDDBVwcmUudGEud2FsbGV0LmlwenMuaXQxJTAjBgkqhkiG9w0BCQEWFnByb3RvY29sbG9AcGVjLmlwenMuaXQwHhcNMjUwNjA0MTI0OTMzWhcNMjcwNjA0MTI0OTMzWjCBkjELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUxhemlvMQ0wCwYDVQQHDARSb21hMRYwFAYDVQQKDA1QYWdvUEEgUy5wLkEuMSQwIgYDVQQDDBtmb28xMS5ibG9iLmNvcmUud2luZG93cy5uZXQxJjAkBgkqhkiG9w0BCQEWF3BhZ29wYXNwYUBwZWMucGFnb3BhLml0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgXY4FApFJCj91Gpb1K9GEIouTq2X3L0K64Iq0ob4l/iX7p1ysisVV2vOhj1xEm/3M24U5HcywPPpNIOEHTESjqOCAW4wggFqMB0GA1UdDgQWBBSQofFAtq50ibRZ/Bl43kcxMbxIIzCB5QYDVR0jBIHdMIHagBTzUINxjECpXem0zyIpsnTqv3DEGaGBuaSBtjCBszELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUxhemlvMQ0wCwYDVQQHDARSb21hMTEwLwYDVQQKDChJc3RpdHV0byBQb2xpZ3JhZmljbyBlIFplY2NhIGRlbGxvIFN0YXRvMQswCQYDVQQLDAJJVDEeMBwGA1UEAwwVcHJlLnRhLndhbGxldC5pcHpzLml0MSUwIwYJKoZIhvcNAQkBFhZwcm90b2NvbGxvQHBlYy5pcHpzLml0ggYBlzr5eUMwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAAcwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cHM6Ly9wcmUudGEud2FsbGV0LmlwenMuaXQvcGtpL3RhLXN1Yi5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgBSyH++oPDP8ipRxHcJ8u2HkN7wL44XpJFxSIBV9RFHMCIBixpcT43NSsk0EvhJb4g68c1d9OrBnXOXVuyCtWWE6a"

echo "${certificato_base64}" | base64 -d > cert.der

# Recupera dal certificato l'endpoint dell'autorità emittente dove è possibile reperire la CRL corrente relativa ai certificati revocati
crl_url=$(openssl x509 -in cert.der -inform DER -text -noout | grep "URI:" | sed 's/.*URI://')
echo "La CRL è disponibile al seguente endpoint:"
echo "$crl_url"
echo

echo "Scarico la CRL..."
# Scarica la CRL
curl -O "$crl_url"
if [ $? -ne 0 ]; then
    echo "Errore: download della CRL fallito da $crl_url"
    exit 1
fi

echo
echo "CRL scaricata con successo"
echo


echo "Contenuto della CRL:"
# Visualizza la CRL
openssl crl -in "$(basename "$crl_url")" -inform DER -text -noout
echo

# Rimuovere i file temporanei
rm "$(basename "$crl_url")"


2. Salvarlo in un file crl_viewer.sh

3. Eseguire: ./crl_viewer.sh

$ ./crl_viewer.sh
La CRL è disponibile al seguente endpoint:
https://pre.ta.wallet.ipzs.it/pki/ta-sub.crl

Scarico la CRL...

CRL scaricata con successo

Contenuto della CRL:

Certificate Revocation List (CRL):
        Version 2 (0x1)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it
        Last Update: Jun 26 20:00:00 2025 GMT
        Next Update: Jun 27 20:00:00 2025 GMT
        CRL extensions:
            X509v3 Authority Key Identifier: 
                keyid:F3:50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19
                DirName:/C=IT/ST=Lazio/L=Roma/O=Istituto Poligrafico e Zecca dello Stato/OU=IT/CN=pre.ta.wallet.ipzs.it/emailAddress=protocollo@pec.ipzs.it
                serial:01:97:3A:F9:79:43
            Authority Information Access: 
                CA Issuers - URI:https://pre.ta.wallet.ipzs.it/pki/ta.cer
Revoked Certificates:
    Serial Number: 019720438973
        Revocation Date: Jun  4 20:00:00 2025 GMT
        CRL entry extensions:
            X509v3 CRL Reason Code: 
                Cessation Of Operation
    Serial Number: 01973A0DDC12
        Revocation Date: Jun  4 20:00:00 2025 GMT
        CRL entry extensions:
            X509v3 CRL Reason Code: 
                Cessation Of Operation
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:45:02:20:26:b7:1d:25:fc:dc:e5:45:12:1c:17:ba:6c:2a:
        11:0d:cc:e9:82:15:a6:f1:8d:e6:13:0a:e5:2d:dc:99:6b:b9:
        02:21:00:82:e4:0f:68:df:4f:6a:17:dc:77:b1:61:57:af:19:
        a0:2e:ea:06:8e:34:3f:d9:1f:a5:5d:06:b9:d7:81:bd:76

📜 Dati della CRL
Campo Valore Descrizione
Version 2 (0x1) Versione X.509 v2
Signature Algorithm ecdsa-with-SHA256 Nome dell'algoritmo usato per firmare la CRL
Issuer C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it Distinguished Name (DN) dell'entità che ha emesso la CRL. Il Trust Anchor
Last Update Jun 26 20:00:00 2025 GMT La data in cui la CRL è stata emessa
Next Update Jun 27 20:00:00 2025 GMT La data entro cui ci si aspetta che venga pubblicata una nuova CRL

🧩 Estensioni del certificato
Campo Valore Descrizione
X509v3 Authority Key Identifier
Campo Valore Descrizione
keyid F3:50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19 Identificativo univoco della chiave pubblica dell'Issuer della CRL da utilizzare per validare la firma della CRL (hash della chiave, in formato esadecimale).
DirName /C=IT/ST=Lazio/L=Roma/O=Istituto Poligrafico e Zecca dello Stato/OU=IT/CN=pre.ta.wallet.ipzs.it/emailAddress=protocollo@pec.ipzs.it Distinguished Name (DN) dell'Issuer della CRL. Il Trust Anchor.
serial 01:97:3A:F9:79:43 Numero seriale che identifica in maniera univoca il certificato dell'Issuer contenente la chiave pubblica dell'Issuer a cui i riferisce il keyid, in formato esadecimale.
Informazioni utili a identificare la chiave pubblica corrispondente alla chiave privata utilizzata dall'Issuer per firmare la CRL

❌ Certificati revocati
Campo Valore Descrizione
Serial Number 019720438973 Numero seriale che identifica in maniera univoca il certificato revocato
Revocation Date Jun 4 20:00:00 2025 GMT Data di revoca
Reason Code Cessation Of Operation Motivo della revoca

Campo Valore Descrizione
Serial Number 01973A0DDC12 Numero seriale che identifica in maniera univoca il certificato revocato
Revocation Date Jun 4 20:00:00 2025 GMT Data di revoca
Reason Code Cessation Of Operation Motivo della revoca

✍️ Algoritmo di firma della CRL

Nome dell'algoritmo usato per firmare la CRL: ecdsa-with-SHA256


✍️ Firma della CRL

La firma della CRL, in forma esadecimale:

30:45:02:20:26:b7:1d:25:fc:dc:e5:45:12:1c:17:ba:6c:2a: 11:0d:cc:e9:82:15:a6:f1:8d:e6:13:0a:e5:2d:dc:99:6b:b9: 02:21:00:82:e4:0f:68:df:4f:6a:17:dc:77:b1:61:57:af:19: a0:2e:ea:06:8e:34:3f:d9:1f:a5:5d:06:b9:d7:81:bd:76

Come l'entità verifica che il proprio certificato rilasciato dal Trust Anchor non sia stato revocato

L'entità deve eseguire le seguenti operazioni per verificare che il certificato digitale X.509, rilasciatole dal Trust Anchor in risposta alla richiesta di Onboarding, non sia stato revocato:

Tutte queste operazioni possono essere eseguite con l'ausilio di strumenti come OpenSSL.

1. Puoi scrivere uno script di questo tipo:

#!/bin/bash
#!/bin/bash

# Array contenente certificati in formato DER codificati in Base64
certificati_base64=(
    "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"
)

# Decodifica e salva i certificati
echo "${certificati_base64[0]}" | base64 -d > cert_1.der
echo "${certificati_base64[1]}" | base64 -d > cert_2.der

# Serial number del certificato in esadecimale senza serial=
serial_to_view=$(openssl x509 -in cert_1.der -inform DER -noout -serial | cut -d= -f2 )
echo
echo "========================================================="
echo " Il serial number del mio certificato è: $serial_to_view"
echo "========================================================="
echo

# normalizza il seriale estratto (rimuove zeri iniziali e case insensitive)
serial=$( echo "$serial_to_view" | sed 's/^0*//' | tr '[:upper:]' '[:lower:]')


# Estrai URL CRL
crl_url=$(openssl x509 -in cert_1.der -inform DER -text -noout | grep "URI:" | sed 's/.*URI://')
echo "La CRL è disponibile al seguente endpoint:"
echo "$crl_url"
echo

echo "Scarico la CRL..."
curl -s -O "$crl_url"
if [ $? -ne 0 ]; then
    echo "Errore: download della CRL fallito da $crl_url"
    exit 1
fi
echo "CRL scaricata con successo"
echo

echo "Contenuto della CRL:"

openssl crl -in "$(basename "$crl_url")" -inform DER -text -noout
echo

# Converte il secondo certificato da DER a PEM
openssl x509 -in cert_2.der -inform DER -out cert_2.pem -outform PEM

echo "Controllo validità CRL..."
echo
if openssl crl -in "$(basename "$crl_url")" -inform DER -noout -text -CAfile cert_2.pem > /dev/null 2>&1; then
    echo "CRL valida, procedo con la verifica del seriale..."
    echo

    # Estrai tutti i seriali dalla CRL, normalizzati come il nostro
    found_serials=$(openssl crl -in "$(basename "$crl_url")" -inform DER -text -noout | \
        grep 'Serial Number' | sed 's/.*Serial Number: //' | sed 's/^0*//' | tr '[:upper:]' '[:lower:]')

    if echo "$found_serials" | grep -q "$serial"; then
        echo "Il certificato con seriale $serial_to_view risulta REVOCATO"
    else
        echo "Il certificato con seriale $serial_to_view NON è presente nella CRL"
    fi
else
    echo "CRL NON valida o non firmata correttamente. Interrompo la verifica."
fi

# Rimuovere i file temporanei
rm -f "$(basename "$crl_url")" cert_1.der cert_2.der cert_2.pem


2. Salvarlo in un file crl_cert_verify

3. Eseguire: ./crl_cert_verify

$ ./crl_cert_verify
=========================================================
 Il serial number del mio certificato è: 019759B59EB7
=========================================================

La CRL è disponibile al seguente endpoint:
https://pre.ta.wallet.ipzs.it/pki/ta-sub.crl

Scarico la CRL...
CRL scaricata con successo

Contenuto della CRL:

Certificate Revocation List (CRL):
        Version 2 (0x1)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=IT, ST=Lazio, L=Roma, O=Istituto Poligrafico e Zecca dello Stato, OU=IT, CN=pre.ta.wallet.ipzs.it, emailAddress=protocollo@pec.ipzs.it
        Last Update: Jun 26 20:00:00 2025 GMT
        Next Update: Jun 27 20:00:00 2025 GMT
        CRL extensions:
            X509v3 Authority Key Identifier: 
                keyid:F3:50:83:71:8C:40:A9:5D:E9:B4:CF:22:29:B2:74:EA:BF:70:C4:19
                DirName:/C=IT/ST=Lazio/L=Roma/O=Istituto Poligrafico e Zecca dello Stato/OU=IT/CN=pre.ta.wallet.ipzs.it/emailAddress=protocollo@pec.ipzs.it
                serial:01:97:3A:F9:79:43
            Authority Information Access: 
                CA Issuers - URI:https://pre.ta.wallet.ipzs.it/pki/ta.cer
Revoked Certificates:
    Serial Number: 019720438973
        Revocation Date: Jun  4 20:00:00 2025 GMT
        CRL entry extensions:
            X509v3 CRL Reason Code: 
                Cessation Of Operation
    Serial Number: 01973A0DDC12
        Revocation Date: Jun  4 20:00:00 2025 GMT
        CRL entry extensions:
            X509v3 CRL Reason Code: 
                Cessation Of Operation
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:45:02:20:26:b7:1d:25:fc:dc:e5:45:12:1c:17:ba:6c:2a:
        11:0d:cc:e9:82:15:a6:f1:8d:e6:13:0a:e5:2d:dc:99:6b:b9:
        02:21:00:82:e4:0f:68:df:4f:6a:17:dc:77:b1:61:57:af:19:
        a0:2e:ea:06:8e:34:3f:d9:1f:a5:5d:06:b9:d7:81:bd:76

Controllo validità CRL...

CRL valida, procedo con la verifica del seriale...

Il certificato con seriale 019759B59EB7 NON è presente nella CRL

URL per il download del certificato dell'autorità emittente della CRL

L'URL per scaricare il certificato dell'autorità che ha emesso una CRL (necessario per verificarne la firma, in quanto contiene la chiave pubblica dell'autorità stessa) può essere indicato in un'estensione specifica della CRL chiamata Authority Information Access (AIA).

Il Trust Anchor rilascia alle entità che ha onboardato una catena di certificati dove il primo elemento della catena è il certificato X.509 richiesto, che certifica la Federation Entity Public Key dell'entità, e il secondo elemento della catena è il certificato X.509 self-signed del Trust Anchor, da utilizzare per validare il primo certificato. Poiché il certificato del Trust Anchor è già incluso nella catena, la CRL scaricata non contiene l'estensione Authority Information Access (AIA).

Come comportarsi in caso di fallimento della verifica della firma della CRL

Se la verifica della firma di una CRL fallisce quando si utilizza la chiave pubblica contenuta nel certificato X.509 self-signed del Trust Anchor (precedentemente fornito in risposta alla richiesta di Onboarding), è necessario eseguire alcuni controlli per identificarne la causa.

In particolare, è opportuno verificare che i valori presenti nell'estensione Authority Key Identifier della CRL coincidano con quelli riportati nel certificato del Trust Anchor utilizzato. Questa estensione include l'identificativo della chiave pubblica (keyid) da utilizzare per validare la firma della CRL, oltre al numero di serie (serial) e al nome dell'emittente (DirName) del certificato contenente tale chiave pubblica.

Se tali valori non corrispondono a quelli del certificato del Trust Anchor utilizzato per la verifica, è probabile che la CRL sia stata firmata con una chiave privata differente rispetto a quella del Trust Anchor utilizzata, oppure sia stata emessa da un'autorità diversa dal Trust Anchor previsto.

È importante ricordare che, per verificare correttamente la firma di una CRL, è necessario disporre esattamente del certificato che contiene la chiave pubblica corrispondente alla chiave privata utilizzata per firmarla.

Il Trust Anchor può ruotare la propria chiave privata ed emettere un nuovo certificato self-signed contenente una nuova chiave pubblica. In tal caso, le nuove CRL saranno firmate con la chiave privata ruotata. Se si scarica una nuova CRL senza aver prima aggiornato anche il certificato del Trust Anchor (cioè senza disporre della nuova chiave pubblica), la verifica della firma della CRL fallirà se si continua a usare la vecchia chiave pubblica ricevuta durante la fase di onboarding.