SAML доверяй проверке
Я работаю в качестве SP и в последнее время нужно интегрироваться с IDP. В документе IDP он отправит мне ответ в виде http-сообщения. в ответе есть ds:SignatureValue и ds:X509Certificate. Существует нить, подобная этой SAML: почему сертификат находится в подписи?, ветка только ответит, как проверить, что это сообщение от того, кто оно говорит.
1) Что означают ds:SignatureValue и ds: X509Сертификат?
2) Как убедиться, что ответ от моего ВПЛ? Я имею в виду, что если хакеры знают мой http-адрес, они могут легко отправить аналогичный http-запрос в мое приложение. Я обнаружил, что в заголовке http-запроса есть реферер. Безопасно ли проверять запрос от моего IDP?
3) IDP попросил меня отправить публичные сертификаты подписи SP, формат должен быть двоичным кодом в кодировке DER X.509 (*.CER). Как создать публичную публичную подпись сертификатов?
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:Reference URI="#_2152811999472b94a0e9644dbc932cc3" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:Transforms xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ec:InclusiveNamespaces PrefixList="ds saml samlp xs" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">bW1Os7+WykqRt5h0mdv9o3ZF0JI=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
SignatureValue </ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>X509 certification</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
1 ответ
- Оба являются элементами цифровой подписи XML.
ds:SignatureValue
элемент содержит фактическую подпись ответа SAML, которая закодирована в Base64.ds:X509Certificate
Элемент - Сертификат подписи (содержит открытый ключ и другую информацию IdP), который закодирован в Base64. Проверьте - спецификация цифровой подписи XML для получения дополнительной информации. - Возможно, у вас есть сертификат IdP из его метаданных. Используйте сертификат IdP, чтобы подписать входящий ответ SAML и сравнить с полученным
ds:SignatureValue
из IdP. Если эти два значения подписи совпадают, вы можете убедиться, что ответ SAML действительно отправлен вашим IdP. Проверьте этот код о том, как проверить ответ, отправленный из IdP SP с помощью реализации OpenSAML. (Примечание: это мой репозиторий, в котором я реализовал реализацию SAML2.0 с использованием OpenSAML). - Для генерации сертификата доступны различные инструменты и библиотека. Одним из известных инструментов на Java является Keytool. Проверьте в Google, вы найдете много учебников по этому вопросу.