Назад | Перейти на главную страницу

Аутентификация сертификата клиента Apache 2.2

У меня есть веб-сервер под управлением Apache 2.2 на моем Debian Linux. У меня есть корневой и промежуточный ЦС в Apache. Промежуточный ЦС создал мой сертификат веб-сервера, а также сертификаты клиентов. Я хотел бы использовать CN сертификата клиента в качестве имени пользователя, когда мой RADIUS-сервер запрашивает у меня учетные данные. Я смотрю на веб-сайт Apache, и похоже, что есть некоторые полезные функции (например, AuthBasicFake), однако они доступны только в Apache 2.4. Кто-нибудь знает способ решения этой проблемы?

Поскольку моя версия Debian - Wheezy (7), мне пришлось использовать apache 2.2 и хитрый обходной путь. Вот моя конфигурация Apache (с опущенной парой строк):

AddRadiusAuth ~~~~~~~~~~~~~~:1812 ~~~~~~~~~ 5:3
AddRadiusCookieValid 60

SSLEngine On
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder On
SSLOptions +FakeBasicAuth

SSLCertificateFile ~~~~~~~~~~~~~~~~~~~~~~
SSLCertificateKeyFile ~~~~~~~~~~~~~~~~~~~~~~
SSLCACertificateFile ~~~~~~~~~~~~~~~~~~~~~~
SSLCACertificatePath ~~~~~~~~~~~~~~~~~~~~~~

<Directory /var/www/>
    SSLVerifyClient require
    SSLVerifyDepth 10
    SSLOptions +StdEnvVars

    Options Indexes FollowSymLinks MultiViews
    DirectoryIndex /cgi-bin/index.html

    AllowOverride None
    Order allow,deny
    Allow from all

    AddHandler mod_python .py
    PythonHandler mod_python.publisher
    PythonDebug On

    AuthType Basic
    AuthName "RADIUS authentication for localhost"
    AuthBasicAuthoritative off
    AuthRadiusAuthoritative on
    AuthBasicProvider radius
    AuthRadiusActive On
    Require valid-user
</Directory>

В SSLOptions +FakeBasicAuth берет все в моем сертификате и использует его как имя пользователя и имеет пароль «пароль». У меня настроен RADIUS для проверки имени пользователя и пароля. Я создал сертификат клиента и включил только CN, «ExampleName». Я загрузил сертификат клиента в свой браузер и включил защиту паролем каждый раз, когда он используется. Apache читает "ExampleName" как "/ CN = ExampleName" и передает это RADIUS. Однако по какой-то причине (я предполагаю, что escape-символы как-то связаны с этим) RADIUS читает '/ CN = ExampleName' как '/ CN = 3DExampleName'. Поэтому, когда я настроил имя пользователя и пароль, он должен быть: «/ CN = 3DExampleName» и «пароль».

Когда я захожу на свой сайт, я выбираю сертификат, ввожу свой пароль (не «пароль», который я выбрал, когда защищал его паролем). Затем RADIUS запрашивает имя пользователя и пароль. Я ничего не ввожу и нажимаю ОК, и все работает. Я предполагаю, что FakeBasicAuth (Apache) передает имя пользователя '/ CN = ExampleName' (которое превращается в '/ CN = 3DExampleName') и пароль 'password' в RADIUS.

Извините за длинный ответ (на мой вопрос). Иногда я застреваю и, может быть, это кому-то поможет в будущем. Также, если у кого-то есть возможность лучше обойтись без обновления моего Debian до Jessie (8) или Apache 2.4, дайте мне знать.