Как настроить Apache 2.2 на работу с клиентскими сертификатами?

Многие владельцы, как интернет, так и корпоративных ресурсов используют Apache в качестве web-сервера. А также многие хотят использовать протокол HTTPS, и не просто шифрование трафика, но и авторизацию по клиентским сертификатам. Так как в интернете полно информации о том, как генерировать сертификаты, причем как серверные, так и клиентские, мы об этом говорить не будем, а поговорим о том, когда Вы уже сгенерировали сертификаты, но у Вас, почему-то не работает авторизация по клиентскому сертификату.

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

Хватит предыстории, давайте поговорим о самой секции.

 
   SSLInsecureRenegotiation on

Данную секцию необходимо прописывать в конфигурационном файле httpd.conf web-сервера Apache.

Настройка клиентских сертификатов в Apache 2.2

Небольшое лирическое отступление, для того чтобы вообще включить авторизацию по клиентским сертификатам на сервере Apache 2.2, необходимо прописать следующее:

  
   #Путь до защищенной директории
   <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/">
   #запрет входа по HTTP
   SSLRequireSSL          
   #включение авторизации по сертификату
   SSLVerifyClient require
   </Directory>
   #путь до доверенного сертификата
   SSLCACertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ca.crt"

Описание секции SSLInsecureRenegotiation в Apache 2.2

Теперь, давайте я расскажу, для чего нам нужна секция SSLInsecureRenegotiation, и стоит ли вообще Вам ее использовать.

Данная секция нужна для включения поддержки старых протоколов SSL и TLS, так как все новые Web сервера и браузеры работают на более новых версиях. Потому что была обнаружена уязвимость, которая позволяла хакеру, вклинится в данное соединение. Подробней о данной уязвимости можете прочитать в интернете, набрав в поисковике просто «CVE-2009-3555».

Казалось бы, да новые версии, но тогда все должны перейти на них, так оно и есть, но что используете Вы, когда пробуете авторизацию по клиентскому сертификату. Скорей всего Ваша проблема выглядит следующим образом. Вы сгенерировали сертификаты, настроили apache, установили в браузер сертификат (допустим в FireFox или Opera), и у Вас все якобы заработало, но когда речь доходит до Internet Explorer у Вас, почему-то не работает. Вы установили сертификат в хранилище «Личное», ну в общем как положено, а все равно не работает. А причина в том, что Вы скорей всего используете старую версию операционной системы, имеется в виду без обновления безопасности, так как Internet Explorer использует локальное хранилище сертификатов ОС, а другие браузеры используют собственное хранилище. А Вы в него как раз и установили данный сертификат (когда устанавливали в браузер). А сам браузер (FireFox или Opera) уже скорей всего давно обновлен и поэтому в данных браузерах у Вас все работало, в IE нет.

А если у Вас и в этих браузерах не работало, то посмотрите, какую версию Вы используете. Точно не знаю, но по-моему, все версии FireFox до 3.5 работают на старых протоколах. Это относится и к Internet Explorer, версии до 8 не будут работать с клиентскими сертификатами, если Вы используете последние версии Apache и SSL. Таким образом, новые защищенные протоколы поддерживают, версии Apache начиная с 2.2.15 и версии SSL начиная с 0.9.8m. Поэтому уже не рекомендуется использовать более ранние версии данных продуктов.

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

Авторизация по клиентским сертификатам в Apache 2.2 не работает

Сейчас давайте я расскажу, по каким причинам может не работать авторизация по клиентским сертификатам в Apache 2.2 и как это можно диагностировать.

Например, в браузере FireFox у Вас появилась следующая ошибка:

 
   ssl_error_handshake_failure_alert

Это свидетельствует о том, что Вы не прошли авторизацию по сертификату. Изначально причин может быть много, например:

  • Не установлен сертификат в браузер;
  • Сертификат сгенерирован неправильно;
  • Неправильно настроен Apache;
  • Или, как раз на сервере используется новые протоколы безопасности, а на клиенте нет.

Поэтому, если Вы уверенны, что первые три пункта Вы все сделали правильно, то остается только один вариант, о котором мы сегодня и говорим.

Все то же самое относится и к Internet Explorer, только там будет выходить другая, более общая ошибка, типа:

«Internet Explorer не может отобразить эту веб-страницу.»

Примечание! В некоторых случаях помогает просто отключить поддержку протокола TLS 1.0 в браузере IE при условии, что все обновления ОС установлены. «Сервис -> Свойства обозревателя ->Дополнительно -> убрать галочку TLS 1.0».

Что касается обновления Windows. Для того чтобы установить обновления, необходимое для устранения данной уязвимости, скачайте с официального сайта Microsoft обновление номер — KB2585542.

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

У меня на этом все, пока!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.