Бормотухи.НЕТ

Вернуться   Бормотухи.НЕТ > Компьютеры > Операционные системы > Linux
Расширенный поиск

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2012, 19:12 Вверх   #1
In the Army Now
 
Аватар для Spartak
Spartak вне форума
Доп. информация
Лампочка Создание самоподписного 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пасибо:
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:40. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
 

Время генерации страницы 0.08272 секунды с 13 запросами