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:
.crt, .cer o .der, contenente il
certificato in formato
DER (Distinguished Encoding Rules), ovvero binario;
.pem contenente il certificato in formato PEM
(Privacy-Enhanced Mail), cioè
una codifica Base64 del DER, racchiusa tra i delimitatori BEGIN CERTIFICATE e END CERTIFICATE-----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-----
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:
Basic Constraints, i valori: CA:TRUE e pathlen:1Key Usage, i valori: Digital Signature, Key Encipherment Certificate Sign, CRL SignBasic Constraints, i valori: CA:TRUE e pathlen:0Key Usage, i valori: Digital Signature, Key EnciphermentGli 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:
Basic Constraints del certificato, dove è indicato CA:FALSE e pathlen:0Key Usage del certificato, dove è indicato Digital Signature, Key EnciphermentUna 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.
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.
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=(
"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"
)
# 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.der2. 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
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 |
|
Informazioni sulla chiave pubblica del Subject contenuta nel 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 |
|
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 |
Nome dell'algoritmo usato per firmare il certificato: ecdsa-with-SHA256
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
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 |
|
Informazioni sulla chiave pubblica del Subject contenuta nel 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 |
Nome dell'algoritmo usato per firmare il certificato: ecdsa-with-SHA256
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
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:
X509v3 Subject Authority Identifier del primo certificato.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.pem2. 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
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.
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
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
| 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 |
| Campo | Valore | Descrizione | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X509v3 Authority Key Identifier |
|
Informazioni utili a identificare la chiave pubblica corrispondente alla chiave privata utilizzata dall'Issuer per firmare la CRL |
| 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 |
Nome dell'algoritmo usato per firmare la CRL: ecdsa-with-SHA256
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
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:
X509v3 CRL Distribution Points del proprio
certificato l'URL esposto dal Trust Anchor, da cui è possibile ottenere la
CRL (Certificate Revocation List) aggiornata, e provvede a scaricarla localmente;Authority Key Identifier della CRL coincidano con quelli riportati nel certificato del
Trust Anchor;
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.
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.pem2. 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
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).
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.