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 или USST
— 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, предоставляет два важных свойства в отличие от самоподписанного сертификата:
- Браузеры (обычно) автоматически распознают такой сертификат и позволяют устанавливать защищенные соединения без предупреждения пользователя.
- Когда 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
В блоке «
# Если вы добавите сюда 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
.