Разное

Ssl apache2 ubuntu: Настройка HTTPS в Apache | Русскоязычная документация по Ubuntu

Настройка HTTPS в Apache | Русскоязычная документация по Ubuntu

Веб-сервер Apache полностью поддерживает работу по HTTPS. Для того, чтобы активировать поддержку HTTPS на уже установленном Apache необходимо выполнить следующее.

Использование самоподписанных сертификатов хоть и защищает от пассивного прослушивания, тем не менее не гарантирует клиентам, что сервер является именно тем сервером, который им нужен. Преймуществом самоподписанных сертификатов является их бесплатность. Сертификат, подписанных компанией-сертификатором (Certificate authority) стоит денег.

Для создания ключа и сертификата вводим команду:

openssl req -new -x509 -days 30 -keyout server.key -out server.pem

На вопрос «Enter PEM pass phrase:» отвечаем паролем, подтверждаем и запоминаем.
На все последующие вопросы отвечаем произвольно, можно просто щелкать по Enter соглашаясь с предложенными вариантами, только на вопрос «Common Name (eg, YOUR name) []:» отвечаем именем сайта, для которого создаем сертификат, например www.example.com.

После ответа на все вопросы в директории должны появиться два новых файла — server.pem и server.crt (ключ и сертификат, соответственно).

Чтобы использовать сгенерированный ключ нужно знать пароль введенный нами, и Apache будет спрашивать его у нас при загрузке, а к чему нам лишние вопросы от демонов? 🙂 Поэтому снимаем пароль с ключа:

cp server.key{,.orig}
openssl rsa -in server.key.orig -out server.key
rm server.key.orig

Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору:

sudo cp server.pem /etc/ssl/certs/
sudo cp server.key /etc/ssl/private/
sudo chmod 0600 /etc/ssl/private/server.key

Для начала необходимо активировать mod_ssl:

sudo a2enmod ssl

А затем включить настройки HTTPS сайта по умолчанию:

sudo a2ensite default-ssl

Теперь необходимо отредактировать файл с настройками HTTPS сайта по умолчанию, указав в нём пути к вашим сертификатам. Сам файл называется /etc/apache2/sites-enabled/default-ssl (или /etc/apache2/sites-enabled/default-ssl.conf).

В этом файле рекомендуется после директивы

SSLEngine on

добавить строчку

SSLProtocol all -SSLv2

дабы запретить использование устаревшего протокола SSLv2.

Дальше вам необходимо отредактировать параметры, ответственные за сертификаты.

# Публичный сертификат сервера
SSLCertificateFile    /etc/ssl/certs/server.pem
# Приватный ключ сервера
SSLCertificateKeyFile /etc/ssl/private/server.key

Теперь просто перезагрузите Apache:

sudo service apache2 restart

И если все параметры указаны верно, ваши сайты станут доступны по HTTPS.

Протокол HTTPS работает по 443 порту, поэтому если сервер находится за шлюзом, то необходимо на нём пробросить данный порт.

Перенаправление HTTP запросов на HTTPS

Если вы хотите запретить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS адрес. Сделаем это с помощью mod_alias. Если он не включён — включаем:

sudo a2enmod alias
sudo service apache2 restart

Затем изменяем файл /etc/apache2/sites-enabled/000-default, отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл добавляем директиву

Redirect / https://example.com/

При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты всё равно будет не попасть.

Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу.

Настройка HTTPS на Apache Ubuntu

Для того что бы настроить HTTPS на APACHE необходимо создать самоподписанный сертификат для сервера. Делается это просто: выполняем команду:

openssl req -new -x509 -days 30 -keyout server.key -out server.pem

если у вас стоит уже openssl, если же не стоит то ставим его

sudo apt-get install openssl

Первым вопросом при создании сертификата будет «Enter PEM pass phrase» это пароль от сертификата. Запомните его, он нам пригодиться дальше. И так далее в процессе создания сертификата у вас будут просить вводить следующие данные:

  • C — country, двухбуквенный код страны, например, RU или US
  • ST — state,  регион, область, район и т.д.
  • L — locality,  город
  • O — organization, название организации
  • OU — organization unit, отдел в организации
  • CN — common name,  адрес веб-сайта

После того как он создан, появятся 2 файла server.key и server.pem. Помните мы вводили пароль для сертификата, так вот после его установке при каждом запуске apache мы должны будем вводить данный пароль. Неудобно правда ли? Давайте снимем с себя лишние проблемы. Выполняем поочередно:

cp server.key{,.orig}
openssl rsa -in server.key.orig -out server.key // на этой строчке попросит ввести тот самый пароль
rm server.key.orig

Вот и все. Теперь пароль у нас спрашивать не будет. Скопируем их в /etc/ssl и сделаем доступными только админу

sudo cp server.pem /etc/ssl/certs/
sudo cp server.key /etc/ssl/private/
sudo chmod 0600 /etc/ssl/private/server.key

Теперь перейдем непосредственно к настройке Apache и Virtual Hosts.

Настойка Apache

включаем mod_ssl

sudo a2enmod ssl

Далее создадим виртуальный хост для ssl соединения. Для простоты решения скопируем все данные из обычного Virtual Hosts и поменяем/добавим некоторые данные. Переходим ‘/etc/apache2/sites-available/’ . Там выбираем нужный нам виртуальный хост для примера example.conf (у меня просто несколько сайтов на одном сервере). Копируем все данные внутри хоста и создаем новый. Допустим example-ssl.conf и вставляем содержимое. Теперь же надо поменять следующие данные вместо

<VirtualHost *:80>

ставим

<VirtualHost *:443>

Теперь добавляем где нибудь внутри следующие строчки

SSLEngine on
SSLProtocol all -SSLv2

# Публичный сертификат сервера
SSLCertificateFile    /etc/ssl/certs/server.pem
# Приватный ключ сервера
SSLCertificateKeyFile /etc/ssl/private/server.key

На этом с редактированием все. Добавляем новый виртуальный хост

sudo a2ensite example-ssl.conf

Теперь перезагружаем apache

sudo service apache2 restart

Если вам надо сделать перенаправление HTTP на HTTPS то читаем далее

Перенаправление HTTP запросов на HTTPS

Включаем mod_alias и перезагружаем apache

sudo a2enmod alias
sudo service apache2 restart

Теперь переходим все по тому же адресу ‘/etc/apache2/sites-available/’ и открываем example.conf и добавляем строчку

Redirect / https://example.com/

Вот и все перенаправление должно заработать

Подключаем SSL к Apache 2 на системе Ubuntu Trusty

Прочитано:
156

Задача: разобрать пошаговый план по настройке SSL подключения к собственноручно развернутому Web-сервиса на базе Apache 2 и настройка защиты. В будущем я эту заметку буду использовать, как направо так и налево. Да и наработка правильных действий никому не помешает.

План? А что план главное в голове или на бумаге составить список всего того что по Вашему мнению и по Вашему опыту может пригодиться дабы обезопасить Ваш сервис. Я не спорю, что в эту заметку нужно добавить такие шаги, как

  • Настройка Fail2ban
  • Настройка ufw
  • Настройка SSH

но вот только данная заметка станет уж сильно громадной, пока я лучше остановлю на одном шаге кой является в заглавии заметки.

Начинаю, забыл отметить, что все ниже указанные действия проводились над системе Ubuntu Trusty Server amd64

Поехали…

Шаг №1: Обновляю систему

ekzorchik@srv-trusty:~$ sudo rm -Rf /var/lib/apt/lists

ekzorchik@srv-trusty:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-trusty:~$ sudo apt-get install linux-generic-lts-xenial
linux-image-generic-lts-xenial -y

ekzorchik@srv-trusty:~$ sudo vi /etc/hosts

#::1 localhost ip6-localhost ip6-loopback

#ff02::1 ip6-allnodes

#ff02::2 ip6-allrouters

ekzorchik@srv-trusty:~$ sudo reboot

Шаг №2: Устанавливаю пакет LAMP

ekzorchik@srv-trusty:~$ sudo tasksel install lamp-server

New password for the MySQL "root" user:

Repeat password for the MySQL "root" user:

ekzorchik@srv-trusty:~$ sudo vi /etc/apache2/apache2.conf

ServerName srv-trusty

ekzorchik@srv-trusty:~$ sudo mysql_secure_installation

Шаг №3: Настраиваю минимальную защиту Web—сервиса

Добавляем/изменяем параметры дефолтной защиты Web-сервиса Apache2

ekzorchik@srv-trusty:~$ sudo vi /etc/apache2/conf-enabled/security.conf

ServerTokens Prod

ServerSignature Off

TraceEnable Off

Ввожу ограничения на подключение к серверу и сервису:

ekzorchik@ekzorchik:~$ sudo vi /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6=1

net.ipv6.conf.default.disable_ipv6=1

net.ipv6.conf.lo.disable_ipv6=1

# Ignore ICMP broadcast requests

net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing

net.ipv4.conf.all.accept_source_route = 0

net.ipv6.conf.all.accept_source_route = 0

net.ipv4.conf.default.accept_source_route = 0

net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks

net.ipv4.tcp_max_syn_backlog = 2048

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 5

# Ignore ICMP redirects

net.ipv4.conf.all.accept_redirects = 0

net.ipv6.conf.all.accept_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings (ресурс нельзя будет пропинговать, удобно)

net.ipv4.icmp_echo_ignore_all = 1

Затем подгружаю внесенные правила выше в работу:

ekzorchik@srv-trusty:~$ sudo sysctl -p

Шаг №4: Изменяю доступ к Web—сервису не через http, а только https

ekzorchik@srv-trusty:~$ sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/hosts.conf

ekzorchik@srv-trusty:~$ sudo unlink /etc/apache2/sites-available/000-default.conf

ekzorchik@srv-trusty:~$ sudo unlink /etc/apache2/sites-available/default-ssl.conf

ekzorchik@srv-trusty:~$ sudo unlink /etc/apache2/sites-enabled/000-default.conf

ekzorchik@srv-trusty:~$ openssl req -new -x509 -days 3650 -keyout srv-trusty.key -out srv-trusty.pem

Generating a 2048 bit RSA private key

writing new private key to 'srv-trusty.key'

Enter PEM pass phrase:

Verifying - Enter PEM pass phrase:

Common Name (e.g. server FQDN or YOUR name) []:10.7.9.130

  • req → запрос на создание сертификата
  • x509 → создание самоподписанного сертификата
  • days → срок в течении которого будет действовать сертификат
  • keyout → имя файла для генерируемого ключа
  • out → задаю файл для созданного сертификата
  • Common Name → если у сервера есть DNS имя указываем его, если нет, то IP адрес. Должен быть статическим, т. е. Закрепленным за данной системой.

ekzorchik@srv-trusty:~$ cp srv-trusty.key{,.orig}

ekzorchik@srv-trusty:~$ openssl rsa -in srv-trusty.key.orig -out srv-trusty.key

Enter pass phrase for srv-trusty.key.orig:

writing RSA key

ekzorchik@srv-trusty:~$ rm srv-trusty.key.orig

ekzorchik@srv-trusty:~$ sudo mv srv-trusty.pem /etc/ssl/certs/

ekzorchik@srv-trusty:~$ sudo mv srv-trusty.key /etc/ssl/private/

ekzorchik@srv-trusty:~$ sudo chmod 0600 /etc/ssl/private/srv-trusty.key

ekzorchik@srv-trusty:~$ sudo a2enmod ssl

Создаю сайт для сервиса используя дефолтный шаблон:

ekzorchik@srv-trusty:~$ sudo vi /etc/apache2/sites-available/hosts.conf

<IfModule mod_ssl.c>

<VirtualHost _default_:443>

ServerAdmin webmaster@localhost

DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on

SSLProtocol all -SSLv2

SSLCertificateFile /etc/ssl/certs/srv-trusty.pem

SSLCertificateKeyFile /etc/ssl/private/srv-trusty.key

<FilesMatch "\.(cgi|shtml|phtml|php)$">

SSLOptions +StdEnvVars

</FilesMatch>

<Directory /usr/lib/cgi-bin>

SSLOptions +StdEnvVars

</Directory>

</VirtualHost>

</IfModule>

ekzorchik@srv-trusty:~$ sudo a2ensite hosts.conf

Отключаю использование 80 TCP порта, буду использовать только 443:

ekzorchik@srv-trusty:~$ sudo vi /etc/apache2/ports.conf

#Listen 80

ekzorchik@srv-trusty:~$ sudo apache2ctl configtest

ekzorchik@srv-trusty:~$ sudo service apache2 restart

ekzorchik@srv-trusty:~$ sudo netstat -tulpn | grep apache2

tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1188/apache2

На заметку: После настроек Apache просканировав свой ресурс с другого хоста сетевой сканер nmap не смог определить что за ось на нем и другую полезную информацию.

Теперь проверяю, как отрабатывают все настройки выше если зайти через браузер на URL ссылку вида: https://IP&DNS, https://10.7.9.130/ , будет отображено вот такое сообщение:

Ваше подключение не защищено

Злоумышленники могут пытаться похитить ваши данные с сайта 10.7.9.130

Нажимаю «Дополнительные» — «Перейти на сайт 10.7.9.130 (небезопасно)» и отображается дефолтная страница: /var/www/html/index.html

На заметку: Когда я буду впредь настраивать новый сервис то обязательно нужно удалять все не относящееся к работе, в том числе выше приведенную ссылку на дефолтную загрузку тестовой страницы.

Но это еще не все, я советую на каждой системе будь-то в локальной сети, домашней сети, глобальной сети устанавливать и использовать брандмауэр, к примеру хорошо зарекомендовавший именуемый, как ufw (надстройка над правилами утилиты iptables).

Подведу итог: данной заметкой я набросал практические шаги которыми я пользуюсь при настройке Web-сервера Apache2 на системах Ubuntu релиза Trusty так и системах осуществляющих предоставление информации во всемирной паутине. Как уже не однократно говорил и буду говорить все нужно делать самим, учиться и еще раз учиться. На этом я прощаюсь, лучше я буду делиться своим опытом и наработкам в каждой новой заметке чем все сразу да и в одной. С уважением автор блога ekzorchik aka Олло Александр.

 

Включаем SSL в Apache (Debian или Ubuntu)

Прежде всего, нам необходимо, чтобы SSL была установлена и Apache имел установленный мод SSL. Проверить — установлен ли OpenSSL можно командой:

# dpkg —list | grep openssl
ii  openssl                             0.9.8k-7ubuntu8.5                 Secure Socket Layer (SSL) binary and related
ii  python-openssl                      0.10-1                            Python wrapper around the OpenSSL library

Если команда вернула пустоту — идем ставить OpenSSL — без него работать не будет.

Установка OpenSSL

# aptitude update
# aptitude install openssl

mod_ssl в Apache

Нам необходимо так-же, чтобы в Apache был включен mod_ssl. Проверяем это:

# cd /etc/apache2/mods-enabled
# ls | grep ssl
ssl.conf
ssl.load

Если команда вернула пустоту — нам нужно включить этот мод. Для этого выполняем:

# ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf
# ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load

Тут предполагается, что mod_ssl установлен в Apache. Так, с сервером LAMP он идет сразу, если же Apache собирался Вами из исходников и мода ssl нет, то придется его собрать отдельно.

Генерация сертификатов.

Создайте директорию, в которой будут храниться сертификаты. Вы можете хранить их как в директории самого Apache, так и в любом доступном для Apache месте, например, в каталоге сайта.

# cd /etc/apache2
# mkdir sslcerts
# chown www-data:www-data sslcerts
# cd sslcerts

Теперь приступим к созданию сертификатов.

# openssl genrsa -des3 -rand /dev/random -out server.key 1024

Здесь нас запросят ввести ключевую фразу, используемую в дальнейшем для авторизации ключа сервера. Внимательно вводите эту фразу — она нам понадобится во всех следующих шагах, в том числе ее нужно будет указать в конфиге Apache!

Заметка. Если процесс зависает и ничего не делает — прерываем его Ctrl+C и вместо «/dev/random» используем «/dev/urandom».

Далее.

# openssl rsa -in server.key -out server.pem
Enter pass phrase for server.key:
writing RSA key

# openssl req -new -key server.key -out mysite.csr

Здесь нас запросят ввести некоторое количество данных, помещаемых в сертификат. Вводите то, что считаете нужным, кроме строчки Common name. В этой строчке необходимо указать FQDN адрес сайта, с которого будет выдаваться сертификат (например, mysite.ru). Если это не сделать, то браузеры будут считать это ошибкой и помечать, что сертификат имеет неправильное Common name. В другой стороны — самоподписанный (как в нашем случае) сертификат они все равно не любят, т. ч. одной ошибкой больше, одной меньше — Ваше дело, особенно если Вы хотите использовать один сертификат на несколько сайтов сразу.

Вместо mysite.csr можно использовать название, похожее на название сайта — это уже файл, относящийся к сайту.

Extra-атрибуты можно не указывать совсем.

Далее.

# openssl x509 -req -days 3650 -in mysite.csr -signkey server.key -out mysite.crt

Цифра 3650 — это количество дней, которые сертификат будет действителен. Стандартное значение — 365 — нередко слишком мало из-за того, что каждый год сертификаты обновлять администраторы забывают.

Здесь следует отметить следующие моменты:

а) Файлы server.* — это файлы, на основе которых будут образованы все остальные сертификаты сайтов. Их генерировали мы один раз.

б) Для другого сайта (второго, третьего и т.д.) файлы server.key и server.pem генерировать не надо!

в) Ключ-фразу придется использовать эту же для генерации остальных сертификатов (для других сайтов).

Настройка Apache

Сертификаты у нас готовы, самое время настроить Apache для поддержки SSL/HTTPS.

1) Идем в /etc/apache2/mods-enabled и редактируем файл ssl.conf

Найдите фразу

SSLPassPhraseDialog builtin

и замените на

SSLPassPhraseDialog  |/etc/apache2/sslpwd.sh

2) Открываем на редактирование файл /etc/apache2/ports.conf

В блоке «<IfModule mod_ssl.c>» перед закрытием блока, после строчки «Listen 443» добавляем строчку «NameVirtualHost *:443»:

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
    NameVirtualHost *:443
</IfModule>

3) Редактируем файл /etc/apache2/sites-available/default-ssl и меняем в нем «<VirtualHost _default_:443>» на «<VirtualHost *:443>»:

<VirtualHost *:443>

4) Создаем новый файл /etc/apache2/sslpwd.sh со следующим содержанием:

#!/bin/sh
/bin/echo «ваша_ключевая_фраза»

где вместо «ваша_ключевая_фраза» укажите ту фразу, которую Вы использовали при создании сертификатов, тоже в кавычках (так надежнее). И дайте права запуска этому файлу:

# cd /etc/apache2
# chmod 755 sslpwd.sh

5) Теперь нам надо настроить сам сайт, чтобы он мог работать с SSL. Для этого открываем конфиг нашего сайта из /etc/apache2/sites-enabled/mysite.ru

Вместо mysite.ru — имя файла конфига Вашего сайта.

Для того, чтобы сайт был доступен по SSL нужно завести отдельный конфиг для 443-го порта. При этом на одинаковое имя сервера (ServerName) может быть как HTTP, так и HTTPS конфиги. Ниже приведен пример конфига сайта, который как раз может быть доступен как по HTTPS, так и по HTTP.

# HTTPS-version

        ServerName      mysite.ru
        ServerAlias     www.mysite.ru
        DocumentRoot    /www/mysite.ru
        DirectoryIndex  index.php
        SSLEngine       on
        SSLCipherSuite  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        
            SSLOptions  +StdEnvVars
        
        BrowserMatch «.*MSIE.*» \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        SSLCertificateFile      /etc/apache2/sslcerts/mysite.crt
        SSLCertificateKeyFile   /etc/apache2/sslcerts/server.pem

# And HTTP-version
<VirtualHost *:80>
        ServerName      mysite.ru
        ServerAlias     www.mysite.ru
        DocumentRoot    /www/mysite.ru
        DirectoryIndex  index.php
</VirtualHost>

6) Перезапускаем Apache:

# /etc/init.d/apache2 restart

Все, сайт mysite.ru будет доступен как через HTTP, так и через HTTPS. Можно HTTP версию прикрыть, конечно. Для этого достаточно убрать всю секцию:

<VirtualHost *:80>

 Актуально для: Apache 2.x и Debian Lenny/Squeeze

Настройка HTTPS в Ubuntu

Незащищённое http — соединение опасно тем, что существует возможность прослушивания трафика и соответственно паролей, отсылаемых на сайты вместе с логинами по POST или GET.

Использование сертификатов защищает от пассивного прослушивания и, если сертификат подписан компанией-центром сертификации (Certificate authority или CA) , гарантирует клиентам, что сервер является именно тем сервером, который им нужен.То-есть сертификат, подписанный CA, предоставляет два важных свойства в отличие от самоподписанного сертификата:

  1. Браузеры (обычно) автоматически распознают такой сертификат и позволяют устанавливать защищенные соединения без предупреждения пользователя.
  2. Когда CA выпускает подписанный сертификат, он гарантирует идентичность организации, которая предоставляет интернет страницы браузеру.

В Ubuntu есть возможность создания самоподписанных сертификатов, которые бесплатны и только шифруют трафик. Для большинства случаев этого достаточно.

Для начала, если не установлен, необходимо установить openssl:

sudo apt-get update
sudo apt-get install openssl

Для создания ключа и сертификата вводим команду:

sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/server.pem -keyout /etc/ssl/private/server.key

Этой командой  генерируется ключ без пароля (passphrase), чтобы Apache не мучил запросам пароля при каждом перезапуске.

На вопрос «Common Name (e.g. server FQDN or YOUR name) []:» необходимо ввести имя сайта, для которого создается сертификат, например www.example.com.

Настройка Apache

Для начала необходимо активировать mod_ssl:

sudo a2enmod ssl

а затем включить настройки HTTPS сайта по умолчанию:

sudo a2ensite default-ssl

Теперь необходимо отредактировать файл с настройками HTTPS сайта по умолчанию, указав в нём пути к сертификатам.
Сам файл называется

/etc/apache2/sites-enabled/default-ssl.conf

В этом файле рекомендуется после директивы

SSLEngine on

добавить строчку

SSLProtocol all -SSLv2

чтобы запретить использование устаревшего протокола SSLv2.

Дальше необходимо отредактировать параметры, ответственные за сертификаты.

# Публичный сертификат сервера
SSLCertificateFile    /etc/ssl/certs/server.pem
# Приватный ключ сервера
SSLCertificateKeyFile /etc/ssl/private/server.key

Перезагрузить  Apache:

sudo service apache2 restart

И если все параметры указаны верно, сайт станет доступнен по HTTPS.

Протокол HTTPS работает по 443 порту, поэтому если сервер находится за шлюзом, то необходимо на нём пробросить данный порт.

 

Настройка SSL в Apache

Сегодня уже никому не нужно объяснять что такое перехват трафика и зачем он нужен. С массовым нашествием беспроводных (и не всегда хорошо защищённых) методов доступа в Интернет необходимость шифрования сетевого трафика стала очевидной не только для пользователей различных интернет-банкингов, но и для тех, кто просто нуждается в защищённом доступе к своему домашнему компьютеру из кафешки в другом городе. Некоторые, к примеру, любят пользоваться разнообразными веб-приложениями, вроде Feng Office или SubSonic, установленными на домашнем сервере. При этом вовсе не хочется, чтобы доступ к кровному контенту достался ещё кому либо. В одной из предыдущих статей, посвящённых Nginx, мы рассматривали настройку SSL-шифрования сайтов, обслуживаемых этим сервером. Сегодняшняя статья посвящена тем, у кого нет Nginx и/или кто не хочет устанавливать его лишь в качестве TLS-прокси к Apache.

В данной статье описывается настройка TLS в Apache с использованием self-signed сертификата, что не годится для public-ресурсов, но вполне подойдёт для организации работы с вашим личным/командным сервером.

При написании заметки в качестве тестовой площадки использовался сервер под управлением Debian 6.0 и Apache 2.2.16.

Установка OpenSSL

Прежде чем приступать к настройке SSL-сайта в Apache, необходимо создать ключ шифрования, а также self-signed сертификат этого ключа. Данные действия выполняются утилитами, которые не входят в состав Apache и должны быть установлены отдельно, если их нет в вашей системе. В Debian/Ubuntu всё ставится одной командой:

# apt-get install openssl

В других дистрибутивах название пакета скорее всего будет таким же.

Генерация закрытого ключа и сертификата

В TLS используются асимметричные алгоритмы шифрования, то есть для шифрования и расшифровки данных используется не один ключ, а пара: открытый и закрытый. Открытый ключ сервера передаётся клиенту вместе с сертификатом сервера на стадии генерации сеансового ключа.

Создайте каталог, в котором вы намереваетесь хранить закрытый ключ и сертификат сервера:

# mkdir -p /etc/apache2/ssl

Теперь можно сгенерировать закрытый ключ и self-signed сертификат для него:

# cd /etc/apache2/ssl
# openssl req -new -x509 -nodes -out server.crt -keyout server.key

где server.key — имя файла закрытого ключа, а server.crt — имя файла сертификата.

Перед генерацией утилита предложит ответить вам на несколько вопросов, касательно данных, которыми будут заполнены поля сертификата. Поскольку он самоподписанный, можно не заморачиваться, а оставить всё как есть:

Generating a 1024 bit RSA private key
..............++++++
..............................................................++++++
writing new private key to '/etc/apache2/ssl/server.key'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:

После того, как ключ и сертификат будут готовы, не забудьте ограничить доступ к файлу закрытого ключа:

# chmod 0600 /etc/apache2/ssl/server.key

Включение mod_ssl

Чтобы иметь возможность пользоваться благами SSL, в Apache необходимо включить соответствующий модуль, реализующий нужный функционал:

# a2enmod ssl

а также включить работу виртуальных хостов на порту 443, отредактировав соответствующий участок файла /etc/apache2/ports.conf:

<IfModule mod_ssl.c>
 Listen 443
 NameVirtualHost *:443
</IfModule>

Настройка сайта Apache

Теперь, когда ключ и сертификат готовы, а поддержка SSL в Apache включена, можно приступать к настройке сайта. Создайте конфигурацию виртуального хоста для вашего защищённого сайта (предположим, что вы расположили его в каталоге /var/www/secure) в файле /etc/apache2/site-available/secure:

<IfModule mod_ssl.c>
<VirtualHost *:443>
 ServerName secure.localdomain
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/secure
 SSLEngine on
 SSLCertificateKeyFile /etc/apache2/ssl/server.key
 SSLCertificateFile    /etc/apache2/ssl/server.crt
</VirtualHost>
</IfModule>

Обратите внимание на директивы SSL:

  • SSLEngine включает или отключает работу модуля mod_ssl;
  • SSLCertificateKeyFile определяет путь к файлу закрытого ключа сервера;
  • SSLCertificateFile определяет путь к файлу сертификата.

Конечно же, опций, отвечающих за настройку поведения mod_ssl гораздо больше и множество из них определены по умолчанию в файле /etc/apache2/mods-available/ssl.conf. Целью данной заметки являлось создание руководства из серии «за две минуты» и поэтому освещён необходимый минимум знаний. Желающим углубиться в раскопки недр работы и настройки TLS в Apache советую в первую очередь посетить официальную страницу документации, а также справочник по опциям mod_ssl.

Теперь, когда всё готово к работе, можно включать созданный виртуальный хост:

# a2ensite secure

и перезапускать Apache:

# /etc/init.d/apache2 restart

Проверка

Если всё прошло успешно и вы не получили никаких ошибок в результате перезапуска сервера, самое время проверить результаты работы. Открыв в браузере URL вашего сайта, вы должны увидеть предупреждение о риске для вашей безопасности в связи с тем, что сайт использует self-signed сертификат:

Добавив этот сайт в исключения, вы получите полноценное TLS-шифрование трафика, спрятав таким образом от любопытных глаз ваши диалоги с HTTP-сервером:

Установка ssl сертификата Apache от Lets Encrypt

В самом начале развития интернета все данные между сайтом и компьютером пользователя передавались открыто по протоколу HTTP, без шифрования, а это означает, что любой пользователь, находящийся между сервером и компьютером может прочитать эти данные или даже изменить. По такой схеме даже сейчас работает много сайтов. Но в нашем мире это не безопасно, поэтому был разработан протокол HTTPS, который позволяет шифровать данные для передачи между устройствами.

Для шифрования данных в этом протоколе используются сертификаты SSL. Сейчас HTTPS набирает большую популярность, такие компании, как Google пытаются заставить все больше сайтов интернета использовать SSL для защиты своих данных и организации более безопасного соединения. С другой стороны появился сервис Lets Encrypt, который позволяет получить SSL сертификат каждому полностью бесплатно. В этой статье мы рассмотрим как выполняется установка ssl сертификата Apache от Lets Encrypt.

Содержание статьи:

Установка SSL сертификата Lets Encrypt в Apache

Я буду предполагать, что Apache у вас уже установлен и настроен для работы по протоколу http. Если это не так посмотрите статью установка и настройка Apache. Перед тем как переходить к самой настройке веб сервера нам нужно получить ssl сертификат, а для этого нужно установить клиент сервиса в систему.

Шаг 1. Установка клиента Lets Encrypt

Мы будем выполнять установку клиента Lets Encrypt из официальных репозиториев. Официальный клиент от Lets Encrypt называется certbot, в репозиториях Ubuntu 16.04 есть упрощенная версия — Letsencrypt. Нам полностью хватит ее функциональности. Для установки выполните команды:

sudo apt update
$ sudo apt install python-letsencrypt-apache

После этого клиент будет готов к использованию.

Шаг 2. Настройка Apache

Если Apache настроен на работу по http, то перед тем как идти дальше, должна быть выполнена настройка ssl apache. Нам нужно активировать модуль ssl и включить использование ssl по умолчанию.

Для активации модуля наберите:

sudo a2enmod ssl

Для использования SSL по умолчанию включаем конфигурационный файл:

sudo a2ensite default-ssl.conf

Осталось перезапустить веб-сервер для применения изменений:

sudo systemctl restart apache2

Шаг 3. Получение SSL сертификата

Установка ssl сертификата с помощью клиента Lets Encrypt выполняется очень просто. Клиент автоматически запросит и установит новый сертификат для принадлежащего вам домена.

Чтобы получить сертификат для одного домена, достаточно передать этот домен в параметрах команды:

 sudo letsencrypt --apache -d example.com

Если нужно сделать сертификат действительным для нескольких доменов или субдоменов вы можете передать их в дополнительных параметрах. Первое доменное имя будет основным, поэтому рекомендуется передавать первым домен верхнего уровня, а уже потом субдомены:

sudo letsencrypt --apache -d example.com -d www.example.com

Дальше нужно будет ввести несколько настроек для сертификата, сначала укажите адрес электронной почты, который будет использоваться для восстановления утерянного ключа или отправки уведомлений:

Затем примите лицензионное соглашение Lets Encrypt:

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

Когда установка SSL сертификата Apache ubuntu будет завершена, вы найдете созданные файлы сертификатов в папке /etc/letsencrypt/live. В этой папке будут четыре файла:

  • cert.pem — ваш сертификат домена;
  • chain.pem — сертификат цепочки Let’s Encrypt;
  • fullchain.pem — cert.pem и chain.pem вместе;
  • privkey.pem — секретный ключ вашего сертификата.

Теперь вы можете зайти на сайт по https. Чтобы проверить как работает SSL и правильно ли выполнена установка ssl сертификата на сайт, вы можете открыть в браузере такую ссылку:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest

Шаг 4. Автопродление сертификата

Настройка ssl Apache завершена. Но есть один минус, все сертификаты, полученные от Lets Encrypt действительны только на протяжении 90 дней и рекомендуется продлевать и срок действия каждые 60 дней. Клиент letsecnrypt имеет команду renew, которая позволяет проверить установленные сертификаты и обновить их если до истечения срока осталось меньше 30 дней.

Чтобы запустить процесс обновления для всех настроенных доменов выполните:

sudo letsencrypt renew

Если сертификат был выдан недавно, то команда проверит его дату истечения и выдаст сообщение, что продление пока не требуется. Если вы создали сертификат для нескольких доменов, то в выводе будет показан только основной домен. Но обновление будет актуально для всех.

Самый простой способ автоматизировать этот процесс — добавить вызов утилиты в планировщик corn. Для этого выполните команду:

crontab -e

Затем, в открывшемся текстовом редакторе добавьте строку и сохраните изменения:

30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log

Таким образом, мы создали задачу, которая будет выполнять команду обновления каждый понедельник, в 2:30 утра. Информация про результат выполнения будет сохранятся в файл /var/log/le-renewal.log.

Выводы

В этой статье мы рассмотрели как выполняется установка ssl сертификата apache lets encrypt. Это поможет защитить ваш сайт от MITM атак, подслушивания и модификации трафика, а также благодаря тенденциям поощрения перехода на https может положительно сказаться на росте трафика.

Настройка HTTPS в Apache | Русскоязычная документация по Ubuntu

Веб-сервер Apache полностью поддерживает работу по HTTPS. Для того, чтобы активировать поддержку HTTPS на уже установленном Apache, необходимо выполнить следующее.

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

Для создания ключа и сертификата ввести команду:

 openssl req -new -x509 -days 30 -keyout server.key -out server.pem 

На вопрос «Введите парольную фразу PEM:» отвечаем паролем, подтверждаем и запоминаем.
На все последующие отвечаем произвольно, можно просто щелкать по «Общее имя (например, ВАШЕ имя) []:» отвечаем именем сайта, для которого создаем сертификат, например www.example.com.

После ответа на все вопросы в директории должны появиться два новых файла — server.pem и server.crt (ключ и сертификат, соответственно).

Чтобы использовать сгенерированный ключ нужно знать введенный ключ, и Apache будет спрашивать его у нас при загрузке, а к чему нам лишние вопросы от демонов? 🙂 Поэтому снимаем пароль с ключа:

 cp server.key {,. Orig}
openssl rsa -in server.key.orig -out server.key
rm server.key.orig 

Скопируем их в / etc / ssl и назначим файлу ключа права чтения только администратору:

 sudo cp server.pem / и т.д. / SSL / сертификаты /
sudo cp server.key / etc / ssl / private /
sudo chmod 0600 /etc/ssl/private/server.key 

Для начала необходимо активировать mod_ssl :

 судо a2enmod SSL 

А затем включить HTTPS сайта по умолчанию:

 sudo a2ensite default-ssl 

Теперь необходимо отредактировать файл с настройками HTTPS сайта по умолчанию, указав в нём пути к вашим сертификатам. Сам файл называется / etc / apache2 / sites-enabled / default-ssl (или / etc / apache2 / sites-enabled / default-ssl.conf ).

В этом файле рекомендуется после директивы

 SSLEngine на 

добавить строчку

 SSL Протокол все -SSLv2 

дабы запретить использование устаревшего протокола SSLv2.

Дальше вам необходимо отредактировать параметры, ответственные за сертификаты.

 # Публичный сертификат сервера
SSLCertificateFile /etc/ssl/certs/server.pem
# Приватный ключ сервера
SSLCertificateKeyFile / etc / ssl / private / server.ключ 

Теперь просто перезагрузите Apache:

 sudo service apache2 перезапуск 

И если все параметры указаны верно, ваши рейтинги станут доступны по HTTPS.

Протокол HTTPS работает по 443 порту, поэтому если сервер находится за шлюзом, то необходимо на нём пробросить данный порт.

Перенаправление HTTP-запросов на HTTPS

Если вы хотите запретить использование HTTP , самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS-адрес.Сделаем это с помощью mod_alias . Если он не включён — включаем:

 sudo a2enmod псевдоним
sudo service apache2 перезапуск 

Затем изменяем файл / etc / apache2 / sites-enabled / 000-default , отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл добавляем директиву

 Редирект / https://example.com/ 

При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты все равно будет не попасть.

Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу.

.

Настройка HTTPS на Apache Ubuntu

Для того что бы настроить HTTPS на APACHE необходимо создать самоподписанный сертификат для сервера. Делается это просто: выполняем команду:

 openssl req -new -x509 -days 30 -keyout server.key -out server.pem 

, если у вас уже стоит openssl, если же не стоит ставим его

 sudo apt-get install openssl 

Первым вопросом при создании сертификата будет «Введите парольную фразу PEM» это пароль от сертификата. Запомните его, он нам пригодиться дальше.И так далее в процессе создания сертификата у вас будут введены следующие данные:

  • C — дачный, двухбуквенный код страны, например, RU или US
  • СТ — государственный, регион, область, район и т.д.
  • L — населенный пункт, город
  • О — организация, название организации
  • ОУ — организационное подразделение, отдел в организации
  • CN — общее наименование, адрес веб-сайта

После того как он создан, появятся 2 файла server.ключ и server.pem. Помните, мы будем вводить пароль для сертификата, так вот после его установки при каждом запуске apache, мы будем вводить данный пароль. Неудобно правда ли? Давайте снимем с себя лишние проблемы. Выполняем поочередно:

 cp server.key {,. Orig}
openssl rsa -in server.key.orig -out server.key // на этой строчке попросит ввести тот самый пароль
rm server.key.orig 

Вот и все. Теперь пароль у нас спрашивать не будет. Скопируем их в / etc / ssl и сделаем доступными только админу

 sudo cp server.pem / и т.д. / SSL / сертификаты /
sudo cp server.key / etc / ssl / private /
sudo chmod 0600 /etc/ssl/private/server.key 

Теперь перейдем непосредственно к настройке Apache и виртуальных хостов.

Настойка Apache

включаем mod_ssl

 sudo a2enmod ssl 

Далее создадим виртуальный хост для ssl соединения. Для простоты решения скопируем все данные из обычных виртуальных хостов и поменяем / добавим некоторые данные. Переходим ‘/ etc / apache2 / sites-available /’. Там выбираем нужный нам виртуальный хост для примера.conf (у меня просто несколько сайтов на одном сервере). Копируем все данные внутри хоста и создаем новый. Допустим example-ssl.conf и вставляем содержимое. Теперь же надо поменять следующие данные вместо

  

ставим

  

Теперь добавляем где нибудь внутри следующие строчки

 SSLEngine on
SSLProtocol все -SSLv2

# Публичный сертификат сервера
SSLCertificateFile /etc/ssl/certs/server.pem
# Приватный ключ сервера
SSLCertificateKeyFile / etc / ssl / private / server.ключ 

На этом с редактированием все. Добавляем новый виртуальный хост

 sudo a2ensite example-ssl.conf 

Теперь перезагружаем apache

 sudo service apache2 restart 

Если вам надо сделать перенаправление HTTP на HTTPS то читаем далее

Перенаправление HTTP-запросов на HTTPS

Включаем mod_alias и перезагружаем apache

 sudo a2enmod псевдоним
sudo service apache2 перезапуск 

Теперь переходим все по тому же адресу ‘/ etc / apache2 / sites-available /’ и открываем пример.conf и добавляем строчку

 Перенаправление / https://example.com/ 

Вот и все перенаправление должно заработать

.

Подключаем SSL к Apache 2 в системе Ubuntu Trusty

Прочитано:
157

Задача: разобрать пошаговый план по настройке SSL подключение к собственноручно развернутому Web -сервиса на базе Apache 2 и настройка защиты. В будущем я эту заметку буду использовать, как направо так и налево. Да и наработка правильных действий никому не помешает.

План? А что план главное в голове или на бумаге составить список всего того, что по Вашему мнению и по Вашему опыту может пригодиться дабы обезопасить Ваш сервис.Я не спорю, что в эту заметку нужно добавить такие шаги, как

  • Настройка Fail2ban
  • Настройка ufw
  • Настройка SSH

но вот только заметка станет уж сильно громадной, пока я лучше остановлю на одном шаге кой в ​​заглавии заметки.

Начинаю, забыл отметить, что все ниже основы действия проводились над системой Ubuntu Trusty Server amd64

Поехали…

Шаг №1: Обновляю систему

экзорчик @ srv-trusty: ~ $ sudo rm -Rf / var / lib / apt / lists

екзорчик @ srv-trusty: ~ $ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik @ srv-trusty: ~ $ sudo apt-get install linux-generic-lts-xenial
linux-image-generic-lts-xenial -y

экзорчик @ srv-trusty: ~ $ sudo vi / etc / hosts

# :: 1 локальный хост ip6-localhost ip6-loopback

# ff02 :: 1 IP6-все узлы

# ff02 :: 2 ip6-allrouters

экзорчик @ srv-trusty: ~ $ sudo reboot

Шаг №2: Устанавливаю пакет ЛАМПА

ekzorchik @ srv-trusty: ~ $ sudo tasksel install lamp-server

Новый пароль для пользователя MySQL «root»:

Повторите пароль для пользователя MySQL «root»:

экзорчик @ srv-trusty: ~ $ sudo vi / etc / apache2 / apache2.конф

Имя сервера srv-trusty

экзорчик @ srv-trusty: ~ $ sudo mysql_secure_installation

Шаг №3: Настраиваю минимальную защиту Web —сервиса

Добавляем / изменяем параметры дефолтной защиты Web -сервиса Apache2

экзорчик @ srv-trusty: ~ $ sudo vi /etc/apache2/conf-enabled/security.conf

ServerTokens Prod

Сервер Подпись отключена

TraceEnable Off

Ввожу ограничения на подключение к серверу и сервису:

ekzorchik @ ekzorchik: ~ $ sudo vi / etc / sysctl.конф

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

net.ipv6.conf.lo.disable_ipv6 = 1

# Игнорировать широковещательные запросы ICMP

net.ipv4.icmp_echo_ignore_broadcasts = 1

# Отключить маршрутизацию исходных пакетов

net.ipv4.conf.all.accept_source_route = 0

net.ipv6.conf.all.accept_source_route = 0

net.ipv4.conf.default.accept_source_route = 0

net.ipv6.conf.default.accept_source_route = 0

# Игнорировать перенаправления отправки

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

# Блокировать SYN атаки

net.ipv4.tcp_max_syn_backlog = 2048

нетто.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 5

# Игнорировать перенаправления ICMP

net.ipv4.conf.all.accept_redirects = 0

net.ipv6.conf.all.accept_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

net.ipv6.conf.default.accept_redirects = 0

# Игнорировать направленные пинги (ресурс нельзя будет пропинговать, удобно)

нетто.ipv4.icmp_echo_ignore_all = 1

Затем подгружаю внесенные правила выше в работу:

Экзорчик @ srv-trusty: ~ $ sudo sysctl -p

Шаг №4: Изменяю доступ к Web —сервису не через http , а только https

экзорчик @ srv-trusty: ~ $ sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/hosts.conf

ekzorchik @ srv-trusty: ~ $ sudo unlink / etc / apache2 / sites-available / 000-default.конф

экзорчик @ srv-trusty: ~ $ sudo unlink /etc/apache2/sites-available/default-ssl.conf

экзорчик @ srv-trusty: ~ $ sudo unlink /etc/apache2/sites-enabled/000-default.conf

экзорчик @ srv-trusty: ~ $ openssl req -new -x509 -days 3650 -keyout srv-trusty.key -out srv-trusty.pem

Создание 2048-битного закрытого ключа RSA

запись нового закрытого ключа в srv-trusty.ключ '

Введите парольную фразу PEM:

Проверка - Введите парольную фразу PEM:

Общее имя (например, полное доменное имя сервера или ВАШЕ имя) []: 10.7.9.130

  • req → запрос на создание сертификата
  • x509 → создание самоподписанного сертификата
  • дней → срок в течении которого будет действовать сертификат
  • keyout → имя файла для генерируемого ключа
  • out → задаю файл для созданного сертификата
  • Общее имя → если у сервера есть DNS имя указываем его, если нет, то IP-адрес.Должен быть статическим, т. е. Закрепленным за данной системой.

ekzorchik @ srv-trusty: ~ $ cp srv-trusty.key {,. Orig}

экзорчик @ srv-trusty: ~ $ openssl rsa -in srv-trusty.key.orig -out srv-trusty.key

Введите парольную фразу для srv-trusty.key.orig:

запись ключа RSA

экзорчик @ srv-trusty: ~ $ rm srv-trusty.key.orig

экзорчик @ srv-trusty: ~ $ sudo mv srv-trusty.pem / и т.д. / SSL / сертификаты /

экзорчик @ srv-trusty: ~ $ sudo mv srv-trusty.key / etc / ssl / private /

экзорчик @ srv-trusty: ~ $ sudo chmod 0600 /etc/ssl/private/srv-trusty.key

экзорчик @ srv-trusty: ~ $ sudo a2enmod ssl

Создаю сайт для сервиса с помощью дефолтного шаблона:

экзорчик @ srv-trusty: ~ $ sudo vi /etc/apache2/sites-available/hosts.conf

ServerAdmin webmaster @ localhost

DocumentRoot / var / www / html

ErrorLog $ {APACHE_LOG_DIR} /error.log

CustomLog $ {APACHE_LOG_DIR} /access.log вместе

SSLEngine на

SSL Протокол все -SSLv2

SSLCertificateFile /etc/ssl/certs/srv-trusty.pem

SSLCertificateKeyFile / etc / ssl / private / srv-trusty.ключ

SSLOptions + StdEnvVars

<Каталог / usr / lib / cgi-bin>

SSLOptions + StdEnvVars

ekzorchik @ srv-trusty: ~ $ sudo a2ensite hosts.конф

Отключаю использование 80 TCP порта, буду использовать только 443 :

экзорчик @ srv-trusty: ~ $ sudo vi /etc/apache2/ports.conf

# Прослушать 80

экзорчик @ srv-trusty: ~ $ sudo apache2ctl configtest

ekzorchik @ srv-trusty: ~ $ sudo service apache2 restart

экзорчик @ srv-trusty: ~ $ sudo netstat -tulpn | grep apache2

tcp 0 0 0.0.0.0: 443 0.0.0.0:* СЛУШАТЬ 1188 / apache2

На заметку: После настроек Apache просканировал свой ресурс с другого хоста сетевой сканер nmap не смог определить что за ось на нем и другую полезную информацию.

Теперь проверяю, как отрабатывают все настройки выше, если зайти через браузер на URL ссылку вида: https: // IP & DNS, https://10.7.9.130/ , будет отображено вот такое сообщение:

Ваше подключение не защищено

Злоумышленники могут пытаться похитить ваши данные с сайта 10.7.9.130

Нажимаю « Дополнительные » — « Перейти на сайт 10.7.9.130 (небезопасно) » и отображается дефолтная страница: /var/www/html/index.html

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

. Это еще не все, я советую на каждой системе в каждой локальной сети, в глобальной сети установить и использовать брандмауэр, к примеру, хорошо зарекомендовавший именуемый, как ufw (надстройка над правилами утилиты iptables ).

Подведу итог: данной заметкой я пользуюсь при настройке Web -сервера Apache2 на системах Ubuntu релиза Trusty так и систем предоставления информации во всемирной паутине. Как уже не однократно говорил и буду говорить все нужно делать самим, учиться и еще раз учиться. На этом я прощаюсь, лучше я буду делиться своим опытом и наработкам в каждой новой заметке, чем все сразу да и в одной.С уважением автор блога Экзорчик aka Олло Александр.

.

Включаем SSL в Apache (Debian или Ubuntu)

Прежде всего, нам необходимо, чтобы SSL был установлен и Apache имел установленный мод SSL. Проверить — установлен ли OpenSSL можно командой:

# dpkg —list | grep openssl
ii openssl 0.9.8k-7ubuntu8.5 бинарный файл Secure Socket Layer (SSL) и связанный
ii python-openssl 0.10-1 Python-оболочка вокруг библиотеки OpenSSL

Если команда вернула пустоту — идем ставить OpenSSL — без него работать не будет.

Установка OpenSSL

# aptitude update
# aptitude install openssl

mod_ssl в Apache

Нам необходимо так-же, чтобы в Apache был включен mod_ssl. Проверяем это:

# cd / etc / apache2 / mods-enabled
# ls | grep ssl
ssl.conf
ssl.load

Если команда вернула пустоту — нам нужно включить этот мод. Для этого выполняем:

# ln -s /etc/apache2/mods-available/ssl.conf / etc / apache2 / mods-enabled / ssl.conf
# ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load

Тут установлен, что mod_ssl в Apache. Так, с сервером LAMP он идет сразу, если же Apache собирался вами из исходников и мода ssl нет, то придется его собрать отдельно.

Генерация сертификатов.

Создайте директорию, которой будут храниться сертификаты. Вы можете хранить их как в директории самого Apache, так и в любом доступном месте для Apache, например, в каталоге сайта.

# cd / etc / apache2
# mkdir sslcerts
# chown www-data: www-data sslcerts
# cd sslcerts

Теперь приступим к созданию сертификатов.

# openssl genrsa -des3 -rand / dev / random -out server.key 1024

Здесь нас запросят ключевую фразу, используемую в дальнейшей для авторизации ключа сервера. Внимательно вводите эту фразу — она ​​нам понадобится во всех шагах, в том числе ее нужно указать в конфиге Apache!

Заметка. Если процесс зависает и ничего не делает — прерываем его Ctrl + C и вместо «/ dev / random» используем «/ dev / urandom».

Далее.

# openssl rsa -in server.key -out server.pem
Введите парольную фразу для server.key:
запись ключа RSA

# openssl req -new -key server.key -out mysite.csr

Здесь нас запросят предложение количество данных, помещаемых в сертификат. Вводите то, что считаете нужным, кроме строчки Общее имя. В этой строчке необходимо указать FQDN адрес сайта, с которого будет выдаваться сертификат (например, mysite.ru). Если это не сделать, то браузеры считать это ошибкой и помечать, что сертификат имеет неправильное имя.В другой стороне — самоподписанный (как в нашем случае) сертификат они все равно не любят, т. ч. Одной ошибкой больше, одной меньше — Ваше дело, особенно если вы хотите использовать один сертификат на несколько сайтов сразу.

Вместо mysite.csr можно использовать название, похожее на название сайта — это уже файл, относящийся к сайту.

Extra-Атрибуты можно не указывать совсем.

Далее.

# openssl x509 -req -days 3650 -in mysite.csr -signkey server.key -out mysite.crt

Цифра 3650 — это количество дней, который будет действителен. Стандартное значение — 365 — нередко слишком мало из-за того, что каждый год сертификаты обновлять администраторы забывают.

Здесь следует отметить следующие моменты:

а) Файлы server. * — это файлы, на основе которых будут образованы все сертификаты сайтов. Их генерировали мы один раз.

б) Для другого сайта (второго, третьего и т.д.) файлы server.key и server.pem генерировать не надо!

в) Ключ-фразу придется использовать эту же для генерации остальных сертификатов (для других сайтов).

Настройка Apache

Сертификаты у нас готовы, самое время настроить Apache для поддержки SSL / HTTPS.

1) Идем в / etc / apache2 / с поддержкой модов и редактируем файл ssl.conf

Найдите фразу

Встроенный SSLPassPhraseDialog

и замените на

SSLPassPhraseDialog | /etc/apache2/sslpwd.sh

2) Открываем на редактирование файла /etc/apache2/ports.conf

В блоке «» перед закрытием блока, после строчки «Listen 443» добавляем строчку «NameVirtualHost *: 443»:


# Если вы добавите сюда NameVirtualHost *: 443, вам также придется изменить
# оператор VirtualHost в / etc / apache2 / sites-available / default-ssl
# на
# Имя сервера Индикация именованных виртуальных хостов SSL в настоящее время не поддерживается MSIE в Windows XP
#.
Слушать 443
NameVirtualHost *: 443

3) Редактируем файл / etc / apache2 / sites-available / default-ssl и меняем в нем «» на ««:

4) Создаем новый файл / etc / apache2 / sslpwd.sh со следующим содержанием:

#! / bin / sh
/ bin / echo «ваша_ключевая_фраза»

где вместо «ваша_ключевая_фраза» укажите ту фразу, которую вы использовали при создании сертификатов, тоже в кавычках (так надежнее). Для запуска этого файлу:

# cd / etc / apache2
# chmod 755 sslpwd.sh

5) Теперь нам надо настроить сам сайт, чтобы он мог работать с SSL. Для этого открываем конфиг нашего сайта из /etc/apache2/sites-enabled/mysite.ru

Вместо mysite.ru — имя файла конфига Вашего сайта.

Для того, чтобы сайт был доступен по SSL нужно завести отдельный конфиг для 443-го порта. При этом на одинаковое имя сервера (ServerName) может быть как HTTP, так и HTTPS-конфиги. Ниже приведен пример настройки сайта, который доступен по HTTPS, так и по HTTP.

# HTTPS-версия

ServerName mysite.ru
ServerAlias ​​www.mysite.ru
DocumentRoot /www/mysite.ru
DirectoryIndex index.php
SSLEngine на
SSLCipherSuite ALL:! ADH:! EXPORT56: RC4 + RSA: + HIGH: + MEDIUM: + LOW: + SSLv2: + EXP: + eNULL

SSLOptions + StdEnvVars

BrowserMatch *. * MSIE BrowserMatch *. \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
SSLCertificateFile /etc/apache2/sslcerts/mysite.crt
SSLCertificateKeyFile /etc/apache2/sslcerts/server.pem 9000 <версия
And HTTP-9000 VirtualHost *: 80>
Имя сервера mysite.ru
ServerAlias ​​www.mysite.ru
DocumentRoot /www/mysite.ru
DirectoryIndex index.php

6) Перезапускаем Apache:

# /etc/init.d/apache2 restart

Все, сайт mysite.ru будет доступен как через HTTP, так и через HTTPS. Можно HTTP версию прикрыть, конечно. Для этого достаточно убрать всю секцию:

Актуально для: Apache 2.x и Debian Lenny / Squeeze

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *