«Неправильный элемент ссылки» при подписи подтверждения SAML с сертификатом x509

1

Я создаю SAML IdP для обработки SSO между студенческим порталом и сторонней системой. Мой код основан на CoverMyMeds Test Harness, и я использовал некоторые из своих неизмененных библиотек в моем проекте. Я также создал свой образец поставщика удостоверений, чтобы упростить эту проблему.

Страница, построенная на этом фундаменте для проверки подлинности, принимает идентификатор GUID с портала учеников, используя его для извлечения сведений о студенте из внутренней службы и упаковки в утверждение SAML, которое затем подписывается с сертификатом x.509 перед отправкой для стороннего поставщика услуг SAML. Именно здесь я застрял. При попытке подписать запрос SAML я получаю:

Малоформатный ссылочный элемент http://tennysonhull.com/Public/StackOverflow/SigningSAMLAssertionError.png

Отладка и исследования, которые я сделал, похоже, указывают на то, что код не является проблемой, но так, чтобы вы поняли, как я сюда попал: ComputeSignature() происходит из метода CertificateUtility → AppendSignatureToXMLDocument, который вызывается из SAML20Assertion → Метод SerializeAndSignSAMLResponse, который косвенно ссылается на страницу IdPLauncher.aspx.

Вот как выглядит это утверждение, прежде чем я попытаюсь подписать пакет. Я внимательно изучил это и пропустил его через отладчики, не обнаружив проблемы с ним.

Моя гипотеза заключается в том, что с сертификатом что-то не так, что самоподписано для целей тестирования. Компания, с которой я работаю, уверяет меня, что другие люди, которые интегрировали, использовали тестовые сертификаты в прошлом, но я не могу думать ни о какой другой причине, почему это будет неудачей. Хотя я пробовал множество вариантов, команда, с которой я, скорее всего, makecert.exe -a md5 -r -pe -n "CN=iGradTest" -ss my -sr localmachine -sky signature "c:\iGradTest.cer" тестовый сертификат, основанный на моих исследованиях: makecert.exe -a md5 -r -pe -n "CN=iGradTest" -ss my -sr localmachine -sky signature "c:\iGradTest.cer", но результирующие сертификаты по-прежнему имеют одинаковую проблему. Сгенерированный сертификат получил дружественное имя и настроен для работы с IIS с помощью winhttpcertcfg. Приложение успешно получает сертификат, но при попытке добавить его к утверждению не удается.

Я в недоумении, что делать дальше. Любые рекомендации относительно следующих шагов по выявлению и разрешению этой проблемы будут весьма полезны. Спасибо, что нашли время, чтобы прочитать/помочь.

Теги:
certificate
single-sign-on
saml-2.0

1 ответ

3
Лучший ответ

Исключением, с которым вы сталкиваетесь, означает, что URI ссылки не разрешает другой элемент, помеченный атрибутом ID.

Исходя из кода, SAML20Assertion.cs: 90 добавляет # к идентификатору, а затем CertificateUtility.cs: 69 добавляет его снова. Удалите его из одного из мест, и все хорошо.

SAML20Assertion.cs: 90:

CertificateUtility.AppendSignatureToXMLDocument(ref xmlResponse, "#" + ((AssertionType)Response.Items[0]).ID, SigningCert);

Должно быть

CertificateUtility.AppendSignatureToXMLDocument(ref xmlResponse, ((AssertionType)Response.Items[0]).ID, SigningCert);
  • 0
    Это сделало трюк! Очень признателен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню