DevPortalPagoPA


Tabella dei contenuti

Come verificare una risposta firmata con INTEGRITY_REST_02

Ci sono due casi nei quali si ottiene una risposta firmata con INTEGRITY_REST_02:
Per maggiori informazioni sulla garanzia della risposta, si veda la sezione dedicata. Per la specifica tecnica definita da AgID di INTEGRITY_REST_02, si veda la versione più recente delle Linee Guida sull'interoperabilità tecnica delle Pubbliche Amministrazioni — Pattern di sicurezza (paragrafo 5.3, pagg. 44 e seguenti).
La verifica della risposta firmata è una tutela in più per il fruitore, per garantire la non ripudiabilità e l'integrità dei dati, ma non è obbligatorio né per l'erogatore, né per il fruitore.

Struttura della risposta

Se la risposta è firmata, consisterà di:
  • header HTTP Agid-JWT-Signature: contiene un JWT con informazioni sulle quali basare le proprie verifiche;
  • header HTTP Digest: contiene un digest calcolato a partire dai dati contenuti nel payload;
  • header HTTP Content-Type: indica il content-type del payload;
  • payload: contiene i dati veri e propri.

Step 1: Verifica della firma

All'interno dell'header Agid-JWT-Signature , il richiedente troverà un JWT. Deserializzando il JWT, nell'header si troverà il campo kid.
È necessario verificare che la chiave privata con la quale è stato firmato il JWT corrisponda alla chiave pubblica reperibile attraverso il kid. La chiave è esposta in formato JWK.

Step 1A: Verifica della firma di una risposta firmata da un erogatore

Se si vuole verificare la risposta ottenuta da un erogatore di un e-service, la chiave è disponibile sulle API di PDND Interoperabilità all'endpoint GET /producerKeys/{kid} (ref. endpoint).
Per ottenere la chiave da PDND Interoperabilità, l'aderente deve aver:
  • creato un client di tipo API Interop (vedi tutorial);
  • generato almeno un set di materiale crittografico e caricato la relativa chiave pubblica su PDND Interoperabilità all'interno del client (vedi tutorial)
  • aver ottenuto un voucher valido per le API di PDND Interoperabilità (vedi tutorial).

Step 1B: Verifica della firma di una risposta firmata da PDND Interoperabilità

Se si vuole verificare la risposta ottenuta dalle API di PDND Interoperabilità, la chiave è disponibile sul .well-known. Ad esempio il well-known dell'ambiente di produzione si trova qui.
In questo caso, non è necessario configurare un client. Il .well-known è esposto pubblicamente come previsto dalla relativa specifica.

Step 2: Verifica del digest

Nello stesso JWT deserializzato dello step precedente, nel payload si troverà il campo signed_headers.digest.
È necessario verificare che questo digest corrisponda a quello che si trova all'interno dell'header HTTP Digest contenuto nella risposta pervenuta.

Step 3: Verifica del payload

Si recupera a questo punto il payload della chiamata e se ne calcola l'hash utilizzando l'algoritmo SHA-256. Il risultato ottenuto viene poi codificato in Base64. Il valore finale (da inserire nell'header) sarà composto dal nome dell'algoritmo seguito dal valore codificato. Ad esempio, un payload come
1{"testo": "Ciao mondo"}
2
deve essere codificato come
1SHA-256=cFfTOCesrWTLVzxn8fmHl4AcrUs40Lv5D275FmAZ96E=
2
come previsto dall'RFC-3230.
La codifica ottenuta deve corrispondere a quella contenuta nell'header HTTP Digest. Se c'è corrispondenza, il dato inviato dall'erogatore o dalle API di PDND Interoperabilità è esattamente quello ricevuto dall'aderente.

Step 4: Verifica degli header

L'ultimo passaggio consiste nel verificare l'integrità degli altri header HTTP coperti dalla firma crittografica.
All'interno del payload del JWT (recuperato dall'header Agid-JWT-Signature allo Step 1), il claim signed_headers è una lista di oggetti che, oltre al digest (già verificato allo Step 2), include le informazioni relative al formato (content-type) e alla compressione del dato originale (content-encoding), se presenti nella risposta.
Il fruitore deve estrarre questi valori dal JWT e accertarsi che siano identici ai valori degli omonimi header HTTP presenti nella risposta pervenuta. Se la corrispondenza è esatta, si ha la garanzia crittografica finale che né il payload né i metadati essenziali della comunicazione sono stati alterati in transito, concludendo con successo la validazione del pattern INTEGRITY_REST_02.

Verifica aggiuntiva degli header di una risposta firmata da PDND Interoperabilità

La risposta firmata da PDND Interoperabilità include nel JWT presente nell'header Agid-JWT-Signature dei claim aggiuntivi:
  • client_id corrisponde al client_id presente nel voucher inviato dal chiamante
  • x-correlation-id presente nel claim signed_headers corrispondente all'header X-Correlation-Id della response

Pagina successiva → Glossario

Hai bisogno di aiuto?

Apri un ticket utilizzando l’apposita funzione all’interno della tua Area Riservata

Dicci cosa ne pensi

Per segnalare problemi o dare feedback, puoi aprire una segnalazione su Github