2010-02-02 10 views
7

Ho un cliente che sta inviando una chiave di sicurezza. La crittografia che stanno usando è tripla DES. Ogni asserzione che invia ha un valore di firma che deve essere convalidato per fornire loro i privilegi necessari. Puoi darmi un codice di esempio che lo fa?Come convalidare un valore di firma SAML

+0

@king - qual è la tua piattaforma? Giava? C#? php? si prega di specificare in modo che l'esempio/risposta sia applicabile. –

+0

java using opensaml – stu

risposta

13

La crittografia e la firma sono due animali diversi. Triple DES è un metodo a chiave simmetrica (stessa chiave utilizzata per la crittografia e la decrittografia). Le firme digitali, d'altra parte, utilizzano chiavi asimmetriche (coppia di chiavi private/pubbliche), in cui la firma viene calcolata utilizzando la chiave privata e può essere convalidata utilizzando la chiave pubblica. Pertanto, se il cliente desidera includere firme in XML che ti inviano, deve fornire la chiave pubblica.

Per la crittografia, ciò che è tipico in SAML è utilizzare XMLEncryption, che definisce un formato XML per includere le informazioni sulla chiave di crittografia e i dati crittografati nei messaggi SAML. Poiché lo scambio di una chiave simmetrica statica è problematico - se intercettato, l'intercettore può sia crittografare sia decrittografare qualsiasi messaggio - ciò che può essere fatto è utilizzare una chiave simmetrica dinamica che viene generata di nuovo per ogni messaggio, crittografare il messaggio usando la chiave, quindi crittografare quella chiave con la chiave pubblica di una coppia di chiavi di crittografia privata/pubblica e inviarla insieme al messaggio. La chiave simmetrica crittografata può essere decifrata solo utilizzando la metà privata della coppia di chiavi utilizzata per crittografarla.

Quindi la differenza più significativa qui, da un punto di vista chiave, è che per la firma, il cliente detiene la chiave privata e deve condividere la chiave pubblica con te, mentre per la crittografia, tieni la chiave privata e devi condividere il pubblico chiave con il cliente.

5

Se si desidera convalidare la firma sul SAML asserzione o uno qualsiasi degli oggetti XML dotato di firma, l'OpenSAML Wiki ha ulteriori informazioni:

https://wiki.shibboleth.net/confluence/plugins/viewsource/viewpagesrc.action?pageId=3277047

È possibile cercare i 'Esempi verifica firma'.

Questo post del blog ha anche un esempio così:

http://mylifewithjava.blogspot.com/2012/11/verifying-signatures-with-opensaml.html

Per ottenere un 'credenziale' per la convalida, vedere qui: http://mylifewithjava.blogspot.com/2011/03/getting-credentials-in-opensaml.html

Per info su come unmarshall XML in un Apri oggetto SAML, vedere qui: https://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUsrManJavaCreateFromXML

Grazie, Yogesh

+0

Sto spiegando tutto questo in dettaglio nel mio nuovo libro, Una guida a OpenSAML, https://gumroad.com/l/a-guide-to-opensaml –

+0

Sfortunatamente i link e il libro don ' Sembra che copra come costruire il 'credential '(usato dalla funzione' SignatureValidator() 'dalla Signature all'interno del SAML. – GrandAdmiral

Problemi correlati