4

В настоящее время у нас есть группа веб-сервисов, предоставляющих интерфейсы для различных типов и ролей клиентов.Оптимизация проверки клиента SSL Client

фона:

  • Аутентификация осуществляется через SSL Client проверки сертификатов. Это в настоящее время выполняется в веб-сервисном коде (а не HTTP-сервером). Мы не хотим использовать менее безопасную схему. Это сообщение не означает авторизацию, а только аутентификацию.
  • Веб-службы говорят как SOAP, так и REST (JSON), и мне определенно не интересно начинать обсуждение преимуществ любого из этих подходов.
  • Все операции, открытые через веб-службы, являются лицами без гражданства.

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

Я хотел бы попытаться ограничить количество аутентификаций, создав HTTP-файл cookie (с ассоциированным сеансом на стороне сервера) после успешной проверки сертификата клиента, который при предоставлении клиентом приведет к пропущению проверки сертификата клиента (хотя все еще разговаривает по SSL). Я также хотел бы ограничить время сессий и сделать процессы максимально прозрачными с точки зрения клиента.

Мои вопросы:

  1. Это еще как безопасный? (и как мы можем оптимизировать для безопасности и прагматизма?)
  2. Есть ли свободные реализации этой схемы? (Я знаю продукт SiteMinder от CA)
  3. Учитывая вышеизложенное, следует ли нам продолжать выполнять аутентификацию в приложении или переходить на сервер?

ответ

4

генерации HTTP куки (с связан на стороне сервера сессии) после успешной сертификат клиента верификации, который при подаче на клиент будет вызывать проверки клиента сертификат будет пропущен

Это еще безопасно? (И как можно мы оптимизировать для безопасности и прагматизма?)

Это не совсем так безопасно, в теории, потому что сервер уже не может доказать себе, что это не люди-в-середина.

Когда клиент представлял собой клиентский сертификат, сервер может доверять ему криптографически. Клиент и сервер должны шифроваться и данные (ну, ключ сеанса) на основе ключа клиента.Без сертификата на стороне клиента сервер может только надеяться, что клиент сделал хорошую работу по проверке сертификата сервера (как воспринимается клиентом) и тем самым исключил возможность г-на Митма.

Удостоверенный клиент Windows доверяет более 200 корневым сертификатам CA. В отсутствие сертификата на стороне клиента сервер завершает доверие по расширению.

Вот хорошая рецензия о том, что искать в захвате пакетов, чтобы убедиться, что клиент CERT обеспечивает защиту от MiTM: http://www.carbonwind.net/ISA/ACaseofMITM/ACaseofMITMpart3.htm

Объяснения этого типа MiTM. http://www.networkworld.com/community/node/31124

Этот метод фактически используется некоторыми блоками устройств брандмауэра для глубокого контроля в SSL.

MitM раньше казался большой постановкой Непостижимого стиля Миссии, в которой было много усилий. На самом деле, хотя в любом месте пути он не принимает ничего, кроме взломанного DNS-резольвера или маршрутизатора. В мире есть много небольших ящиков Linksys и Netgear, и, возможно, у двух или трех из них нет последних обновлений безопасности.

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

Есть ли свободные реализации этой схемы? (Я знаю продукт SiteMinder от CA)

Только клиентский cookie, не так ли? Это похоже на стандартную часть каждой платформы веб-приложений.

Учитывая вышеизложенное, следует ли продолжать выполнять аутентификацию в приложении или переходить на сервер?

Аппаратные криптоаккуляторы (либо прокси-сервер SSL, либо карта ускорителя) могут значительно ускорить этот процесс.

Возможно, поможет помощь в проверке сертификата на HTTP-сервере. В любом случае, вы можете делать дублирование в крипто математике.

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

После проверки сертификата клиента вы можете попытаться кэшировать его хэш-файл (или даже все это) на короткое время. Это может избавить вас от необходимости повторять проверки подписи на всем пути доверия к каждому удару.

Как часто ваши клиенты совершают транзакции? Если те, которые составляют основную часть ваших транзакций, часто нажимают на вас, вы можете убедить их объединить несколько транзакций в одном согласовании и аутентификации SSL. Посмотрите на настройку заголовка HTTP Keep-Alive. Они могут делать это уже в некоторой степени. Возможно, ваше приложение проверяет сертификат клиента на каждый HTTP-запрос/ответ или только один раз в начале каждого сеанса?

В любом случае, это некоторые идеи, удачи!

+0

Спасибо, что спросили об этом. После того же вопроса три раза в тот же день в несколько разных контекстах (!) Я начал копать глубже.Оказывается, ответ немного более интересен: http://extendedsubset.com/?p=8 –