LT   EN   RU  
2020 г. июль 5 д., Straipsniai.lt - Информационный портал
  
  Компьютеры > Компьютерные технологии > Безопасность > Сертификаты SSL
Lankomumo reitingas Версия для печати Spausdinti
Быстрое поднятие SSL для Apache под FreeBSD

(документация по установке, настройке UNIX/Linux, open-source)

Эта небольшая практическая заметка о том, как быстро создать сертификаты для установки связи по SSL c помощью OpenSSL и быстро настроить веб-сервер Apache+mod_ssl под FreeBSD для установки защищенного соединения.

Введение

Пытаясь настроить кодированное соединение по https-протоколу, чтобы просто не гонять пароли открытым текстом, столкнулась с проблемой — развитие документации, проработка удобства, и чарующая простота не являются свойствами этой технологии. Хотя, вроде все просто — есть дерево подписей и подписанный сертификат (грубо говоря — визитка сервера, с которым происходит соединение). Вы смотрите дерево подписей и сами думаете, доверяете вы этим подписям или нет. Или же у вас есть копия сертификата и вы сравниваете. В конце концов (и это требуется чаще всего) вам хочется не очень светиться эксклюзивными данными и вам все равно, какие там визитки. Эту простую задачу превратили в монстроидальный набор крючочков и ручечек. Мне понадобилась неделя чтобы, используя иногда по 3 статьи на разных языках одновременно, дойти до решения вопроса (у меня была задача номер три из моего списка :)

Задача

Создать конфигурацию виртуального сервера с возможностью подключения по HTTPS-протоколу для более менее безопасной передачи эксклюзиных данных (трафик будет шифроваться). Вопрос начального обмена ключами, который может повлиять на безопасность соединения я оставлю для самостоятельного изучения, как проблему выходящую за рамки этой статьи.

Используемые инструменты

* FreeBSD-4.7
* OpenSSL 0.9.6g
* Apache/1.3.26 + mod_perl/1.27

Настройка конфигурации OpenSSL

В файлике /etc/ssl/openssl.cnf надо проделать следующие изменения:

[ CA_default ]

dir = . # Это каталог для работы с ssl
certs = $dir/ssl.crt # Это где будут лежать сертификаты
crl_dir = $dir/ssl.crl # Это где будут листы "отзывов подписей"
database = $dir/index.txt # Здесь index file для индексирования запросов на подпись
new_certs_dir = $dir/ssl.crt # Сюда будут писать новые сертификаты

certificate = $dir/nemesida-ca.pem # Корневой сертификат
serial = $dir/serial # Серийный номер запроса
crl = $dir/ssl.crl/nemesida.pem # Текущий лист отзывов подписей
private_key = $dir/ssl.key/nemesida-ca.key# Секретный ключ для основного сертификата
RANDFILE = $dir/ssl.key/.rand #

Я так и не нашла, как обойти эти вещи заданием ключей, так что придется править конфиг.

Создаем «корневой» сертификат

Для удобства, перейдем в каталог с конфигурацией Apache, где у меня располагаются подкаталоги с искомыми сертификатами:

# cd /usr/local/etc/apache

Корневой сертификат является корнем дерева подписей и является, как бы, самой ГЛАВНОЙ подписью. Секретный ключ (он нужен для того, чтобы можно было воспользоваться вашим корневым сертификатом для подписи остальных) и сертификат создаются одной командой:

# openssl req -config /etc/ssl/openssl.cnf -new -x509 -keyout ssl.key/nemesida-ca.pem -out nemesida-ca.pem -days 3650

Вас спросят пароль — введите и запомните его. Все остальные поля заполняйте так, как вам подскажет сердце. Снимите пароль с ключа:

# openssl rsa -in ssl.key/nemesida-ca.pem -out nemesida-ca.key

Если вы не сможете спасти этот ключ от посягательств, то и пароль вам не поможет.

Что делает эта строка, я затрудняюсь ответить точно, но так сделать рекомендуют:

# openssl x509 -in nemesida-ca.pem -out nemesida-ca.crt

Вот и все — главная подпись, т.е. корневой сертификат, у вас есть. Он подписан сам собой.

Подготавливаем площадку

Следующие действия, которые надо не забыть совершить, вызывают у меня бурный восторг. Следует создать два файла с некоторой индексной информацией, создать которые openssl не может, равно как и выдать разумное сообщение по этому поводу. Создадим индексный файл (ключевое слово database из openssl.cnf):

# touch index.txt

Создадим файл серийных номеров (ключевое слово serial из openssl.cnf):

# echo '01' > serial

Этот файл должен содержать две цифры (обязательно). Если вы ещё не создавали никаких сертификатов кроме корневого, файл должен содержать 01.

Создаем сертификат сервера

Создание сертификатов сервера состоит из процедуры создания запроса на попись, а затем подписания этого запроса в отличии от создания самоподписанного корневого сертификата. Создаем запрос на подпись нового сертификата и создаем секретный ключ к нему:

# openssl req -config /etc/ssl/openssl.cnf -new -keyout ssl.key/nemesida.pem -out ssl.csr/nemesida.pem

Вводя даные, учтите, что поле Common Name должно содержать полностью определенное доменное имя (FQDN) того сайта, где вы будете использовать https-протокол, чтобы броузеры не выдавали предупреждения о неверности имени.

Снимите пароль с ключа:

# openssl rsa -in ssl.key/nemesida.pem -out nemesida.key

Подпишите запрос (подписка запроса и есть создание нового сертификата) своим корневым сертификатом:

# openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything -out ssl.crt/nemesida.pem -infiles ssl.csr/nemesida.pem

Подготовьте сертификат к использованию:

# openssl x509 -in ssl.crt/nemesida.pem -out ssl.crt/nemesida.crt

Списки запросов

Создайте на всякий случай список запросов (там будут храниться и данные по отзывам подписей, если вам это когда-либо понадобится):

# openssl ca -gencrl -out ssl.crl/nemesida.pem

Настройка Apache

В файле httpd.conf (сами найдите ваш файл конфигурации) прописываем:

NameVirtualHost *:443

DocumentRoot "/home/nemesida/www"
ServerName nemesida.ru
ScriptAlias /cgi-bin/ /home/nemesida/cgi-bin/
SSLEngine on
SSLCertificateFile /usr/local/etc/apache/ssl.rt/nemesida.crt
SSLCertificateKeyFile /usr/local/etc/apache/ssl.key/nemesida.key
SSLCACertificateFile /usr/local/etc/apache/nemesida-ca.crt
SSLCARevocationFile /usr/local/etc/apache/ssl.crl/nemesida.crl

SSLOptions +StdEnvVars

SSLOptions +StdEnvVars

SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

Вот собственно и все. Запускаете Apache и проверяете.

Замечания

Пока вы не разберетесь в работе SSL, нельзя считать соединение безопасным. В данном случае представлен быстрый вариант настройки, не дающий никаких гарантий.

Практически — это защита от дурака, которой тоже пренебрегать не следует.

Берегите секретные ключи — иначе вся эта мышиная возня не имеет смысла.

* Поддержка виртуальных хостов «name based» возможна не в полном варианте — сертификат вы не сможете сделать различными для разных «name based» виртуальных хостов. Это связано с тем, что сначала устанавливается SSL-туннель, а затем по нему идет обмен данными, что определяет выбор сертификатов до получения HTTP-запроса.

            

Lankomumo reitingas

Oбсудить на форуме - Oбсудить на форуме

Версия для печати - Версия для печати

Назад
Случайные теги:    Страны (22)    Процессоры (7)    Компьютерные игры (26)    Интернет (15)    Кормление грудью (5)    Гостья из будущего (35)    Автомобили (6)    Египет (5)    Стиль (5)    Транспорт (11)    Путешествия (2)    Математика (2)    Фехтирования (6)    Кормление (4)    Биология (34)    Астрология (13)    Комплектующие (18)    Филателия (15)    Анна Ахматова (3)    Азербайджан (7)    Наркопсихотерапия (2)    Мама и ребенок (19)    Память (2)    Лов рыбы (11)    Ислам (3)    Накопители (2)    Сельское хозяйство (19)    Психиатрия (13)    Сертификаты SSL (10)    Армения (10)    Культура (88)    Еврейи (10)    Йога (9)    Татуировки (5)    Прогр. обеспечение (15)    Религия (32)    Туризм (25)    Археология (3)    Воспитания (3)    Люди (94)    Мотоциклы (2)    Здаровья ребёнка (2)    Общение (322)    Фильмы (10)    Спорт (40)    Здоровье (86)    Экология (18)    Набоков В. В. (94)    Настольные игры (17)    Образование (101)
1. Сертификаты SSL для серверов IIS 5.0
2. Что такое SSL
3. Безопасный SSL
4. SSL в действии
5. Что такое SSL. Ложка дегтя
6. Как организовать в TheBat! прием почты по POP3 через SSL
7. Максим Дрогайцев "Что такое SSL?"
8. Найдена дыра в протоколе SSL
9. SSL - Secure Sockets Layer
1. Сертификаты SSL для серверов IIS 5.0
2. Найдена дыра в протоколе SSL
3. Что такое SSL
4. Максим Дрогайцев "Что такое SSL?"
5. Как организовать в TheBat! прием почты по POP3 через SSL
6. SSL в действии
7. Что такое SSL. Ложка дегтя
8. Безопасный SSL
9. SSL - Secure Sockets Layer
Map