У меня есть веб-сервер под управлением 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, дайте мне знать.