Вообще, я обо всём об этом уже писал. Но тема акутальности не потеряла. К тому же, появилось совсем уж простое техническое решение для Ubuntu 10.04+. Но начну с краткого ликбеза, потому что в целом вопрос, о котором речь пойдёт далее, из тех, что рекомендуются новичкам к скорейшему изучению. Итак, незащищённое http-соединение опасно тем, что любой, кто слушает (снифает) трафик, прекрасно видит все пароли, которые вы отсылаете на сайты вместе с логинами по протоколам POST или GET. Заниматься таким могут злоумышленники или, например, обезумевшие админы вашего провайдера.
Зато, если соединение с удалённым сервером устанавливается по протоколу https (с использованием для шифрования данных SSL сертификата), весь перехваченный трафик злоумышленникам — не пригодится, потому что ваши запросы к серверу и его ответы вам — зашифрованы (а расшифровка, в общем случае, архисложна или невозможна).
SSL сертификат это набор средств, которые позволяют шифровать передаваемую информацию открытым ключом (так, чтоб расшифровал только получатель) и однозначно идентифицировать владельца сертификата (для защиты от фишинга: злоумышленники не смогут подделать сертификат домена вашего банка, поэтому если вы попали на правильный домен и соединение защищено SSL — расслабьтесь). SSL сертификаты выдают специальные организации и обычно берут за это деньги (например, $100 в год). Но! Сертификат можно создать самостоятельно. Увы, при первом заходе на сайт с таким сертификатом браузер будет ругаться (ведь он заранее знает о центрах сертификации, но ничего не знает о вас), зато потом, когда вы подтвердите, что сертификату можно доверять — браузер создаст защищенное соединение с сервером, которое будет не хуже, чем обеспечиваемое платным сертификатом.
Конечно, это всё не нужно пользователям, если на сервере у вас крутится уютный бложик или какой-нибудь форум (и вы, наверное, догадываетесь, что на шифрование тоже тратятся ресурсы). Но ведь на том же самом сервере для тех же самых бложика с форумом, вы можете пользоваться веб-интерфейсом phpMyAdmin для управления СУБД. Перехваченные пароли нескольких пользователей форума — это так себе проблема, а вот пароль от всей базы данных ресурса с тысячими юзеров — куда страшнее. Соответственно, вам, как вебмастеру, ходить в phpMyAdmin и админку форумов/сайтов и пр. — лучше по защищенному SSL соединению. Согласны?
А теперь о том, как всё это настроить и запустить на своём сервере под управлением Ubuntu за пару минут (или даже быстрее, если вы быстро печатаете в консоли — потребуется лишь 5 команд).
Создаём самоподписной SSL-сертификат для Apache
Активируем модуль Apache для поддержки SSL:
sudo a2enmod ssl
Создаём директорию, куда положим ключи:
sudo mkdir /etc/apache2/ssl
Генерируем ключи:
sudo openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.key
Командой выше мы получаем ключ без пароля (passphrase), чтобы Apache не мучил нас запросам пароля при каждом перезапуске. В условиях повышенной безопасности такую возможность, конечно, игнорировать не надо, но мы решаем пока вполне бытовые задачи.
И, да, ключ наш будет действовать 365 дней. Так что через год его надо перегенерировать.
Включаем заготовленный разработчиками дефолтный виртуальный хост с поддержкой SSL:
sudo a2ensite default-ssl
Перезапускаем Apache:
sudo service apache2 restart
Готово! Теперь вы сможете зайти как на http://127.0.0.1/, так и на https://127.0.0.1/ (разумеется, тут не обязательно должен быть localhost, а может быть реальный IP вашего сервера). Если вы ставили из пакетов phpMyAdmin (sudo aptitude install phpmyadmin
), то и он уже доступен через ssl по адресу: https://127.0.0.1/phpmyadmin
Если захотите создать свой защищенный хост, то копируйте конфиг:
sudo cp /etc/apache2/sites-available/{default-ssl,mysslhost}
Потом правьте его под себя (вероятно, вы туда захотите добавить домен директивой ServerName example.tld
) и включайте ваш новый хост выше представленной командой a2ensite
с последующим перезапускам Apache.
»