Loading…
Tilbage

Profilbillede

Problemer med validering af LogoutResponse

Mikkel Ricky

Jeg er ved at teste en implementering af NemLog-in og alt virker på nær validering af signaturen på LogoutResponse fra IdP'en (https://saml.test-nemlog-in.dk/).

Jeg bruger php-saml (https://github.com/onelogin/php-saml) og certifikater fra https://test-nemlog-in.dk/Testportal/Test-nemlog-in-2.xml og det er som nævnt kun validering af logout-signaturen der fejler. Alt andet virker.

Hjælpeværktøjet på https://www.samltool.com/validate_logout_res.php rapporterer også fejl ved forsøg på at validere mit LogoutResponse.

Jeg håber der er nogen der kan hjælpe mig videre, og hvis der er brug for yderligere oplysninger så sig endelig til.

Venlig hilsen
Mikkel

Hvilke fejl rapporteres der?

Hej Søren

Fejlen der rapporteres er "Signature validation failed. Logout Response rejected", men det er php der genererer den efter at openssl_verify (http://php.net/manual/en/function.openssl-verify.php) returnerer 0.

Jeg er på ingen måde ekspert i signering og kryptering og lignende, men hvis der findes en tjekliste som jeg kan gå igennem for at tjekke mit setup så vil jeg meget gerne se den.

Venlig hilsen
Mikkel 

Hej Mikkel

Jeg mener at vi tidligere har kæmpet med netop onelogin, der vist ikke helt formåede at parse SAML korrekt.

Mit bud på en fremgangsmåde vil nok være at få openssl_verify til at logge hvad den er sur over. Mit gæt vil være at XML'en ikke er blevet canonaliseret på rette hvis, hvilket gør at signaturen afvises.

Når du så ved hvad årsagen til at den fejler er, er du væsentligt bedre i stand til at finde ud af hvad dit problem er.

Søren

openssl_verify rapporter følgende fejl

Error: error:04091068:rsa routines:INT_RSA_VERIFY:bad signature

men det vidste vi egentlig godt var tilfældet.

Jeg får SAMLResponse, RelayState, SigAlg og Signature i et GET-request direkte fra https://saml.test-nemlog-in.dk/ og skal så blot validere signaturen (vha. IdP'ens offentlige X.509-certifikat). Jeg formoder at XML-dokumentet i SAMLResponse er det samme som IdP'en har signeret, men det er måske ikke nødvendigvis tilfældet (jf. din kommentar om kanonalisering)?

Som det fremgår er jeg ikke ekspert på dette område og jeg har læst sidevis af dokumentation, men savner stadig at finde "Sådan kommer du i gang med OIOSAML" som kort og præcists viser hvad og hvordan man gør. Findes den guide derude et sted?

Venlig hilsen
Mikkel

Nu virker det!

Djævelen gemte sig i detaljen 

Further, note that URL-encoding is not canonical; that is, there are multiple legal encodings for a given value. The relying party MUST therefore perform the verification step using the original URL-encoded values it received on the query string. It is not sufficient to re-encode the parameters after they have been processed by software because the resulting encoding may not match the signer's encoding.
[http://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf]

Var det det du antydede, Søren?

Tusind tak for hjælpen!

Venlig hilsen
Mikkel

Hej Mikkel,

Hvordan fik du løst dette? Vi er nemlig ramt ind i nøjagtigt samme problem.

Mvh. Frederik

Jeg ville ønske at jeg havde gættet rigtigt, men det havde jeg ikke.

Som en del af valideringen af signaturen på en klump XML, er det vigtigt at man er enige om formateringen af det givne XML. Ellers virker det ikke. Derfor omskrives den til et kanonisk format. Desværre er der mere end et kanonisk format for XML, så valideringen kan gå galt hvis man bruger det forkerte. Det var den proces jeg gættede på gik galt, da jeg har set det ske før.

Men du kom videre, så alt er godt igen.

Søren