Подписать ответ SAML с подписью утверждения или без нее?

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

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

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

В) Что-то еще?


person Panman    schedule 05.08.2011    source источник


Ответы (4)


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

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

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

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

person daniel    schedule 16.08.2011
comment
Создать XML-фрагмент SignedInfo с подписью SHA1 › Я полагаю, это должен быть хэш SHA1? - person Duncan Jones; 12.08.2019

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

person Ian    schedule 05.08.2011

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

person JST    schedule 07.08.2011

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

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

person fajarkoe    schedule 09.03.2013