La specifica dice che:metadati SP: certificato per la firma e la crittografia
Metadata for the OASIS Security Assertion Markup Language (SAML) V2.0
2.4.1.1 Elemento
<KeyDescriptor>
L'elemento
<KeyDescriptor>
fornisce informazioni sulla chiave crittografica (s) che un'entità utilizza per firmare dati o ricevere chiavi crittografate, insieme a ulteriori dettagli di crittografia . La suaKeyDescriptorType
tipo complesso costituito da seguenti elementi e attributi:
use
[opzionale]attributo opzionale indicante lo scopo della chiave viene descritto. I valori sono tratti dall'enumerazione KeyTypes e sono costituiti dai valori
encryption
esigning
.
<ds:KeyInfo>
[Required]elemento facoltativo che identifica direttamente o indirettamente, una chiave.
Per quanto ne so, per l'invio di dati sicuri in entrambe le direzioni, dovrei avere:
- mia propria chiave
- La mia chiave pubblica
- destinatario privato di chiave pubblica
Certificato di quale chiave dovrei specificare nei metadati SP- e posso utilizzare lo stesso certificato per la firma e la crittografia?
Il fornitore di IdP ha fornito il cosiddetto "modello di metadati" dove indicato dove e dove dovrebbe essere indicato.
Qui è rilevante parte (testualmente):
...
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
<!--
TODO It is necessary to insert here the certificate of the signature
key of the service provider in X509 DER format and Base64 encoded
-->
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
<!--
TODO It is necessary to insert here the certificate of the signature
key of the service provider in X509 DER format and Base64 encoded
-->
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
...
lo faccio:
...
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
MIID...ZiQ==
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
MIID...ZiQ==
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
...
Non funziona.
Quindi, AFAIK per la firma dovrei usare il certificato della mia chiave privata, e per la crittografia dovrei usare il certificato della chiave aperta di IdP.
IMHO dovrebbe essere così.
...
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
<!-- certificate of my private key here-->
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
<!-- certificate of the open key of IdP here -->
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
...
Ho ragione?
Sarei molto grato per l'informazione. Grazie a tutti.
Grazie mille per la risposta. I miei nuovi metadati non sono arrivati all'IdP, quindi uso quelli vecchi che non sono corretti e ottengo lo stesso errore - 'Impossibile cifrare l'asserzione'. Quando IdP riceverà nuovi metadati SP e se si verifica un errore, scriverò a riguardo. Ho suggerito di avere bisogno di una chiave pubblica di IdP per eseguire la crittografia delle richieste da SP a IdP. Queste richieste inviate senza crittografia? –
Prego Alexey. E sì, le richieste inviate da SP a IdP non utilizzano per lo più la crittografia XML. Generalmente il messaggio viene inviato tramite il canale https che fornisce già la crittografia del livello di trasporto, quindi non è necessario crittografarlo di nuovo sul livello del messaggio. –
Brillante! Grazie mille. Mi hai davvero aiutato. –