Подписать ответ SAML с подписью подтверждения или без нее? - PullRequest
14 голосов
/ 05 августа 2011

При подписании ответа SAML, который также имеет подписанное утверждение, я должен:

А) Сгенерировать подпись Ответа без подписи Утверждения. Затем введите подпись подтверждения после того, как обе подписи были сгенерированы.

B) Создайте подпись подтверждения и включите ее при создании подписи Ответа.

C) Что-то еще .?.

~ Заранее спасибо!

Ответы [ 4 ]

40 голосов
/ 16 августа 2011

SAML ужасен, каждый раз, когда я читаю ответ, они почти верны, вот правильный алгоритм:

  1. SHA1 каноническая версия Утверждения.
  2. Создание SignedInfoФрагмент XML с подписью SHA1
  3. Подпись фрагмента XML SignedInfo, снова каноническая форма
  4. Возьмите SignedInfo, подпись и ключевую информацию и создайте фрагмент XML подписи
  5. Вставьте этот SignatureXML в утверждение (должно идти прямо перед saml: subject)
  6. Не принимать утверждение (с включенной подписью) и вставьте в ответ
  7. SHA1 этот ответ
  8. Создание XML-фрагмента SignedInfo с подписью SHA1
  9. Подписание XML-фрагмента SignedInfo, снова каноническая форма
  10. Возьмите SignedInfo, подпись и ключевую информацию и создайте XML-фрагмент Signature
  11. Вставьте этот SignatureXML в ответ
  12. Добавьте информацию о версии XML в ответ.

Вот и все.SAML совершенно ужасно.Есть множество мелких тонкостей, которые делают реализацию SAML кошмаром (например, вычисление канонической формы подмножества XML (утверждение), также не включена XML-версия XML-документов.

Я закончил свою реализациюЯ надеюсь, что больше никогда не вернусь к такой боли.

7 голосов
/ 06 августа 2011

Я верю, что правильный ответ - Б). Сначала подпишите подтверждение, затем подпишите ответ, содержащий подписанные данные подтверждения. Однако, если один Эмитент / Сущность (STS / IDP / и т. Д.) Подписывает оба документа, нет ли реальной причины подписывать Утверждение? Просто подпишите протокольное сообщение / ответ, который должен включать данные подтверждения. Это сократит требования к обработке в SP. Что касается единого входа в Интернет, то я видел только две части, подписанные, когда у вас есть другая сущность, подписывающая Утверждение против Ответа. - Ян

6 голосов
/ 07 августа 2011

Если вы подписываете оба, то утверждение ДОЛЖНО быть сначала подписано, а затем ответ, поскольку подпись ответа будет основана на всем содержании ответа (включая подпись подтверждения). Таким образом, подпись второго утверждения приведет к аннулированию подписи ответа.

0 голосов
/ 09 марта 2013

Правильный ответ: B.

Если подтверждающая сторона подписывает ответ SAML с помощью A, то проверяющая сторона должна удалить подпись ответа SAML и подпись подтверждения SAML перед проверкой ответа SAML.Базовая спецификация SAML гласит, что подпись не должна генерироваться с использованием преобразований, отличных от конвертированного преобразования подписи или исключительного преобразования канонизации.Ни одно из этих двух преобразований не может удалить подпись утверждения SAML.Таким образом, проверяющая сторона не может проверить ответ SAML.

...