Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4-1 Електрона комерція / Терминология SSL.doc
Скачиваний:
74
Добавлен:
02.02.2021
Размер:
416.26 Кб
Скачать

Создание самоподписного ssl-сертификата и настройка хоста Apache 2 для работы по https

  • администрирование

 

  • веб-сервер

Великий веб-сервер Apache 2 умеет работать по защищенному протоколу https в рамках которого всё передаваемая информация шифруется сервером и клиентом по криптографическому протоколу SSL. Это значит, что даже перехвативший запросы клиента и страницы возвращаемые сервером — не сможет посмотреть содержание этих запросов и этих страниц. Как минимум, все эти данные постоянно оседают у провайдера и если, например, его гнусный сотрудник захочет, то легко узнает те пароли, которые вы отправляете на многие сайты в POST- или GET-запросах.

Для собственного сервера вам, как минимум, следует беречь пароли от баз данных, вбвиаемые в веб-морду phpMyAdmin.

Для того, чтобы организовать шифрованную передачу по протоколу SSL требуется специальный сертификат на сервере. Его подтверждают (обычно за деньги) всякие серьёзные центры по сертификации. Но можно сгененрировать сертификат и самостоятельно — такой сертификат называется самоподписным, потому что никакой центр аттестации его не подтверждает, а подтверждаете лично вы.

Понятно, что для сайтов из мира электронной коммерции (особенно для тех, где имеется некий личный кабинет с каким-то счётом, который может быть злоумышленником опустошён) применять требуется полноценные сертификаты, подтверждённые авторитетным центром, а для сайтов не хранящих какие-то важные пользовательские данные — шифрование вообще ни к чему (ещё и нагрузку на сервер создаёт же), но для собственных нужд (вроде упомянутого phpMyAdmin`а) — сойдём и самоподписной.

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

Что, конечно, критично для неосведомлённых посетителей (тем более, если ваш сайт ориентирован далеко не на гиков), но годно — для вас лично или для команды разработчиков, коллег и пр. Так вот о том, как на своём сервере за несколько минут для нужного хоста настроить SSL с самоподписным сертификатом — далее и пойдёт речь.

Активируем соответствующий модуль Apache2, сделать это в любимом дистрибутиве можно так: sudo a2enmod ssl

Создаём свой ключ для шифрования: sudo openssl genrsa -des3 -out server.key 1024

В конце потребуется пару раз ввести (задать и подтвердить) пароль для вашего ключа. Тут всё стандартно: не забывайте свой пароль, но и не записывайте его на стикере в углу монитора. Минимально допустимая длина пароля тут — 4 символа, но рекомендуется задать пароль в 8+ символов, да такой, чтоб он содержал буквы разных регистров и цифры.

Можно создать не шифрованную копию ключа вот так: sudo openssl rsa -in server.key -out server.key.insecure

И для удобства это лучше сделать: иначе при каждой (ре-)активации хоста с SSL потребуется вводить пароль.

Плюс вот в чём: не придётся вводить пароль при запуске сервера.

Теперь будем создавать CSR, это тоже просто: sudo openssl req -new -key server.key -out server.csr

Вас попросят сообщить информацию о себе, в принципе (поскольку сертификат мы создаём самоподписной) можно ничего не сообщать, тупо вводя пустые ответы. Но если вы захотите получить «настоящий» сертификат CA, то все данные, конечно, надо заполнить, притом указывая достоверные значения.

Но перейдём к процессу самоподписания: sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Сертификат на этом, кстати, готов. Теперь надо скопировать файлы куда положено (чтоб их увидел Apache2) и настроить на обработку ssl сам веб-сервер.

Копируем ключи: sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private

Теперь настроим на использование SSL виртуальный хост, я сделаю это с хостом по умолчанию, который обязательно доступен сразу после установки Apache.

Теперь нам потребуется создать виртуальный хост, который будет поддерживать SSL. Итак, для начала создадим конфигурационный файл: sudo nano /etc/apache2/sites-available/example

И разместим туда примерно такую конфигурацию хоста: <VirtualHost *:80> ServerAdmin root@domain.tld ServerName domain.tld ServerAlias www.domain.tld DocumentRoot /var/www/example/public_html <Directory /var/www/example/public_html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/www/example/error.log CustomLog /var/www/example/access.log combined </VirtualHost> <VirtualHost *:443> ServerAdmin root@domain.tld ServerName domain.tld ServerAlias www.domain.tld DocumentRoot /var/www/example/public_html SSLEngine on SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key <Directory /var/www/example/public_html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/www/example/error.log CustomLog /var/www/example/access.log combined </VirtualHost>

Корнем сайта при этом будет директория /var/www/example/public_html, логи будут храниться в директории /var/www/example, а обслуживаться хостом будет домен domain.tld.

Вы уже, наверное, отметили для себя, чтоб для обычного http-соединения по 80 порту и для защищённого https-соединения по 443 порту создано два отдельных виртуальных хоста, во второй из хостов, соответственно, добавлены директивы для активации ssl, а остальные настройки совпадают. Но, в общем случае, настройки могли и различаться, т.е., грубо говоря, на одном домене но по разным протоколам (http или https) могут размещаться совершенно разные сайты.

И ещё есть такой нюанс: если вы собираетесь для нескольких виртуальных хостов на своём сервере использовать ssl, то описывать все хосты надо в отдельных файлах, т.е. для данного примера следовало бы создать /etc/apache2/sites-available/example и отдельно /etc/apache2/sites-available/example-ssl, описав по одному виртуальному хосту в каждом, а в файл/etc/apache2/apache2.conf надо добавить такую строку (например, в самый конец):

NameVirtualHost *:443

Иначе можете встретить такую примерно ругань от Apache: [warn] _default_ VirtualHost overlap on port 443, the first has precedence

Итак, сохраняем файл.

Активируем наш новый хост: sudo a2ensite example

Теперь научим Apache ждать соединение на стандартном для SSL порту 443, для этого отправимся редактировать файл: sudo nano /etc/apache2/ports.conf

Теперь надо осмотреться, если там уже есть блок подобный этому: <IfModule mod_ssl.c>     Listen 443 </IfModule>

Тогда никаких правок вносить не надо (при включение модуля ssl веб-сервер сам начнёт слушать нужный нам порт).

А вот если похожего блока нет, то добавляйте его в конец файла.

Сохраняем (если вносили изменения) или закрываем файл (в nano это можно сделать кнопкой F2).

Перезапускам веб-сервер: apache2ctl restart

Всё, можно пробовать заглянуть на свой хост по https.

27

Соседние файлы в папке 4-1 Електрона комерція