1 Марта, 2011

Авторизация на веб-сервере Apache по сертификату

Dmitriy Evteev
На днях для внутренних нужд компании потребовалось настроить веб-сервер Apache для авторизации пользователей в приложении с использованием цифровых сертификатов. Причем так, чтобы все было кошерно :) т.е. все сертификаты должны быть подписаны внутренним удостоверяющим центром Microsoft CA . Стоит признаться, что пришлось несколько повозиться, ибо подробного howto на просторах нашей бескрайней мне найти не удалось. Потому предположил, что шпаргалка на эту тему может оказаться полезной. Постановка задачи: требуется настроить авторизацию на веб-сервере Apache с использованием подписанных цифровых сертификатов внутренним удостоверяющим центром Microsoft CA. Решение: 1. Создаем пару ключей (server.key) и запрос сертификата для центра сертификации (request.der) openssl req -new -inform DER -sha1 -newkey rsa:2048 -nodes -keyout server.key -out request.der -subj "/CN=site.name.ru" 2. В оснастке "Шаблоны сертификатов" на сервере Microsoft CA разрешаем требуемому пользователю (например, себе) осуществлять подачу заявки на шаблон сертификата "Проверка подлинности сервера". Далее, в оснастке центра сертификации, создаем выдаваемый шаблон этого сертификата. 3. Отправляемся по адресу http(s)://<MicrosoftCa>/certsrv/, где выбираем "Запроса сертификата", после чего "расширенный запрос сертификата" и "Выдать запрос, используя base-64 шифрованный файл PKCS #10...". В поле "Сохраненный запрос" передаем содержимое файла request.der, а в выпадающем списке выбираем имя шаблона сертификата, созданного на предыдущем этапе. После чего, сертификат в формате DER-шифрования (certnew.cer) можно переместить в каталог с файлом server.key. 4. Теперь необходимо выполнить: openssl x509 -in certnew.cer -inform DER -out server.crt Проверка контрольных сумм. Открытый ключ: openssl x509 -noout -modulus -in server.crt | openssl sha1 Закрытый ключ: openssl rsa -noout -modulus -in server.key | openssl sha1 На этом этапе уже можно использовать стандартную конфигурацию веб-сервера Apache для работы с односторонним SSL. 5. Для того чтобы пользователи могли запрашивать сертификаты проверки подлинности, отвечающие определенным требованиям, может вновь потребоваться шаманство с оснасткой "Шаблоны сертификатов" на сервере Microsoft CA. Есть и другой путь стать владельцем сертификата "Enrollment Agent" и уже самостоятельно раздавать сертификаты конечным пользователям. 6. Чтобы веб-сервер Apache запрашивал клиентские сертификаты, необходимо внести следующие директивы в его конфигурационный файл (предполагается, что остальные директивы дополнены используемой конфигурацией настроек SSL по умолчанию, поставляемой с веб-сервером Apache): ... SSLCACertificateFile /etc/ssl/certs.list <Directory "/secure/www/"> SSLVerifyClient require SSLOptions +FakeBasicAuth AuthName "Auth require" AuthType Basic AuthUserFile /etc/ssl/certs.users require valid-user ... </Directory> ... , где файл "/etc/ssl/certs.list" содержит открытый ключ (или цепочку сертификатов) удостоверяющего центра Microsoft CA в формате base64 (его можно подгрузить из точки распространения); файл "/etc/ssl/certs.users" содержит список пользователей, которым разрешен доступ к каталогу "/secure/www/". Формат файла "/etc/ssl/certs.users": /DC=local/DC=dc/OU=users/CN=username1/emailAddress=username1@dc.local:xxj31ZMTZzkVA /DC=local/DC=dc/OU=users/CN=username2/emailAddress=username2@dc.local:xxj31ZMTZzkVA ... Чтобы получить указанный формат, можно воспользоваться командой: openssl x509 -noout -subject -in client.crt Магическая строка "xxj31ZMTZzkVA" всегда неизменна (это результат шифрования строки "password" с помощью алгоритма DES). Вот собственно и все.
или введите имя

CAPTCHA
2 Марта, 2011
А зачем тебе понадобилась Basic аутентификация? Задача ведь была авторизовать по сретификату?
0 |