На днях для внутренних нужд компании потребовалось настроить веб-сервер Apache для авторизации пользователей в приложении с использованием цифровых сертификатов. Причем так, чтобы все было кошерно :) т.е. все сертификаты должны быть подписаны внутренним удостоверяющим центром Microsoft CA .
Стоит признаться, что пришлось несколько повозиться, ибо подробного howto на просторах нашей бескрайней мне найти не удалось. Потому предположил, что шпаргалка на эту тему может оказаться полезной.
Постановка задачи:
требуется настроить авторизацию на веб-сервере Apache с использованием подписанных цифровых сертификатов внутренним удостоверяющим центром Microsoft CA.
name='more'> Решение:
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).
Вот собственно и все.
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Что с нашим NGFW? Ответы — 14 апреля в Кибердоме
Конференцию откроет сессия с участием Минцифры, где оценят конкурентоспособность NGFW-решений.