zaLinux.ru

Как настроить HTTPS на Apache в Debian, Ubuntu, Linux Mint, Kali Linux


Оглавление

  1. Как включить HTTPS на Apache в Debian, Ubuntu, Linux Mint, Kali Linux
  2. Как установить Apache и OpenSSL в Debian, Ubuntu, Linux Mint, Kali Linux
  3. Как включить модуль SSL для Apache
  4. Как сделать так, чтобы локальный сервер открывался по имени хоста (настройка разрешения имени хоста в IP адрес)
  5. Как создать Центр Сертификации (CA)
  6. Как создать сертификат для HTTPS (генерация самоподписанного сертификата сайта)
  7. Куда скопировать сертификаты для Apache в Debian, Ubuntu, Linux Mint
  8. Как настроить Apache для работы с SSL сертификатами
  9. Как добавить локальный Центр Сертификации (CA) в доверенные
  10. Заключение

Как включить 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 и настроить виртуальный хост, указав в нём путь до сертификатов.


Рекомендуемые статьи:

Оставить комментарий

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