Оглавление
- Как включить HTTPS на Apache в Debian, Ubuntu, Linux Mint, Kali Linux
- Как установить Apache и OpenSSL в Debian, Ubuntu, Linux Mint, Kali Linux
- Как включить модуль SSL для Apache
- Как сделать так, чтобы локальный сервер открывался по имени хоста (настройка разрешения имени хоста в IP адрес)
- Как создать Центр Сертификации (CA)
- Как создать сертификат для HTTPS (генерация самоподписанного сертификата сайта)
- Куда скопировать сертификаты для Apache в Debian, Ubuntu, Linux Mint
- Как настроить Apache для работы с SSL сертификатами
- Как добавить локальный Центр Сертификации (CA) в доверенные
- Заключение
Как включить HTTPS на Apache в Debian, Ubuntu, Linux Mint, Kali Linux
Данная инструкция покажет, как настроить веб-сервер Apache для работы по протоколу HTTPS. В этой инструкции будет сделан основной упор на генерацию самоподписанных SSL сертификатов и настройку виртуальных хостов Apache для работы по протоколу HTTPS.
Такие вопросы как установка и настройка PHP, MySQL/MariaDB, phpMyAdmin рассмотрены не будут — эти темы не имеют прямого отношения к HTTPS. К тому же, у вас, скорее всего, эти компоненты уже установлены или вы без труда найдёте информацию как это сделать.
Эта инструкция показывает как настроить HTTPS в Apache на Debian, но она также должна быть применима ко всем дистрибутивам на основе Debian, например, Ubuntu, Linux Mint, Kali Linux и многие другие.
Как установить Apache и OpenSSL в Debian, Ubuntu, Linux Mint, Kali Linux
Начнём с установки пакетов Apache и OpenSSL. OpenSSL нам понадобиться для генерации самоподписанных сертификатов.
Возможно, эти пакеты уже присутствуют в вашей системе. При необходимости установите их следующими командами:
sudo apt update sudo apt install apache2 openssl
Для проверки работы сервера, запустите службу:
sudo systemctl start apache2.service
Откройте в веб-браузере адрес http://localhost/ - вы должны увидеть дефолтную страницу Apache в Debian.
Чтобы служба веб-сервера автоматически запускалась после перезагрузки компьютера, вы можете добавить её в автозагрузку следующей командой:
sudo systemctl enable apache2.service
Как включить модуль SSL для Apache
Начнём с подключения модуля SSL для Apache. Это делается командой:
sudo a2enmod ssl
Как сделать так, чтобы локальный сервер открывался по имени хоста (настройка разрешения имени хоста в IP адрес)
Придумайте имя хоста. Вы можете выбрать любое имя — из одного или нескольких слов, разделённых точкой. Причём если вы выберите имя вида:
ANYTHING.localhost
Например:
hackware.localhost
То вам даже не придётся настраивать преобразование имени хоста в IP, поскольку имена содержащие «.localhost» автоматически перенаправляются на localhost.
Вы можете кликнуть следующую ссылку и, если вы запустили Apache, то она откроет ваш локальный веб-сервер: http://hackware.localhost/
Если вы хотите имя без «.localhost» (например, hackware.local), то нужно настроить преобразование имени в IP адрес. Для этого мы добавим запись в файл /etc/hosts.
Я буду использовать в качестве доменного имени (адреса локального веб-сайта) hackware.local. Чтобы это имя указывало на веб-сервер, я в файл /etc/hosts
sudo gedit /etc/hosts
добавляю следующую строку (замените hackware.local на выбранное доменное имя):
127.0.0.1 hackware.local
Сразу после этого вы можете в веб-браузере подключиться к веб-серверу используя доменное имя http://hackware.local (но пока только по протоколу HTTP).
Как создать Центр Сертификации (CA)
В начале мы создадим ключи Центра Сертификации (Certificate Authority, CA). Это нужно сделать только один раз. Не смотря на громкое название «Центр Сертификации», мы двумя командами создадим ключ и сертификат (пару приватный и публичный ключ) — вот и всё. Эти ключи можно создать в любом месте, например, я создал папку myCA, в которой они будут храниться:
mkdir myCA cd myCA
Теперь создайте приватный и публичный ключ Центра Сертификации следующими командами:
openssl genpkey -algorithm RSA -out rootCA.key openssl req -x509 -new -noenc -key rootCA.key -sha256 -days 1024 -out rootCA.crt
Во время выполнения второй команды у вас будут запрашиваться различные сведения — неважно, что вы введёте, это ни на что не влияет для наших тестовых целей. Вы можете просто на все запросы нажимать клавишу Enter.
Файл rootCA.crt — это сертификат, содержащий публичный ключ. Этот файл не является секретным и он нам понадобится для добавления нашего Центра Сертификации (CA) в доверенные, чтобы операционная система доверяла подписанным сертификатам.
Файл rootCA.key должен хранится в секрете — с его помощью можно создавать сертификаты, которые будут восприниматься вашей операционной системой как подписанные доверенным Центром Сертификации.
Как создать сертификат для HTTPS (генерация самоподписанного сертификата сайта)
Следующими командами я создаю приватный ключ и сертификат веб-сайта. В этих командах вы можете поменять имена ключей (например, заменить hackware.local на имя вашего домена) — но имена файлов ни на что не влияют — вы можете использовать любые:
openssl genpkey -algorithm RSA -out hackware.local.key openssl req -new -key hackware.local.key -out hackware.local.csr
После выполнения второй команды у вас опять будут запрашиваться различные сведения — как и в предыдущий раз, почти все из них можно не вводить, за исключением одного поля:
Common Name (e.g. server FQDN or YOUR name) []:
В этом поле укажите ваш локальный домен, например:
hackware.local
Также придумайте и запомните пароль для ввода в следующее поле (можно пропустить):
A challenge password []:
Создайте файл extraoptions.ext со следующим содержимым (вместо hackware.local укажите ваш домен):
subjectAltName = DNS:*.hackware.local, DNS:hackware.local
Обратите внимание, что домен указывается дважды — со звёздочкой и без. Это делается для того, что сертификат работал как для основного домена, так и для всех его поддоменов.
На самом деле, вы можете ещё указать и IP адреса (в том числе IPv6) — если вы это сделаете, то сертификат также будет действителен и для данных IP адресов. Пример файла extraoptions.ext с IP адресами:
subjectAltName = DNS:*.hackware.local, DNS:hackware.local, IP:192.168.1.37, IP:2001:fb1:139:3995:da89:dbdf:1e9a:eb84
Чтобы узнать IP адреса вашего компьютера с Linux, используйте следующую команду:
ip a
Примечание: если вы не настроили использование статического IP адреса, после перезагрузки компьютера ваши IP адреса, скорее всего, изменятся.
Последней командой подписываем сертификат:
openssl x509 -req -in hackware.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out hackware.local.crt -days 500 -sha256 -extfile extraoptions.ext
В результате было создано три новых файла:
hackware.local.crt hackware.local.csr hackware.local.key
Файл hackware.local.csr больше не нужен и вы можете его удалить.
Куда скопировать сертификаты для Apache в Debian, Ubuntu, Linux Mint
Скопируйте (или переместите) созданные сертификаты:
sudo cp hackware.local.crt /etc/ssl/certs/ sudo cp hackware.local.key /etc/ssl/private/
Как настроить Apache для работы с SSL сертификатами
В директории /etc/apache2/sites-available/ создайте файл с расширением .conf, например:
sudo gedit /etc/apache2/sites-available/hackware-ssl.conf
И скопируйте в него следующее содержимое:
<VirtualHost *:443> DocumentRoot "/var/www/html/" ServerName hackware.local ServerAdmin whatever@gmail.com LogLevel error # LogLevel info ssl:warn # You may like this instead of the previous one ErrorLog "/var/log/apache2/hackware.local-ssl-error_log" CustomLog "/var/log/apache2/hackware.local-ssl-access_log" combined SSLEngine on SSLCertificateFile "/etc/ssl/certs/hackware.local.crt" SSLCertificateKeyFile "/etc/ssl/private/hackware.local.key" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All </Directory> <FilesMatch "\.(?:cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost>
В этой конфигурации обратите особое внимание на настройки следующих директив:
- ServerName — выбранное доменное имя для локального сайта
- SSLCertificateFile и SSLCertificateKeyFile — пути до сертификата и приватного ключа. Если вы выбрали другие имена для ваших ключей, то измените их здесь.
Сохраните и закройте файл.
Теперь подключите новый виртуальный хост (обратите внимание, что имя конфигурационного файла может быть другим — это тот самый файл, который вы создали в директории /etc/apache2/sites-available/ чуть ранее):
sudo a2ensite hackware-ssl.conf
И перезагрузите настройки службы apache2:
sudo systemctl reload apache2
Чтобы проверить, что новый виртуальных хост действительно был добавлен, вы можете запустить следующую команду:
apachectl -t -D DUMP_VHOSTS
Теперь вы можете использовать протокол HTTPS для подключения к веб-серверу: https://hackware.local/
Но не всё так хорошо — веб-браузер не доверяет самоподписанному сертификату. Чтобы это исправить, нужно добавить созданный выше в этой инструкции Центр Сертификации в список доверенных.
Как добавить локальный Центр Сертификации (CA) в доверенные
Самоподписанному сертификату не доверяют ни браузеры, ни даже консольные утилиты. Чтобы веб-браузеры стали доверять всем сертификатам, созданным с помощью локального Центра Сертификации, нужно сделать следующее.
1) Создайте файл CAtoCert9.sh и сохраните в него следующее содержимое:
#!/bin/bash certfile="/home/mial/myCA/rootCA.crt" certname="HackWare CA" for certDB in $(find ~/ -name "cert9.db") do certdir=$(dirname ${certDB}); certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir} done
В этом файле измените значение certfile на путь до файла до вашего сертификата и значение certname на имя вашего сертификата (можете выбрать любое — это имя понадобится если вы захотите удалить сертификат), сохраните и закройте файл.
2) Затем запустите его следующим образом:
bash CAtoCert9.sh
Если вы захотите удалить ваш Центр Сертификации из доверенных, то создайте файл CAfromCert9.sh и скопируйте в него следующее:
#!/bin/bash certname="HackWare CA" for certDB in $(find ~/ -name "cert9.db") do certdir=$(dirname ${certDB}); certutil -D -d sql:${certdir} -n "${certname}" done
В этом файле измените значение certname на имя вашего сертификата, сохраните и закройте файл.
Затем запустите его следующим образом:
bash CAfromCert9.sh
Проверим страницу локального веб-сервера по протоколу HTTPS в различных веб-браузерах. В веб-браузере Firefox соединение отмечено как безопасное:
В веб-браузере Chromium соединение также отмечено как безопасное:
Заключение
Настройка HTTPS на веб-сервере в рабочем окружении (с настоящим доменным именем и сервером, имеющим публичный IP) выполняется точно таким же образом, но имеются отличия в действиях, не связанных непосредственно с настройкой веб-сервера.
Эти отличия следующие:
1) сертификат для вас должен подписать доверенный Центр Сертификации. Такой сертификат можно купить или использовать тестовые сертификаты на 3 месяца (постоянно их продлевая).
2) Настоящее доменное имя не требует внесение изменений в файл /etc/hosts — для доменов разрешение (преобразование) доменного имени в IP адрес выполняют DNS сервера.
3) Не нужно ничего добавлять в список доверенный Центров Сертификации, поскольку веб-браузеры и операционные системы уже имеют полный список доверенных Центров Сертификации, один из которых продал или выдал вам тестовый сертификат.
То есть для веб-сервера в рабочем окружении, который обслуживает реальный веб-сайт, для работы с HTTPS нужно только активировать модуль SSL и настроить виртуальный хост, указав в нём путь до сертификатов.
Связанные статьи:
- Ошибка «Error code: SSL_ERROR_RX_RECORD_TOO_LONG» (РЕШЕНО) (61.6%)
- Ошибка «ERR_SSL_PROTOCOL_ERROR» (РЕШЕНО) (61.6%)
- Ошибка «No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /run/php/php8.1-fpm.sock (*:80) failed» (РЕШЕНО) (55.4%)
- Как настроить Python в качестве CGI модуля в Apache на Debian (Ubuntu, Linux Mint) (54.8%)
- Как установить WordPress на Ubuntu/Linux Mint (52.6%)
- Как установить Kali Linux с зашифрованной домашней папкой пользователя (ручная разметка) (RANDOM - 1.4%)