
Стоит признаться, что пришлось несколько повозиться, ибо подробного 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).
Вот собственно и все.
DES ведь соленый... или соль "xx" важна?
ОтветитьУдалитьПлохо искал)) Правда у меня не на Microsoft CA, но по аналогии.
ОтветитьУдалитьhttp://rootfox.com/blog/archives/242
to Анонимный:
ОтветитьУдалитьв данном случае это вообще не важно.
to netf0x:
видел :) однако ты ничего не говоришь про ключевой файл SSLCACertificateFile, содержащий открытый ключ CA в этой схеме. в моем случае, в этом файле целая цепочка сертификатов к корневому CA.
ага ещё можно было создать хранилише сертификатов в АД использовать смарт карты использовать в качестве электронной подписи или шифрования - един центр сертификации )))))
ОтветитьУдалитьпс: толсто думаю
to Dmitry Evteev:
ОтветитьУдалитьУ меня просто схема была попроще, а SSLCACertificateFile указан в куске приведенного конфига, да и сам я более раздолбай))