Per avviare il processo di Onboarding, l'entità deve inviare una richiesta via e-mail all'indirizzo identitadigitale@pec.ipzs.it includendo le seguenti informazioni:
Nell'e-mail occorre fornire un URL univoco che identifica l'entità sulla rete.
Nell'e-mail occorre indicare l'indirizzo PEC ufficiale dell'entità.
Esempio: pagopaspa@pec.pagopa.it
Nell'e-mail occorre specificare un codice identificativo differente a seconda della natura dell'entità:
Esempio per entità pubblica (PagoPA): Codice IPA: 5N2TR557
Nell'e-mail occorre fornire la chiave pubblica ellittica, in formato JSON Web Key (JWK), che l'entità intende utilizzare nelle operazioni di firma dei propri Entity Configuration (EC), ovvero la Federation Entity Public Key dell'entità.
Esempio:
{
"kid": "NsXymfIILEPR5Y0t",
"kty": "EC",
"x": "gXY4FApFJCj91Gpb1K9GEIouTq2X3L0K64Iq0ob4l_g",
"y": "l-6dcrIrFVdrzoY9cRJv9zNuFOR3MsDz6TSDhB0xEo4",
"crv": "P-256"
}
È necessario allegare alla richiesta una CSR (Certificate Signing Request), in formato PKCS #10, contenente la Federation Entity Public Key dell'entità, al fine di richiedere al Trust Anchor l'emissione di un certificato X.509 che certifica tale chiave.
La CSR deve rispettare le seguenti condizioni:
https:// (es. CN=foo11.blob.core.windows.net/foo);
Esempio:
-----BEGIN CERTIFICATE REQUEST-----
MIIBTTCB9QIBADCBkjELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUxhemlvMQ0wCwYD
VQQHDARSb21hMRYwFAYDVQQKDA1QYWdvUEEgUy5wLkEuMSQwIgYDVQQDDBtmb28x
MS5ibG9iLmNvcmUud2luZG93cy5uZXQxJjAkBgkqhkiG9w0BCQEWF3BhZ29wYXNw
YUBwZWMucGFnb3BhLml0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgXY4FApF
JCj91Gpb1K9GEIouTq2X3L0K64Iq0ob4l/iX7p1ysisVV2vOhj1xEm/3M24U5Hcy
wPPpNIOEHTESjqAAMAoGCCqGSM49BAMCA0cAMEQCIF5En5RWaQbdwGnslgqztry3
fODzjO0xCA5AZ0qDZxTNAiAd/a6erYHQjMnEraYnkmZGug2gR2eiCQoyUzKi3+I5
jA==
-----END CERTIFICATE REQUEST-----
Puoi visualizzare il contenuto di questa CSR di esempio con strumenti come OpenSSL:
#!/bin/bash
openssl req -in richiesta.csr -noout -text
Il comando restituirà qualcosa di simile a:
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C = IT, ST = Lazio, L = Roma, O = PagoPA S.p.A., CN = foo11.blob.core.windows.net, emailAddress = pagopaspa@pec.pagopa.it
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
...
Attributes:
...
Signature Algorithm: ecdsa-with-SHA256
...
Signature Value:
...
/.well-known/openid-federation sia stato pubblicato un Entity Configuration
(EC)
firmato con la propria chiave privata corrispondente alla Federation Entity Public Key
fornita
nella richiesta di Onboarding.jwks valorizzato con un set di chiavi pubbliche (in formato JWK) contenente la
Federation Entity Public Key dell'entità;
iss valorizzato con il Federation Entity Identifier
dell'entità;
sub uguale al claim iss;iat ed exp valorizzati in modo che definiscano un intervallo
temporale valido;metadata contenente un oggetto JSON che descriva i metadati dell'entità
organizzati per Metadata Types, nel rispetto delle specifiche IT Wallet.A seguito dell'invio della richiesta da parte dell'entità, il Trust Anchor procederà con:
/.well-known/openid-federation e dei metadati contenuti al suo interno;
Una volta completate queste operazioni, l'entità riceverà in risposta dal Trust Anchor una e-mail contenente 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 (entrambi i certificati della catena sono espressi in formato DER codificato in Base64).
Esempio:
[
"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"
]
/list del Trust Anchor non sarà presente il Federation Entity Identifier
dell'entità all'interno del JSON Array di risposta in quanto il processo di Onboarding non è ancora
concluso.
L'entità, dopo aver ricevuto dal Trust Anchor l'e-mail di risposta alla sua richiesta di Onboarding contenente la catena di certificati X.509, dovrà:
authority_hints valorizzato con un JSON Array di stringhe
contenente il solo Federation Entity Identifier del Trust Anchor
Esempio:
{
"iat": 1718207217,
"exp": 1749743216,
"iss": "https://foo11.blob.core.windows.net/foo",
"sub": "https://foo11.blob.core.windows.net/foo",
"authority_hints": [ "https://pre.ta.wallet.ipzs.it" ],
...
}
jwks dell'EC, inserendo un claim x5c valorizzato con un JSON Array di
stringhe rappresentanti la catena di certificati ricevuti via e-mail dal Trust Anchor in
risposta alla richiesta di Onboarding (i certificati della catena sono espressi in formato DER
codificato in Base64);
Esempio:
{
"kid": "NsXymfIILEPR5Y0t",
"kty": "EC",
"x": "gXY4FApFJCj91Gpb1K9GEIouTq2X3L0K64Iq0ob4l_g",
"y": "l-6dcrIrFVdrzoY9cRJv9zNuFOR3MsDz6TSDhB0xEo4",
"crv": "P-256",
"x5c": [
"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"
]
}
/.well-known/openid-federation;
/resolve del Trust Anchor trasmettendo una richiesta HTTP di tipo GET
specificando in query string un parametro sub valorizzato con il proprio Federation Entity
Identifier in formato URL-encoded e un parametro trust_anchor valorizzato con il Federation
Entity Identifier del Trust Anchor in formato URL-encoded.
Esempio:
GET /resolve?sub=https%3A%2F%2Ffoo11.blob.core.windows.net%2Ffoo&trust_anchor=https%3A%2F%2Fpre.ta.wallet.ipzs.it HTTP/1.1
Host: pre.ta.wallet.ipzs.it
A seguito della Resolve Request trasmessa dall'entità, il Trust Anchor procederà con:
In caso di risposta con status code 200 OK, l'Onboarding dell'entità si è concluso con successo e l'entità è tenuta a validare il JWT contenuto nella Resolve Response ricevuta e ad estrarre dal payload la propria trust chain e i propri metadati validati dal Trust Anchor.
/resolve del Trust Anchor risponda con uno status code 400 o 404,
l'entità dovrà provvedere a sanare la problematica descrita nel messaggio di risposta prima di richiamare
nuovamente l'endpoint /resolve del Trust Anchor. Per status code diversi da 400 e 404, occorre
inviare una email a identitadigitale@pec.ipzs.it e segnalare la problematica.
/list del Trust Anchor sarà ora presente il Federation Entity Identifier
dell'entità all'interno del JSON Array di risposta.