DevPortalPagoPA



Tabella dei contenuti

Come firmare una risposta per un fruitore

Il ModI lascia discrezione all'erogatore nell'indicare qual debba essere la procedura corretta di firma del payload e verifica da parte del fruitore.
Si riporta comunque a titolo di esempio una possibile gestione del meccanismo di firma del payload di risposta di un e-service.
Per maggiori informazioni, si veda la sezione dedicata.

Prerequisiti

Si assume che l'erogatore abbia:
  • creato un Portachiavi erogatore (vedi guida);
  • generato almeno un set di materiale crittografico e caricato la relativa chiave pubblica su PDND Interoperabilità all'interno del client (vedi tutorial);
  • associato il Portachiavi Erogatore all'e-service per la quale vuole firmare la risposta al fruitore (vedi tutorial).

Preparazione - Definire la struttura della risposta

L'erogatore definisce la struttura per firmare un payload di risposta HTTP utilizzando RSA, per garantire che i dati provenienti da un e-service e non siano stati modificati.
La risposta JSON che l'erogatore invia al fruitore sarà strutturata come segue:
1{
2  "data": {
3    "campo1": "valore1",
4    "campo2": "valore2"
5  },
6  "signature": "<firma_rsa_in_base64>",
7  "kid": "<id_chiave_pubblica>"
8}
9
10
Nome campoSignificato
datacontiene il payload, ossia i dati effettivi che l'e-service trasmette verso i fruitori
signaturecontiene la firma digitale del campo data, calcolata dall'e-service utilizzando una chiave privata RSA (appartenente ad un portachiavi all'e-service) e codificata in formato base64
kididentificatore della chiave usata per la firma; consente al fruitore di sapere quale chiave pubblica utilizzare per verificare la firma
Si passa quindi alla firma della risposta.

Step 1 - Creazione dell'hash

Il contenuto del campo data viene convertito in una stringa di byte e sottoposto a una funzione di hash utilizzando un algoritmo come SHA256.

Step 2 - Firma dell'hash

L’hash calcolato è poi firmato utilizzando la chiave privata corrispondente ad una delle pubbliche caricate sul proprio Portachiavi erogatore associato all'e-service.
La firma garantisce che solo chi possiede la chiave privata corrispondente a kid (erogatore) possa generare la firma specifica per quel contenuto. Il kid della chiave pubblica che si è caricata è disponibile all'interno del portachiavi, aprendo la pagina relativa alla singola chiave (Erogazione > Portachiavi erogatore, tab Chiavi pubbliche, selezionando la singola chiave di interesse).

Step 3 - Integrazione della firma nella risposta

Come definito nello step di preparazione, nel payload si inseriscono:
  • data: i dati veri e propri;
  • signature: la firma appena codificata in base64;
  • kid: il kid della chiave usata per firmare.
In questo modo, il fruitore sarà in grado di identificare univocamente la chiave da utilizzare per la propria verifica. Si invia quindi la risposta al fruitore.

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