Создание SSL-сертификата на Apache в Debian 8

Данное руководство продемонстрирует создание 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.

Tags: , , ,

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