SAML 2.0 — Как проверить сертификат отправителя?

Я реализую SAML SP на Java.
Я отправляю AuthnRequest провайдеру идентификации SAML 2.0 и получаю зашифрованный ответ.
Мой вопрос:
Как убедиться, что ответ действительно исходит от провайдера идентификации, а не от хакера?
Недостаточно проверить подпись, так как это говорит мне только о том, что у отправителя есть совпадающая пара закрытых/открытых ключей, но это может быть кто угодно.
Итак, мне нужно, чтобы IDP Предоставьте мне заранее сертификат, который я загружаю в файл jks, и сравнивайте его каждый раз с сертификатом, который я извлекаю из элемента ds:X509Certificate ответа.
Теперь, существует ли стандартный способ сравнения сертификатов отправителя с тот, который хранится в моем хранилище ключей?
Я видел следующий код:

 KeyStore keyStore = getKS();
 PKIXParameters params = new PKIXParameters(keyStore);
 params.setRevocationEnabled(false);
 CertPath certPath = certificateFactory.generateCertPath(Arrays.asList(certFromResponse));
 CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
 CertPathValidatorResult result = certPathValidator.validate(certPath, params);

Это достаточно? Если проверка не выдает исключение, она проверяет личность отправителя?


person user1825949    schedule 30.01.2013    source источник
comment
Привет, как вы отправили запрос и получили ответ? Я также пытаюсь внедрить SAML SSO   -  person iCode    schedule 22.10.2014


Ответы (1)


Вот как я решил проверку подписей с помощью OpenSAML

http://blog.samlsecurity.com/2012/11/verifying-signatures-with-opensaml.html

Я также написал книгу Руководство по OpenSAML, в которой я подробно объяснить шифрование и подпись и многое другое с использованием OpenSAML.

Что важно для методов проверки OpenSAML, так это то, что они проверяют только криптографическую действительность подписи (то, что содержимое не было изменено). Однако это не подтверждает, что отправитель является кем-то, кому вы доверяете.

Средство проверки подписи создается с использованием открытого ключа отправителя для проверки подлинности открытого ключа отправителя. Обычно это происходит при настройке федерации удостоверений с использованием Метаданные SAML

person Stefan Rasmusson    schedule 30.01.2013
comment
Спасибо! Как я вижу, вы написали: PS. Эта проверка выполняет только криптографическую проверку подписи. Он не проверяет сертификат, используемый для подписи, на соответствие любому доверенному центру сертификации. Чтобы подтвердить действительность сертификата, при проверке должен использоваться механизм доверия. Это именно то, что мне нужно - подтвердить действительность сертификата. Вы знаете, как это сделать? - person user1825949; 30.01.2013
comment
Это решение сверяет подпись с открытым ключом, которым обмениваются метаданные. Обычно такой обмен происходит в метаданных, это также устраняет необходимость в каком-либо внешнем ЦС. В примере cred содержит открытый ключ для проверки. - person Stefan Rasmusson; 30.01.2013
comment
Ок, думаю, я понял. Спасибо! - person user1825949; 30.01.2013
comment
Отметьте ответ как правильный, если он решил вашу проблему. В противном случае вернитесь ко мне с комментарием. Я рад ответить на любые вопросы об OpenSAML - person Stefan Rasmusson; 30.01.2013
comment
Этот ответ, хотя и принят, не содержит никакой информации - person Stephen Crosby; 23.05.2015
comment
Я вижу, что часть решения находится в комментарии. Я добавил больше информации к ответу. Надеюсь, поможет - person Stefan Rasmusson; 24.05.2015