Сертификат WCF X509 Тип аутентификации Kerberos для NTLM - PullRequest
0 голосов
/ 05 сентября 2011

У меня проблема с развертыванием моего клиентского приложения WCF из Dev в область Stagging (так же, как в реальном времени).

В моем приложении ASP.NET.(который имеет клиента WCF) использует пользователя домена для пула приложений.Это означает, что когда я аутентифицирую свой сертификат X509, он использует аутентификацию Kerberos из-за учетной записи домена Windows.Теперь в промежуточной среде мы должны использовать локальную учетную запись компьютера для пула приложений.Это означает, что в промежуточной среде он использует NTLM при аутентификации с использованием сертификата X509.и это не работает.

Может ли кто-нибудь подсказать, как лучше всего решить (или обойти) эту проблему?

Спасибо

Редактировать: Исключение выглядит следующим образом:

в System.Security.Cryptography.CryptographicException.ThrowCryptographicException (Int32 ч.) В System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob (пароль-байт-хранилища данных, Байт-интерфейс, байт, интерфейсный класс, байт, безопасный интерфейс, логический ключ, логический ключ, логический ключ, логический ключ, логический ключ, логический ключ класса.Security.Cryptography.X509Certificates.X509Certificate2..ctor (Byte [] rawData, String password) в ... CertificateManager.GetClientCertificate (typCertificateTypes CertificateType) в

Примечание. Получаемый файл сертификата являетсяиз SQL база данных и не хранится в локальном хранилище сертификатов.

Приложение использует клиент WCF для связи с удаленным сервером с использованием сертификата X509.У нас нет контроля над сервисной частью.Единственная разница между кодом и конфигом - это учетная запись пула приложений ASP.NET.Эта учетная запись является учетной записью пользователя домена в dev, но локальной учетной записью пользователя в Stagging и Prod.(Я знаю, не спрашивайте! Это не мой выбор или решение :))

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Эта ошибка обычно возникает, когда пул приложений, под которым работает ваше приложение ASP.net, не имеет доступа к закрытому ключу сертификата клиента, который вы хотите присоединить для вызова службы WCF.Убедитесь, что удостоверение пула приложений имеет доступ к закрытому ключу сертификатов.Также вы можете вставить код, который вы используете для загрузки и прикрепить сертификат к служебному вызову WCF.

1 голос
/ 05 сентября 2011

Это немного неточное описание, не так ли? Какой режим безопасности вы используете и какой пункт сертификата в вашей конфигурации безопасности?

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

Промежуточная среда, которая не отражает производственную среду, бесполезна . Если он не отражает реальную среду, он не зависит от того, используете ли вы другой механизм аутентификации или вообще не используете аутентификацию. Если вы планируете использовать учетную запись домена и Kerberos в рабочей среде, вы должны иметь промежуточную среду с тестовым доменом и настроенным Kerberos. В противном случае вам вообще не придется использовать промежуточную обработку, потому что вы все равно исправите реальные ошибки интеграции в производственном процессе.

Хорошо, значит, ваш вопрос размыт, потому что он, очевидно, не имеет ничего общего с учетной записью, а безопасность WCF вообще не затрагивается Kerberos или NTLM, потому что вы используете сертификат клиента для аутентификации в службе, не так ли? ? Трассировка стека исключений говорит о том, что ваш код не может создать действительный сертификат из необработанных данных (загруженных с сервера SQL?). Таким образом, либо данные в базе данных SQL неверны, либо пароль неверен, либо вы неправильно загрузили данные.

...