Канонизация XML в Ruby

Я работаю над шлюзом SAML с помощью Ruby/направляющих, и я пытаюсь написать некоторый код, который проверяет цифровую подпись XML входящего ответа SAML против x509 сертификата инициирующего сервиса.

Моя проблема: подпись зависит от канонизированной версии XML, который хешируется и затем подписывается, и я испытываю затруднения при нахождении рубинового lib/драгоценного камня, который канонизирует XML на спецификацию. Я нашел супер старый драгоценный камень на rubyforge, который является путаницей, но мне больше было бы интересно, если бы что-то как nokogiri поддерживало этот вид функциональности (из nokogiri документов, это не делает).

Я погуглил экстенсивно, но думал, что попросил бы здесь видеть, есть ли у кого-либо какое-либо хорошее понимание, прежде чем я пойду и попытаюсь записать свою собственную версию или переделать существующую c14n-r библиотеку.

10
задан Lance Roberts 26 January 2013 в 07:03
поделиться

2 ответа

У меня есть поставщик услуг ruby ​​/ rails и IDP .NET (ComponentSoft)

, это сработало для меня (у меня не было проблем с канонической версией 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
0
ответ дан 4 December 2019 в 03:15
поделиться

Осмотревшись вокруг еще немного, я обнаружил, что nokogiri включил поддержку c14n в список todo для следующего релиза. Больше я ничего не знаю, но похоже, что ни одна широко используемая XML-библиотека не поддерживает c14n по состоянию на июнь 2010 года. Я закрою эту тему, поскольку ничего особенного не всплыло.

1
ответ дан 4 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: