Данное руководство продемонстрирует создание SSL-сертификата в Debian 8 и настройку веб-сервера Apache для поддержки этого сертификата. В результате сервер будет поддерживать соединения HTTPS.
SSL основывается алгоритме асимметричного шифрования, что предполагает наличие пары ключей – открытого и закрытого. Существуют центры сертификации (ЦС), которые могут подтвердить подлинность такого SSL-сертификата, что гарантирует безопасность соединения. Однако можно создать самоподписанный сертификат, не требующий стороннего подтверждения.
В этом руководстве показано, как создать самоподписанный сертификат, настроить сервер для его поддержки и протестировать настройку. В целом, самоподписанные сертификаты отлично подходят для пробной настройки, но при постоянной работе они будут выдавать посетителям сайта ошибки, потому их не рекомендуется использовать на стадии производства.
Требования
Для выполнения инструкций понадобится:
- Свежий сервер Debian 8;
- Не-рутовый пользователь с правами sudo (подробности можно найти здесь);
- Предварительно установленный пакет OpenSSL; как правило, этот пакет установлен по умолчанию, потому его нужно просто обновить:
sudo apt-get update
sudo apt-get upgrade openssl
Для тестирования может понадобиться второй компьютер:
- OpenSSL;
- Еще один сервер Linux или Unix-подобная локальная система (Mac, Ubuntu, Debian и т.д.).
1: Установка Apache
Установить Apache можно при помощи встроенного менеджера пакетов apt-get, который делает управление пакетами и процесс установки значительно проще.
В отличие от остальных дистрибутивов Linux, Debian 8 поставляется без предустановленной утилиты sudo. В ранее упомянутом руководстве можно найти инструкции по обновлению apt-get и установке пакета sudo.
Чтобы установить Apache, запустите:
sudo apt-get install apache2
2: Включение модуля SSL
Теперь нужно настроить веб-сервер для поддержки SSL.
Для этого нужно включить модуль Apache:
sudo a2enmod ssl
Стандартный сайт Apache поставляется с удобным шаблоном для включения SSL, потому далее показано, как включить стандартный сайт.
sudo a2ensite default-ssl
Перезапустите Apache, чтобы обновит настройки:
sudo service apache2 reload
3: Создание самоподписанного SSL-сертификата
Сначала нужно создать отдельный каталог для хранения закрытого ключа и сертификата.
sudo mkdir /etc/apache2/ssl
Затем нужно запросить новый сертификат и подписать его.
Сгенерируйте сертификат и закрытый ключ при помощи нижеприведённой команды.
- Флаг days задаёт срок действия сертификата (в данном случае сертификат будет действителен в течение 365 дней);
- Флаг keyout указывает путь к ключу;
- Флаг out задаёт путь к сертификату.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
После запуска этой команды на экране появится ряд вопросов. В поле Common Name укажите IP-адрес сервера или имя хоста (сертификат должен быть привязан к домену или IP сайта). остальные поля не так важны, можно заполнить их на своё усмотрение.
К примеру, ответы могут иметь такой вид:
Interactive
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]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:NYC
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
Organizational Unit Name (eg, section) []:SSL Certificate Test
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:test@example.com
Измените права на файл, чтобы ограничит доступ к закрытому ключу и сертификату:
sudo chmod 600 /etc/apache2/ssl/*
Примечание: Более подробную информацию о правах можно найти в руководстве «Основы привилегий Linux».
Итак, теперь сертификат и закрытый ключ готовы к использованию.
4: Настройка Apache для поддержки SSL
Теперь нужно настроить стандартный виртуальный хост Apache, который будет использовать SSL-сертификат и ключ. Это позволит серверу обрабатывать запросы HTTPS вместо HTTP (для стандартного сайта).
Откройте конфигурационный файл сервера при помощи любого удобного текстового редактора:
sudo nano /etc/apache2/sites-enabled/default-ssl.conf
Найдите раздел, который начинается со строки <VirtualHost _default_:443> и внесите в него следующие изменения:
- Добавьте строку Server Name под строкой ServerAdmin, в ней укажите домен или IP сервера:
ServerAdmin webmaster@localhost
ServerName example.com:443
- Найдите следующие две строки и укажите в них правильные пути к сертификату и ключу:
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
В результате конфигурационный файл должен иметь следующий вид:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName example.com:443
DocumentRoot /var/www/html
. . .
SSLEngine on
. . .
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
Сохраните и закройте файл.
Чтобы обновить настойки веб-сервера, перезапустите Apache.
sudo service apache2 reload
Примечание: Более подробную информацию о виртуальных хостах можно найти в этом руководстве.
5: Тестирование настройки
В завершение нужно протестировать SSL-соединение.
Проверку можно выполнить при помощи:
- Локальной Unix-подобной системы
- Другого сервера
- Этого же сервера
Рекомендуется проверить настройку с помощью внешней системы, поскольку это подтверждает то, что сайт находится в открытом доступе.
Откройте соединение HTTPS на порте 443.
openssl s_client -connect your_server_ip:443
В середине вывода (после ключа) найдите следующие строки:
—-
SSL handshake has read 3999 bytes and written 444 bytes
—-
. . .
SSL-Session:
. . .
Конечно, числа могут отличаться, но эта строка говорит о том, что SSL-сертификат успешно установлен.
Чтобы выйти, нажмите CTRL+C.
Также можно посетить сайт в браузере, используя в ссылке HTTPS (например, https://example.com). Браузер выведет предупреждение о том, что сертификату нельзя доверять (это нормальная реакция, поскольку он не был заверен надёжным центром сертификации). Просмотрите сертификат и убедитесь, что все данные соответствуют информации, указанной в разделе 3.
Теперь сервер Apache защищён при помощи сертификата SSL.