2014-07-15 24 views
6

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 sua KeyDescriptorType 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 e signing.

<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:

  1. mia propria chiave
  2. La mia chiave pubblica
  3. 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.

risposta

5

I metadati del proprio servizio devono contenere la chiave pubblica con il certificato. E sì, puoi usare lo stesso sia per la firma che per la crittografia.

Quando IDP desidera crittografare i dati da inviare a SP, lo fa utilizzando la chiave pubblica dell'SP. Quindi non c'è bisogno di includere "certificato della chiave aperta di IdP" come chiave di crittografia.

Hai detto che l'utilizzo della stessa chiave per la firma e la crittografia non funziona, sei riuscito a ottenere maggiori dettagli su cosa fallisce esattamente e dove?

+0

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? –

+2

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. –

+0

Brillante! Grazie mille. Mi hai davvero aiutato. –