|
|
|
Опции темы | Поиск в этой теме |
15.12.2012, 19:12 Вверх | #1 | |||
In the Army Now
|
Создание самоподписного SSL-сертификата и настройка хоста Apache 2 для работы по https
Начну с краткого ликбеза, потому что в целом вопрос, о котором речь пойдёт далее, из тех, что рекомендуются новичкам к скорейшему изучению. Итак, незащищённое 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. Перенаправление HTTP запросов на HTTPS Если вы хотите запретить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS адрес. Чтобы добиться этого можно, например, организовать перенаправление с помощью mod_rewrite. Для этого сначала необходимо его активировать: sudo a2enmod rewrite sudo /etc/init.d/apache2 restart Затем изменить файл /etc/apache2/sites-enabled/000-default, отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл надо добавить внутрь блока <VirtualHost *:80> ... </VirtualHost> строчки: RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты всё равно будет не попасть. Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу. |
|||
Cказали cпасибо: |