Назад в раздел
Прикручиваем SSL на Apache
div.main {margin-left: 20pt; margin-right: 20pt}
Прикручиваем SSL на Apache
Вячеслав Калошин, http://win.linuxnews.ru/
Итак, мне потребовалось прикрутить к моему 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
|
|
|
|