Прежде всего, обратите внимание, что я новичок в настройке SSL. Раньше мне всегда повезло, что ИТ-отдел настроил это заранее. Поэтому будьте готовы к тому, что мне могут потребоваться разъяснения по некоторым вашим ответам. =)
Что я пытаюсь сделать
Я настраиваю веб-сайт компании для сотрудников. Например, будет начальная страница браузера, которая отображает контент, настроенный для каждого сотрудника. Таким образом, мне нужно иметь возможность идентифицировать упомянутого сотрудника, не требуя ни имени пользователя, ни пароля, ни другого запроса (одноразовая настройка в порядке, хотя я просто не хочу, чтобы они были запрошены каждый раз). Естественно, что SSL, похоже, будет лучшим способом сделать это.
У меня будет настройка базы данных MySQL для связывания учетных записей "user" с SSL_CLIENT_M_SERIAL и SSL_CLIENT_I_DN, которые, как я предполагаю, будут уникальными для каждого сертификата клиента (?). Я получил эту идею из этой статьи: http://cweiske.de/tagebuch/ssl-client-certificates.htm
В первый раз, когда пользователь переходит на внутренний веб-сайт, у них не будет сертификата (я НЕ хочу генерировать их вручную для клиентов!), и в этом случае $_SERVER [ "SSL_CLIENT_VERIFY" ] == "NONE". В этом случае он перейдет на страницу настройки учетной записи пользователя, которая будет включать шаг, на котором PHP генерирует сертификат клиента SSL и отправляет его в браузер для установки пользователем. Ницца и просто. Затем пользователь устанавливает сертификат, создается ассоциация и после перезапуска браузера (для хорошей оценки) пользователь возвращается на внутренний веб-сайт.
В этот момент Apache должен запросить сертификат клиента, который затем отправляет браузер. PHP script затем анализирует необходимые переменные $_SERVER, сравнивает их с базой данных MySQL, и хорошие времена выполняются всеми. Опять же, приятно и просто.
Что работает до сих пор
У меня установлены серверные сертификаты. И да, они самоподписаны (по понятным причинам). У Apache установлен mod_ssl, и все это работает нормально. Я создал PHP script, который просто сбрасывает массив $_SERVER, и все значения ключа SSL_SERVER_ * соответствуют сертификату, который я создал для него.
Проблема
Я не могу заставить клиентские сертификаты работать! В том же PHP script, независимо от того, что я делаю, отсутствуют SSL_CLIENT_VERIFY == "NONE" и другие ключи SSL_CLIENT_ *. Это то, что произойдет, если у меня SSLVerifyClient установлен на необязательный в ssl.conf. Согласно каждому учебнику, которое я прочитал, все говорят, что веб-сервер должен запросить браузер для сертификата клиента. Дело в том, что я не могу это сделать! Он просто переходит на PHP скрипт и предполагает, что у меня нет клиентских сертификатов. Это происходит в Firefox, Chrome и IE.
Поэтому я попробовал настроить SSLVerifyClient и перезапустить веб-сервер. С этой опцией я даже не могу установить SSL-соединение. Firefox просто говорит, что соединение было reset (в других браузерах также отображаются собственные версии этой ошибки). Что странно, что журналы не показывают ЛЮБОЙ активности при этих попытках подключения! То есть access_log, error_log, ssl_access_log, ssl_error_log, AND ssl_request_log все не показывают НИЧЕГО; это как будто попытка никогда не возникала. Это разочаровывает, потому что это означает, что у меня даже нет сообщения об ошибке для работы. Просто веб-сервер пассивно-агрессивно сказал мне идти в ад.
Я попытался создать/установить собственный сертификат клиента вручную, используя расширение PHP OpenSSL. Сертификат установлен просто отлично, хотя я не могу найти никакой информации о том, как связать этот сертификат с сервером (при условии, что мне даже нужно?). Кроме того, это все равно не имеет значения, потому что Apache по-прежнему даже не запрашивает сертификат клиента, если установлен дополнительный параметр. И если требуется, он просто взрывается без объяснения причин. Мне нужно, чтобы она была настроена на факультативный, чтобы эта схема работала.
Среда
ОС: CentOS 5.7 64-разрядная (VirtualBox)
Apache: 2.2.3
PHP: 5.3.10
Я предполагаю, что вам может понадобиться дополнительная информация, чтобы помочь мне, поэтому, пожалуйста, спросите! Я дам вам все, что вам нужно.
Подводя итог, мне нужно знать, как заставить Apache запрашивать сертификат клиента SSL с учетом условий, описанных выше. Кроме того, если есть специальное подписание /etc, которое должно быть сделано, чтобы сделать сертификат клиента "совместимым" с сертификатом сервера (опять же, БЕЗ делать это вручную через оболочку для каждого сертификата клиента!), Мне нужно знать, что в качестве хорошо.
Я на 100% застрял на этом. Невозможно найти что-либо даже отдаленно полезным в Google. Любая помощь, которую вы можете предоставить по этому поводу, будет TREMENDOUSLY оценена! Благодарю! =)