Документация по ОС FreeBSD Суббота, 20.04.2024, 07:33
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Apache

Apache+SSL
Итак, мне потребовалось прикрутить к моему WWW-серверу SSL. Ситуация осложнялась тем, что я не мог уйти с версии 1.3.9 Apache, так как под более новыми не компилировались нужные мне модули.

Сначала нам необходим сам Apache. Если у вас уже есть собранное и работающее дерево apache, то скопируйте его в безопасное место. Если нет, то вытяните самую последнюю версию Apache и разверните его.

Одновременно я собирал SSL для 1.3.12 и 1.3.9 версии Apache.

Для версии 1.3.9 необходимо взять следующие файлы.
http://www.modssl.org/source/mod_ssl-2.4.10-1.3.9.tar.gz
ftp://ftp.openssl.org/source/openssl-0.9.4.tar.gz

Для 1.3.12
ftp://ftp.modssl.org/source/mod_ssl-2.6.4-1.3.12.tar.gz
ftp://ftp.openssl.org/source/openssl-0.9.5a.tar.gz

Обратите внимание на различия в версиях.

Ниже я буду в скобках давать команды для 1.3.12. Все файлы лежат в одном
каталоге. В нем же лежит дерево Apache.

gzip -d -c mod_ssl-2.6.4-1.3.9.tar.gz | tar xvf -
(gzip -d -c mod_ssl-2.6.4-1.3.12.tar.gz | tar xvf -)
gzip -d -c openssl-0.9.4.tar.gz | tar xvf -
(gzip -d -c openssl-0.9.5a.tar.gz | tar xvf -)


Этими командами мы распаковали все пакеты.

cd openssl-0.9.4
(cd openssl-0.9.5a)
./config
make


Отконфигурировали и собрали openssl, пакет, который и будет обеспечивать
шифрование. Я рекомендую дать еще команду make install, после которой в
/usr/local/ssl будет лежать это пакет.

cd ..
cd mod_ssl-2.6.4-1.3.9
(cd mod_ssl-2.6.4-1.3.12)

./configure --with-apache=../apache_1.3.9 --with-ssl=../openssl-0.9.4 --
prefix=/usr/local/apache

(./configure --with-apache=../apache_1.3.12 --with-ssl=../openssl-0.9.5a --
prefix=/usr/local/apache)


Этой командой мы включили mod_ssl в число собираемых модулей для Apache.

Теперь просто перейдите в каталог с Apache и скажите make – все необходимые
модули будут собраны. Так же, если у вас раньше были собраны нестандартные
модули, как у меня, они никуда не исчезнут и будут тоже вкомпилированы.

make certificate

Этой командой вы сгенерируете тестовые сертификаты, так что тут вы можете не
особо думать над вопросами, можно просто давить Enter и вводить самые тупые
пароли.

make install

Этой командой вы инсталлируете Apache в предназначенное для него место
(/usr/local/apache).

Все, можете попробовать запустить apache командой

/usr/local/apache/bin/apachectl startssl

Если все запустилось (по команде ps ax|grep ht появляются httpd –DSSL), то
можете себя поздравить – оно собралось. Попытка обратиться к хосту по протоколу
https не даст вам ничего, так как сам Apache еще не сконфигурирован.

Итак, начнем конфигурировать, открываем в редакторе файл httpd.conf.

Listen 443
NameVirtualHost x.x.x.x:443


Эти команды указывают Apache слушать 443 порт (стандартный порт для https)и
обслуживать на нем виртуальные серверы.

Теперь добавляем описание виртуального сервера.


SSLEngine on
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
SSLLog /usr/local/apache/logs/ssl_engine_log
SSLLogLevel warn
SSLOptions +StdEnvVars

......



Вместо многоточия напишите остальные директивы, которые обычно указываются в этом месте.

Теперь можно попробовать перезапустить сервер. Опс, при запуске Apache требует ввести парольную фразу. Конечно, первый раз такое можно пережить, но такое поведение неприемлемо для рабочего сервера.

Входим в каталог с ssl.key
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key


Вводим пароль для дешифровки

chmod 400 server.key

И закрываем файл с отрытым ключом от посторонних глаз, все сервер больше не
будет спрашивать пароль. На данном этапе уже должен работать SSL на полную
катушку. То есть, набирая https://host вы должны получать запрос браузера на
использование этого сертификата.

Для того, что бы в дальнейшем облегчить нам жизнь, подредактируем немного
bin/apachectl файл. Исправим в нем условие start на startold, а startssl на
просто start. Затем скопируем его в /etc/rc.d/init.d/httpd. Теперь по умолчанию
при загрузке сервера, будет запускаться Apache с поддержкой SSL.

Чтобы не мучаться с PATH, сделаем, чтобы openssl запускался нормально.

cd /usr/local/bin
ln -s /usr/local/ssl/bin/openssl openssl


Итак, теперь будем генерировать нормальные сертификаты, без всяких SnakeOil.

Генерируем ключ.

openssl genrsa -des3 -out server.key 1024

На данном этапе мы создали server.key, теперь генерируем запрос в службу
верификации.

openssl req -new -key server.key -out server.csr

Будьте аккуратны в ответах, ведь это потом увидят все. Если ошиблись, все можн повторить заново. Да, не ошибитесь, CommonName – это адрес хоста без http://

Все, если вы получили следующую надпись, то запрос сгенерирован правильно

You now have to send this Certificate Signing Request (CSR) to a Certifying Authority (CA) for signing

Но мы не буржуи, подписывать у нас некому, поэтому мы будет сами
подписывать себя. Хотя если у вас есть деньги и вам необходимо подписать свой сертификат именно у глобальных авторизационных центров, то на modssl.org Вы найдете все необходимые адреса и ссылки.

openssl genrsa -des3 -out ca.key 1024
openssl req -new -x509 -days 365 -key ca.key -out ca.crt


Генерируем подпись авторизационного центра на год (можно и на больше), процедура полность схожа с генерацией ключа.

Копируем sign.sh из pkg.contrib из пакета mod_ssl в каталог с ключами

И подписываем свой же запрос
./sign.sh server.csr

Получив напись, содержащую

Now you have two files: server.key and server.crt. These now can be used as
following

Начинаем радоваться, все собрано так, как надо. Копируем server.key и server.crt на место старых, но в каталоге c crt файлом Makefile не трогаем. Скопировав новый .crt файл, наберите make в этом же каталоге – он создаст некий хеш файл.

Все, теперь перезапустите Apache и можете наслаждаться тем, что вы сделали
собственный WWW сервер, защищенный с помощью SSL.

Проверить защищенность вы можете посмотрев информацию о сертификатах или
соединении в info-окнах браузеров. Если вы им не доверяете, то дайте команду

openssl s_client -connect localhost:443 -state –debug

Она выведет полностью всю информацию, которую она сможет выжать из вашего SSL сервера.

Теперь о неприятном: к сожалению, я пока не смог разобраться, почему иногда
проскакивают ошибочные сообщения для версии Apache 1.3.9 (НЕ для 1.3.12 – с ним все в порядке).

Например, вышеприведенная команда для версии 1.3.9 возвращает ошибку, говоря о неправильной версии протокола, а для 1.3.12 отрабатывает нормально. Последняя версия openssl (0.9.5a) вообще не захотела компилироваться с 1.3.9, пришлось ставить 0.9.4. Конечно, путем грязного хака я заставил 0.9.5а компилироваться, но это неправильно (кстати, MSIE отказывался работать с этим хаком, когда NN соединялся без проблем). Во всех конференция рекомендуют брать самые последние версии всех трех пакетов. Скорее всего, если поподбирать версии, все соберется и будет работать вообще без ошибок. А с другой стороны – ну и что, что вот такие вот утилиты ругаются, tcpdump или любой другой анализатор трафика показывает, что соединение зашифровано. Что нам и требовалось.
 
(с) 2000 Вячеслав Калошин multik@sw.ru
Категория: Apache | Добавил: oleg (18.10.2007)
Просмотров: 1616 | Комментарии: 2 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024