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

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

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

Установка и настройка Apache и подписанных SSL-сертификатов [2008]
От автора

В связи с тем, что иногда приходится изучать кучу документации, тестировать и пробовать различные подходы, то тратится куча времени. Очень часто приходится бороздить просторы OpenNET'а, поэтому я решил, что накопленный опыт целесообразно выкладывать именно сюда, чтобы и мне было проще и оно наверное ещё кому пригодится. Так же очень часто статьи вроде бы уже об изученных вещах очень удачно переписываться и дополняются под новые версии программного обеспечения. Хотелось бы добавить, что так как статья писалась по горячим следам мне необходимых вещей, то и описывать я буду свой пример, т.е. разговаривать о виртуальных примерах и ситуациях я не намерен. На основе данной статьи можно заточить настройку web-сервера под свои нужды без особых проблем.

Введение

Со временем наступает момент, когда трафик от сервера к клиенту необходимо (или хотелось бы) шифровать. В моём случае это потребовалось для самописной системы, в которой проскакивали логины и пароли пользователей. Поэтому было решено использовать связку apache + mod_ssl.

Используемое ПО

  • FreeBSD 7.0
  • Apache 2.2.9

    Установка Apache

    Не люблю изобретать велосипед и выдумывать, если что-то придумано до меня, поэтому в установке ПО во FreeBSD я использую систему портов. Так же местоположение конфигов я не изменяю и оставляю по умолчанию.
    Устанавливаем Apache:

            # cd /usr/ports/www/apache22
            # make install clean

    При установке Apache первый раз появится диалоговое окно с выбором модулей. Необходимо проверить, что модуль SSL выбран (находится почти в самом низу). Остальные модули можно включить/отключить под свои нужды. После мы нажимаем "Ok" и ждём окончания компиляции и установки.

    Создание SSL-сертификатов

    После установки web-сервера и перед его конфигурированием нам необходимо создать ssl-сертификаты. Создавать их мы будем в папке с конфигами Apache. Для создания сертификатов нам потребуется ряд данных. Первое, что нам потребуется - это пароль. Как всегда придумываем что-нибудь длинное и сложное. В нашем примере пусть это будет "agu7Lirithiunee".

            # cd /usr/local/etc/apache22
            # openssl genrsa -des3 -rand /dev/random -out server.key 1024
            # openssl rsa -in server.key -out server.pem
            # openssl req -new -key server.key -out server.csr
            # openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

    При выполнении третьей команды нам необходимо будет заполнить небольшую анкету. По сути, можно постоянно нажимать Enter, но есть поля, которые заполнить всё же необходимо. Я бы рекомендовал не лениться, а заполнять все поля. Так же необходимо заметить, что файл server.csr нам потребуется для получения подписанного сертификата.
     
    Common Name (eg, YOUR name) []: www.domain.ru - заполняем полным доменным именем нашего сервера, для которого мы получаем сертификат.

    Email Address []: user@domain.ru - указываем свой адрес электронной почты.

    Дополнительные (extra) поля не заполняйте!

    По завершению у нас будет создано 4 файла: server.crt, server.csr, server.key, server.pem.

    По сути, на этом можно и остановиться: web-сервер уже сможет работать по ssl, но мы столкнёмся со следующими проблемами:

    1) Полученные сертификаты не являются подписанными, поэтому браузеры будут на них ругаться, что в свою очередь приведёт к тому, что пользователю потребуется выполнять ряд действий. Так как не все пользователи поймут, что от них надо они попросту забьют тревогу, закроют страницу и всё.

    2) Вполне возможно, что нам просто необходимы валидные сертификаты, поэтому нам не подойдут неподписанные, так как они не будут отвечать всем требованиям по безопасности.

    Выдачей подписанных сертификатов занимается ряд сервисов в интернете. К счастью есть и такие, которые дают подписанные сертификаты бесплатно:
  • http://www.freessl.su - сроком на 1 месяц
  • http://www.instantssl.com/ssl-certificate-products/free-ssl-certificate.html - сроком на 3 месяца

    1. Зайдя на http://www.instantssl.com/ssl-certificate-products/free-ssl-certificate.html нажимаем на кнопку Get It Free Now!

    2. В предложенной форме в первое поле мы копируем содержимое файла с расширением CSR (копируем полностью).

    3. Во втором поле выбираем пункт Apache-ModSSL.

    4. Нажимаем Next.

    5. Выбираем, на какой адрес высылать сертификаты.

    6. Нажимаем Confirm & Continue.

    7. В следующей форме заполняем все поля, выделенные красным цветом. Особое внимание обратите внимание на Admin Contact email - это наш адрес, на который придут уведомления и сертификаты. Так же нас будут интересовать поля из раздела Choose your Admin Contact's Management Details - это наши логин и пароль в данной системе.

    8. Нажимаем Agree & Continue.

    После этого к нам на e-mail придёт уведомление, что мы зарегистрированы и что на адрес администратора домена выслан запрос на подтверждение. Так как у меня стоит перенаправление со служебных адресов (admin, root, webmaster), то я получаю сразу оба письма. В одном из них будет ссылка на форму подтверждения и код активации. Когда мы введёт оставшиеся данные к нам на почту придёт архив с двумя сертификатами, которые мы должны скопировать к ранее созданным сертификатам. После чего мы можем продолжить конфигурирование web-сервера.

    Конфигурирование Apache

    Для запуска Apache с SSL добавляем следующие строки в конфиги:

            # echo "apache2_enable=YES" >> /etc/rc.conf
            # echo "apache2ssl_enable=YES" >> /etc/rc.conf
            # echo "accf_http_load=YES" >> /boot/loader.conf
            # kldload accf_http

    Третья строка необходима для того, чтобы при запуске не появлялась ошибка:

             [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter

    Четвёртая строка необходима для того, чтобы не перегружать сервер, так как FreeBSD позволяет динамически подгружать/выгружать модули ядра. Для проверки, что модуль загрузился смотрим вывод команды kldstat.

    Проводим стандартную настройку httpd.conf:

    1) Указываем e-mail админа:

            ServerAdmin webmaster@domain.ru

    2) Указываем имя сервера и не забудьте раскомментировать строчку:

            ServerName www.domain.ru:80

    3) Раскомментируем поддержку виртуальных хостов:

            Include etc/apache22/extra/httpd-vhosts.conf

    4) Раскомментируем поддержку ssl:

            Include etc/apache22/extra/httpd-ssl.conf

    После этого приступим к конфигурированию httpd-ssl.conf:

    1) Для того, чтобы запуск web-сервера выполнялся автоматически и не останавливался на запрос пароль ssl-сертификатов, то заменяем

            SSLPassPhraseDialog  builtin

    на

            SSLPassPhraseDialog exec:/usr/local/etc/apache2/echo

    2) Изменяем секцию виртуального хоста под свои нужды. В конфиге много комментариев, поэтому я приведу только то, что должно быть.

            <VirtualHost a.b.c.d:443>
                DocumentRoot "/usr/local/www/apache22/data"
                ServerName www.domain.ru:443
                SSLEngine on
                SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
                SSLCertificateFile /usr/local/etc/apache22/www_domain_ru.crt
                SSLCertificateKeyFile "/usr/local/etc/apache22/server.key"
                SSLCACertificateFile /usr/local/etc/apache22/www_domain_ru.ca-bundle
                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                    SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory "/usr/local/www/apache22/cgi-bin">
                    SSLOptions +StdEnvVars
                </Directory>
                BrowserMatch ".*MSIE.*" \
                         nokeepalive ssl-unclean-shutdown \
                         downgrade-1.0 force-response-1.0
            </VirtualHost>

     a.b.c.d - IP-адрес виртуального хоста. Обратите внимание на директивы SSLCertificateFile и SSLCACertificateFile - это как раз те директивы, которые указывают на полученные и подписанные ssl-сертификаты.

    3) Создаём скрипт echo в папке /usr/local/etc/apache22, который будет отвечать Apache на запрос пароля сертификатов следующего содержания:

            #!/bin/sh
            /bin/echo agu7Lirithiunee

    Меняем владельца и права доступа:

            # chown root:wheel /usr/local/etc/apache22/echo
            # chmod 700 /usr/local/etc/apache22/echo

    4) Создаём обычный виртуальный хост. Для этого редактируем конфиг httpd-vhosts.conf. Примеры виртуальных хостов я комментирую, так как пользуюсь минимальным набором директив.

            NameVirtualHost a.b.c.d:80
            <VirtualHost a.b.c.d:80>
                DocumentRoot "/usr/local/www/apache22/data"
                ServerName www.domain.ru
            </VirtualHost>

    Важное дополнение. В связи с тем, что сертификаты подписываются на конкретный домен,  то у нас будет проблема, в случае нескольких алиасов для сервера или если сервер  доступен с локальной сети под одной адресацией/алиасом, а с интернета - под другими.  Самый верный способ - сделать перенаправление. Способов сделать много, покажу тот,  который использует файл .htaccess и mod_rewrite.

    1) Открываем для редактирования конфиг httpd-vhosts.conf.
    2) Разрешаем опцию AllowOverride, для этого меняем содержимое виртуального хоста на ниже следующее:

            NameVirtualHost a.b.c.d:80
            <VirtualHost a.b.c.d:80>
                DocumentRoot "/usr/local/www/apache22/data"
                ServerName www.domain.ru
                <Directory /usr/local/www/apache22/data/>
                  AllowOverride All
                </Directory>
            </VirtualHost>

    3) Далее нам необходимо создать файл .htaccess в директории нашего сайта содержащий такой код:

            RewriteEngine on
            Redirect / https://www.domain.ru/

    Не наступите на те же грабли, что и я как-то. Если у вас защищаемый контент находится по адресу http://www.domain.ru/dir, то всё равно строчка редирект будет выглядить как написано выше.

    Редактирование конфигов завершено. Теперь мы можем запустить Apache:

            [root@domain /usr/local/etc/apache22/]# /usr/local/etc/rc.d/apache22 start
            Performing sanity check on apache22 configuration:
            Syntax OK
            Starting apache22.

    После этого заходим через браузер на страницу http://www.domain.ru и видим It works! Стандартный протокол передачи работает. Для проверки ssl заходим по адресу https://www.domain.ru. В зависимости от браузера должен появится или замочек, или название сертификата, при клике на который будет писаться, что "подключение безопасно" или "подключение использует шифрование".

    Источники
  • http://www.opennet.ru/base/sec/ssl_freebsd.txt.html
  • http://www.opennet.ru/base/net/apache_mod_ssl.txt.html
  • http://www.opennet.ru/base/sec/apache_ssl_certification.txt.html
  • http://www.lissyara.su/?id=1284
  • http://httpd.apache.org/docs/2.2
  • http://httpd.apache.org/docs/2.2/ssl/
  • http://httpd.apache.org/docs/2.2/mod/mod_ssl.html
  • http://yandex.ru/yandsearch?clid=9582&text=apache22+ssl+freebsd


  • Источник: http://www.opennet.ru/base/net/apache_ssl_inst.txt.html
    Категория: Apache | Добавил: oleg (11.11.2008) | Автор: Бульба Сергей
    Просмотров: 1076 | Рейтинг: 0.0/0 |
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Форма входа

    Beastie

    Друзья сайта

    Статистика

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

    Copyright MyCorp © 2024