Аутентификация DoD CAC — проблема с сертификатом клиента в .NET C#, Windows Server 2008 R2, IIS 7.5

Мы разработали веб-приложение .NET C# для DoD, которое использует CAC (Common Access Card) в качестве единственного метода аутентификации. У нас есть доверенные SSL-сертификаты на серверах, приложение запущено в нескольких местах, и в основном все работает как надо.

Проблема №1

Основная проблема заключается в том, что на некоторых наших внутренних серверах разработки, когда вы нажимаете «войти в систему» ​​с действительным CAC в устройстве чтения карт, отображается только один сертификат, и он не из CAC. Он используется для аутентификации моего рабочего ноутбука в сети (атрибуты «Аутентификация клиента» и «Вход по смарт-карте» проверяются в оснастке «Сертификаты»).

У нас есть еще один сервер в другой сети, где проверка подлинности сертификата клиента работает хорошо - показывает сертификаты из CAC и не отображает сертификат, описанный выше. Я пытался сравнить все, что я мог придумать в Windows Server 2008 R2 на этих двух серверах, бок о бок, чтобы посмотреть, смогу ли я найти что-то, что может отличаться, но они оба кажутся установками Windows Server 2008 по умолчанию. Р2.

Следующий код используется для чтения сертификата клиента:

if (Request.ClientCertificate.IsPresent)
{
    HttpClientCertificate Cert = HttpContext.Current.Request.ClientCertificate;
    //use cert info to check db and create session
}

Этот файл находится в каталоге, где отмечены IIS > Настройки SSL > «Требовать SSL» и «Требовать клиентские сертификаты».

Я не знаю, является ли это проблемой конфигурации сервера или проблемой кодирования, но я работаю над этим несколько месяцев и не могу найти ответа, почему приложение не может получить сертификаты CAC только тогда, когда оно размещено на некоторых серверы.

Проблема №2

Если я получаю доступ к приложению на сервере, где CAC читается правильно, оно извлекает копии всех сертификатов из всех CAC, используемых для доступа к приложению на этом компьютере, а не только сертификаты из CAC физически в устройстве чтения карт. .

AKO [https://akologin.us.army.mil/] по крайней мере отфильтровывает сертификаты электронной почты; однако этот сайт не размещен на компьютере с Windows.

Заключение

Мне кажется, что должен быть лучший, более глубокий механизм для доступа и фильтрации клиентских сертификатов из устройства чтения смарт-карт, кроме коллекции Request.ClientCertificate и двух флажков в IIS.


person Joe D.    schedule 19.09.2013    source источник


Ответы (2)


У меня была точно такая же проблема. Ищите предупреждения SChannel в журналах системных событий.

«При запросе аутентификации клиента этот сервер отправляет клиенту список доверенных центров сертификации. Клиент использует этот список для выбора сертификата клиента, которому доверяет сервер. В настоящее время этот сервер доверяет стольким центрам сертификации, что список имеет стал слишком длинным. Таким образом, этот список был усечен. Администратор этой машины должен просмотреть центры сертификации, которым доверяют для аутентификации клиентов, и удалить те, которым на самом деле не нужно доверять».

В доверенных корневых центрах сертификации > сертификатов было около сотни сертификатов. Удалил все ненужные сертификаты и сделал IISreset от имени администратора, и все сайты снова заработали.

person user3018102    schedule 21.11.2013
comment
У меня была проблема, что IE не предлагал сертификаты для выбора. После выполнения ваших шагов теперь IE начал запрашивать выбор сертификата. Спасибо за это. Теперь на сервере разработки я использую самозаверяющий сертификат для SSL, а для клиентского сертификата я использую сертификат CAC, так как у меня нет другого клиентского сертификата для тестирования. Он показывает мне сообщение, что 403 - Запрещено: доступ запрещен. знаете ли вы какой-нибудь способ обойти это на машине разработки, я уверен, что это сработает на производстве. - person Dips; 13.01.2014

Джо,

Что касается проблемы № 1, попробуйте следующее: проверьте сертификаты доверенных корневых центров сертификации на рабочем сервере и на нерабочем сервере. Похоже, у вас может быть один или несколько отсутствующих или несоответствующих сертификатов сервера. Если у вас есть устаревшие, несоответствующие или отсутствующие сертификаты, вы можете загрузить их с DISA. Неработающий сервер может не получать последние обновления сертификатов. Однажды у нас был случай, когда в магазине было слишком много сертификатов. В этом случае мы просто удалили старые и/или ненужные сертификаты. Просто убедитесь, что вы ЭКСПОРТИРУЕТЕ любые сертификаты, которые вы планируете удалить, ПЕРЕД их удалением... на случай, если позже вы обнаружите, что они вам все-таки нужны (это будет говорить об «опыте»)!

Я надеюсь, что это полезно, а не просто то, что вы уже пробовали. Удачи!

person E. Shaffer    schedule 19.09.2013
comment
Я сравнил списки личных, промежуточных ЦС и доверенных корневых ЦС на рабочем сервере со списками на нерабочих серверах, и все они используют одни и те же сертификаты. - person Joe D.; 02.10.2013