SAML échec de la vérification de la Signature
Notre IdP est un Salesforce.com org. La SP est une tierce partie .Net application. Au cours du développement, la 3ème partie a signalé qu'ils sont dans l'incapacité de valider la réponse SAML envoyé.
Nous avons décidé d'essayer de valider sur notre fin avec l'aide de ComponentSpace pour valider la réponse SAML. Ci-dessous est ce que nous avons essayé:
//Load the certificate from the file: certInFile
//Load the SAML in an XMLElement: samlXml
//Retrieve the certificate from the SAML: certInSaml
Console.WriteLine("SAML is valid ? " + SAMLResponse.IsValid(samlXml));
Console.WriteLine("Is SAML signed? " + SAMLMessageSignature.IsSigned(samlXml));
Console.WriteLine("Certificate found in SAML is same as certificate file? " + certInFile.Equals(certInSaml));
Console.WriteLine("Validated SAML with certificate found in SAML" + SAMLMessageSignature.Verify(samlXml, certInSaml));
Console.WriteLine("Validated SAML with certificate file" + SAMLMessageSignature.Verify(samlXml, certInFile));
Je suis vrai pour tout ce qui précède, sauf les deux derniers. Donc:
- La SAML est valable
- La SAML a une signature valide
- Le certificat de clé publique dans le SAML est le même que le fichier de certificat, nous avons
- La SAML est signé avec la clé privée de ni le fichier de certificat, ni la clé publique est envoyée dans le SAML
De 3,4 pouvons-nous en conclure que Salesforce est la signature, mais avec un certificat différent mais l'envoi de la mauvaise clé publique dans la réponse?!
Modifier: Exemple de SAML est ici http://pastebin.com/J8FTxnhJ
Ce qui me manque?
- Pouvez-vous coller le plein SAML message quelque part?
- pastebin.com/J8FTxnhJ
- N'avait-il résolu ? Je suis face à un même genre de problème où dans le XML signature de la validation échoue. IDP est Salesforce.com
Vous devez vous connecter pour publier un commentaire.
XML signature d'échec de la vérification, soit parce que le XML a été modifié après la signature ou le certificat incorrect est utilisé pour vérifier la signature. Le scénario le plus probable est que le faux certificat est utilisé.
Salesforce signes de la réponse SAML à l'aide de sa clé privée. À l'aide de l'administrateur Salesforce console, vous pouvez télécharger la clé publique correspondante/certificat qui doit être utilisé pour effectuer la vérification de la signature.
Lors de l'appel de
SAMLMessageSignature.Verify
, vous pouvez spécifier leX509Certificate
à utiliser pour effectuer la vérification qui est généralement ce que vous devez faire.Cependant, l'codé en base 64 X. 509 certificat est également incorporé dans le fichier XML signature. Vous pouvez utiliser ce certificat incorporé pour vérifier si la signature vérifie.
Pour ce faire, ne passe pas dans un X509Certificate à
SAMLMessageSignature.Verify
.Par exemple:
SAMLMessageSignature.Verify(samlXml, null);
Si cela fonctionne mais la spécification d'un certificat en bas pas de travail, alors cela confirme que le faux certificat est utilisé.
Vous pouvez appeler
SAMLMessageSignature.GetCertificate
pour récupérer le X. 509 certificat de XML signature de la comparer avec le certificat utilisé.Aussi, comme une note de côté, XML signatures s'appliquent à XML. Ils ne peuvent pas être directement vérifiée à l'aide de l'codé en base 64 réponse SAML envoyé dans les données HTTP Post. Le post de données doit être décodée pour XML avant d'essayer de vérifier le code XML signature.
Cela a fonctionné quand nous n'avons pas décoder le base64 SAML générés, mais directement essayé de le valider. Cependant, toujours pas pourquoi la ComponentSpace méthodes rapportées différemment au décodage de la chaîne.