Я реализую 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);
Это достаточно? Если проверка не выдает исключение, она проверяет личность отправителя?