ADFS 2.0 - токен запроса для обслуживания в разных AD

У меня такой сценарий:

Active Directory 1: клиент WCF, ADFS 2.0 (STS)

Active Directory 2: служба WCF (проверяющая сторона)

Я добавил RP в ADFS, но когда я запрашиваю токен из ADFS, я получаю следующую ошибку: System.ServiceModel.FaultException: ID3242: токен безопасности не может быть аутентифицирован или авторизован.

Просматривая журнал событий ADFS, я обнаруживаю ошибку соответствия:

Произошла ошибка при попытке создать цепочку сертификатов для доверяющего сертификата http: // XXXXX / Service1 /, идентифицированного отпечатком «XXXXXXXXXXXX». Возможные причины: сертификат был отозван, цепочка сертификатов не может быть проверена, как указано в настройках отзыва сертификата доверия доверяющей стороны, или срок действия сертификата истек.

Вы можете использовать команды Windows PowerShell для AD FS 2.0, чтобы настроить параметры отзыва для сертификата шифрования проверяющей стороны. Параметры отзыва сертификата шифрования доверия проверяющей стороны: CheckChainExcludeRoot При построении цепочки сертификатов произошли следующие ошибки: Неизвестная ошибка. Неизвестная ошибка.

Действия пользователя: Убедитесь, что сертификат шифрования доверия проверяющей стороны действителен и не был отозван. Убедитесь, что AD FS 2.0 может получить доступ к списку отзыва сертификатов, если для параметра отзыва не указано значение «нет» или «только кэш». Проверьте настройки прокси-сервера. Дополнительные сведения о том, как проверить настройки прокси-сервера, см. В Руководстве по устранению неполадок AD FS 2.0 (http://go.microsoft.com/fwlink/?LinkId=182180).

Похоже, ADFS не доверяет сертификату подписи от RP (понятно, ЦС, выдавший сертификат подписи, находится в другом AD). CertificateRevokationList доступен из обоих активных каталогов.

Я добавил сертификат CA к надежным корневым сертификатам «локального компьютера», но я думаю, что проблема заключается в механизме проверки.

Что мне нужно настроить, чтобы ADFS выдавал токен, подписанный правильным сертификатом, или как я могу убедить ADFS в том, что сертификат действителен?

РЕДАКТИРОВАТЬ:

Я попытался изменить проверку отзыва с помощью команды powershell:

 Set-ADFSRelyingPartyTrust  -SigningCertificateRevocationCheck CheckEndCert

но безуспешно: Set-ADFSRelyingPartyTrust: набор параметров не может быть разрешен с использованием указанных именованных параметров.

At line:1 char:26
+ Set-ADFSRelyingPartyTrust <<<<   -SigningCertificateRevocationCheck CheckEndCert
    + CategoryInfo          : InvalidArgument: (:) [Set-ADFSRelyingPartyTrust], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.IdentityServer.PowerShell.Commands.SetRelyingPartyTrustC
   ommand

РЕДАКТИРОВАТЬ 2: это сработало:

(Get-ADFSRelyingPartyTrust) | Set-ADFSRelyingPartyTrust  -EncryptionCertificateRevocationCheck CheckEndCert

но теперь мой клиент в Active Directory 1 жалуется на сертификат ...

System.ServiceModel.Security.SecurityNegotiationException: не удалось согласовать безопасность SOAP с http: // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX / Service1 / для целевого http: // XXXXXXXXXXXXXXXXX / Service1 /. Подробнее см. Внутреннее исключение. ---> System.IdentityModel.Tokens.SecurityTokenValidationException: не удалось построить цепочку CN = RP-Service сертификата X.509. Используемый сертификат имеет цепочку доверия, которую невозможно проверить. Замените сертификат или измените certificateValidationMode. Не удалось построить цепочку сертификатов до доверенного корневого центра.


person flayn    schedule 18.04.2012    source источник


Ответы (3)


Возможно, вам стоит попробовать добавить свой сертификат RP-Service в хранилище Trusted People на машине, на которой работает ваш клиент WCF. Именно это я сделал при использовании самозаверяющего сертификата для тестирования вызова WCF в федерации с ADFS.

person Duy Pham    schedule 15.10.2013

У меня такая же ошибка. Что помогает использовать

Set-ADFSRelyingPartyTrust  -EncryptionCertificateRevocationCheck None

Но это отключит проверку только части RP. Поскольку мы говорим о федерации, то же самое произойдет и на федеративном сервере. Так что вы тоже должны это сделать. В любом случае, это изменило только те ошибки, которые я получаю - я все еще не могу объединить банкоматы.

person omni    schedule 09.08.2012
comment
Это то, что я написал в моем EDIT 2. Вы также можете попробовать установить проверку на CheckEndCert. - person flayn; 16.08.2012

У меня работает следующая команда:

Set-ADFSRelyingPartyTrust  -TargetName <relyingpartytrustName> -EncryptionCertificateRevocationCheck None

Несколько раз мы устанавливали сертификаты подписи и шифрования (самозаверяющие сертификаты, созданные ADFS) повсюду (то есть на серверах, на которых размещены службы WCF).

person ManyRootsofAllEvil    schedule 22.08.2013