Настройка защищенного http соединения(https) на Ubuntu 8.04.4 (hardy)

Апрель 7, 2011

https-background

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

Чтобы защититься от потенциальной утери информации, необходимо защитить протокол http и настроить шифрование трафика между клиентом и сервером.

Для написания этой статьи использовались материалы следующих статей:

http://www.tc.umn.edu/~brams006/selfsign_ubuntu.html

http://www.akadia.com/services/ssh_test_certificate.html

http://www.debian-administration.org/article/Setting_up_an_SSL_server_with_Apache2

Итак, по порядку:

  1. Зайдем на сервер по ssh
    ssh -l username hostname
  2. Возьмем привилегии суперпользователя
    sudo su
    <введем пароль>
  3. Установим apache сервер
    aptitude install apache2
  4. Установим openssl
    aptitude install openssl
  5. Перейдем в каталог /etc/ssl для генерации ключей
    cd /etc/ssl
  6. Сгенерируем ключи, как описано в этой статье
    • openssl genrsa -des3 -out server.key 1024
      (здесь нужно будет ввести секретный пароль, который нужно будет вводить на протяжении генерации всех ключей)
    • openssl req -new -key server.key -out server.csr
      (здесь важно, чтобы Common Name соответствовал доменному имени, по которому впоследствии будет доступен зашифрованный узел)
    • cp server.key server.key.org
    • openssl rsa -in server.key.org -out server.key
    • openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  7. Создаем в каталоге /etc/apache2/ каталог ssl
    mkdir /etc/apache2/ssl
  8. Копируем (стоя в каталоге /etc/ssl) в вышесозданный каталог нижеописанные ключи
    cp server.crt server.key /etc/apache2/ssl/
  9. Идём в директорию /var сервера
    cd /var
  10. Создаём в ней директорию www-ssl
    mkdir www-ssl
  11. Создаём еще две директории командами:
    mkdir /var/www/html
    mkdir /var/www-ssl/html
    в директории /var/www/html будет лежать контент, доступный по протоколу http по 80 порту
    в директории /var/www-ssl/html будет лежать контент, доступный по протоколу https по 443 порту
  12. Идём в директорию /etc/apache2/sites-available/
    cd /etc/apache2/sites-available/
  13. Настраиваем виртуальный хост для http (80 порт)
    nano /etc/apache2/sites-available/default
    должно выглядеть примерно так:

    NameVirtualHost *:80
    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName localhost

    DocumentRoot /var/www/html/
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    <Directory /var/www/html/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    </Directory>


    все, что кроме этого — по умолчанию (не забудьте проверить закрывающийся тег </VirtualHost>)

  14. Копируем вышесозданный файл
    cp /etc/apache2/sites-available/default /etc/apache2/sites-available/default-ssl
  15. Настраиваем виртуальный хост для https (443 порт)
    nano /etc/apache2/sites-available/default-ssl
    должно выглядеть примерно так:

    NameVirtualHost *:443
    <VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName localhost

    DocumentRoot /var/www-ssl/html/
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    <Directory /var/www-ssl/html/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    </Directory>


    между верхней и нижней частью конфига все по умолчанию
    перед закрывающимся тегом </VirtualHost> пишем следующие строчки:

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/server.crt
    SSLCertificateKeyFile /etc/apache2/ssl/server.key

    </VirtualHost>

  16. Делаем симлинки конфигов
    ln -s /etc/apache2/sites-available/default /etc/apache2/sites-enabled/000-default
    ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/000-default-ssl
  17. Открываем файл /etc/apache2/ports.conf
    nano /etc/apache2/ports.conf
  18. Проверяем настройку ssl порта, если отсутствует то добавляем недостающие строки. Файл в итоге должен выглядеть примерно так:
    Listen 80

    <IfModule mod_ssl.c>
    Listen 443
    </IfModule>

  19. Проверяем чтобы права на файлы в папке /etc/apache2/ssl/ были 644 и файлы эти принадлежали руту
  20. Выполняем команду от рута
    a2enmod ssl
  21. Перезапускаем apache сервер
    /etc/init.d/apache2 restart
    /etc/init.d/apache2 force-reload
  22. Проверяем работоспособность.
    При входе на сервер по http браузер загрузит содержимое /var/www/html.
    При входе на сервер по https браузер предложит принять непроверенный сертификат и загрузит содержимое /var/www-ssl/html.

Если что не заработает (а это обязательно произойдет), то всю информацию можно найти в /var/log/apache2/error.log

Статья собрана по памяти. Если что упустил — напишите мне на vslugin@el-sys.org — поправлю

Комметирование закрыто now!