Мы разработали веб-приложение .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.