Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Прикручиваем 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

  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте