Je travaille sur une passerelle SAML en utilisant Ruby/Rails et j'essaye d'écrire du code qui valide le xml digital signature de la réponse SAML entrante par rapport au certificat x509 du service d'origine. Mon problème: la signature dépend d'une version canonisée du code XML qui est hachée puis signée et j'ai du mal à trouver une lib/gem ruby qui va canoniser XML pour the spec. J'ai trouvé un super old gem on rubyforge qui est un désordre mais je serais plus intéressé si quelque chose comme nokogiri supportait ce genre de fonctionnalité (à partir des docs de nokogiri, ce n'est pas le cas). J'ai fait de nombreuses recherches sur google, mais j'ai pensé que je demanderais par ici pour voir si quelqu'un a de bonnes idées avant de partir et d'essayer d'écrire ma propre version ou de retravailler la bibliothèque c14n-r existante.Canonicalisation XML dans Ruby
Répondre
Donnez ces deux pierres précieuses un coup:
http://rubygems.org/gems/coupa-libxml-ruby
http://rubygems.org/gems/xmlsec-ruby
Je leur ai écrit pour un projet SAML. Les premiers correctifs libxml-ruby ajoutent une liaison pour la fonction canonicalize dans la bibliothèque C de base.
Ce dernier est une liaison ruby pour xmlsec. À l'heure actuelle, tout ce qui fonctionne est la vérification de signature, ce qui était tout ce dont j'avais besoin pour le projet, mais il semble que cela correspondrait à vos besoins aussi.
Je recommanderais d'aller avec xmlsec car essayer d'écrire son propre code de vérification de signature XML est un exercice futile. Attendez que vous ayez à traiter plusieurs signatures enveloppées, certificats intégrés, gah. Laissez xmlsec gérer cette merde.
Merci pour l'homme de pointe; Je vais essayer la librairie xmlsec. Malheureusement, nokogiri a retardé le support de c14n jusqu'à la version 1.4.4, mais cela a été publié récemment et je ne le vois pas non plus. Il a peut-être été repoussé à 1.5. En attendant, je vais essayer! – whazzmaster
Juste pour le compte rendu, Nokogiri a maintenant le support de canonicalize: http://nokogiri.org/Nokogiri/XML/Document.html#method-i-canonicalize – jBilbo
libxml-ruby a également intégré la méthode canonicalize. http://xml4r.github.io/libxml-ruby/rdoc/classes/LibXML/XML/Document.html#method-i-canonicalize – Chloe
J'ai un rubis/rails fournisseur de services et un .NET (ComponentSoft) IDP
cela a fonctionné pour moi (j'eu aucun problème avec la version canonisé du XML):
received_certificate = XPath.first(response_document,"//samlp:Response//Signature//KeyInfo//X509Data//X509Certificate").text
def self.verify_signature(received_certificate, idp_certificate_path)
certificate ||= OpenSSL::X509::Certificate.new(File.read(idp_certificate_path))
cert_decoded = Base64.decode64(received_certificate)
cert = OpenSSL::X509::Certificate.new(cert_decoded)
certificate.verify(cert.public_key)
end
Je suppose que ce n'était pas votre problème ... – Mada
True-- J'ai besoin de valider le contenu signé
J'ai trouvé quelques liens qui pourraient aider: http://github.com/onelogin/ruby-saml/blob/master/lib/xml_sec.rb http://rubygems.org/gems/XMLCanonicalizer http: // rubygems.org/gems/saml2ruby – Mada
Après en regardant autour de plus, j'ai trouvé que nokogiri a mis le support c14n sur la liste todo pour le next release. Je ne sais pas plus que ça, mais il semble qu'aucune bibliothèque XML largement utilisée ne supporte c14n à partir de juin 2010. Je vais fermer ça car rien ne s'est vraiment passé.
La version de Nokogiri que j'utilise maintenant (v1.6.5) supporte définitivement la canonisation. Je l'utilise comme ça: 'Nokogiri :: XML (xml_string) {| config | config.strict} .canonicalize' – Epigene
Probablement un peu en retard et pas vraiment idéal, mais this fork utilise XMLStarlet via une ligne de commande pour la canonisation.
Le gem xmlcanonicalizer semble être le plus à jour canonicaliser rubis disponible:
https://github.com/andrewferk/xmlcanonicalizer
Il a un bug cependant, qui le rend inutile à canonicalising quelques arbres XML.Une personne a présenté un type patch, mais il n'a pas été encore appliquée:
https://github.com/andrewferk/xmlcanonicalizer/pull/1
Ce petit bijou patché plus de rubis SAML le tour est joué (et plus encore, si vous essayez de mettre en œuvre SAML SSO:
https://github.com/onelogin/ruby-saml
espoir qui aide quelqu'un à sauver les 3 jours que j'ai perdu en essayant de faire avancer les choses à travailler! :)
a eu des problèmes avec xmlcanonicalizer.
xmlstarlet a fonctionné pour moi:
`echo "#{xml_str}" | xmlstarlet c14n`
Il y a un [xmldsig] (https://github.com/benoist/xmldsig) gem pour vérifier et signer des documents XML. – Chloe