2010-02-02 34 views
7

Tengo un cliente que está enviando una clave de seguridad. La encriptación que están usando es triple DES. Cada afirmación que envían tiene un valor de firma que debe validarse para otorgarles los privilegios necesarios. ¿Me puede dar un código de muestra que hace esto?Cómo validar un valor de firma SAML

+0

@king - ¿cuál es su plataforma? ¿Java? do#? php? por favor especifique para que el ejemplo/respuesta sea aplicable. –

+0

java usando opensaml – stu

Respuesta

13

El cifrado y la firma son dos animales diferentes. Triple DES es un método de clave simétrica (la misma clave utilizada para el cifrado y descifrado). Las firmas digitales, por otro lado, usan claves asimétricas (par de claves privadas/públicas), donde la firma se calcula usando la clave privada y se puede validar con la clave pública. Por lo tanto, si su cliente desea incluir firmas en XML que le envían, debe proporcionarle su clave pública.

Para el cifrado, lo que es típico en SAML es usar XMLEncryption, que define un formato XML para incluir información de claves de cifrado y datos cifrados en sus mensajes SAML. Dado que el intercambio de una clave simétrica estática es problemática; si se intercepta, el interceptor puede cifrar y descifrar cualquier mensaje; en cambio, lo que se puede hacer es usar una clave simétrica dinámica que se genera de nuevo para cada mensaje, encriptar el mensaje usando la clave, luego encripte esa clave con la clave pública de un par de claves de cifrado privadas/públicas y envíela junto con el mensaje. La clave simétrica cifrada solo se puede descifrar utilizando la mitad privada del par de claves utilizado para encriptarla.

Así que la diferencia más significativa aquí, desde una perspectiva clave, es que para firmar, el cliente tiene la clave privada y debe compartir la clave pública con usted, mientras que para el cifrado, mantiene la clave privada y debe compartir el público clave con el cliente

5

Si desea validar la firma en la aserción SAML o cualquiera de los objetos XML pueden firmar, el OpenSAML wiki tiene más información:

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

Puede buscar 'Ejemplos comprobación de firma'.

Este blog tiene también un ejemplo así:

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

Para obtener un 'credenciales' para la validación, ver aquí: http://mylifewithjava.blogspot.com/2011/03/getting-credentials-in-opensaml.html

Para información sobre cómo Resolver referencia XML en una Abrir objeto SAML, consulte aquí: https://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUsrManJavaCreateFromXML

Gracias, Yogesh

+0

Estoy explicando todo esto en detalle en mi nuevo libro, Una guía para OpenSAML, https://gumroad.com/l/a-guide-to-opensaml –

+0

Lamentablemente, los enlaces y el libro don ' Parece que cubre cómo construir la 'credencial' (utilizada por la función' SignatureValidator() ') desde la Firma dentro de la SAML. – GrandAdmiral

Cuestiones relacionadas