Настройка ssl apache debian

Обновлено: 06.07.2024

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 сайта). остальные поля не так важны, можно заполнить их на своё усмотрение.

К примеру, ответы могут иметь такой вид:

Измените права на файл, чтобы ограничит доступ к закрытому ключу и сертификату:

sudo chmod 600 /etc/apache2/ssl/*

Примечание: Более подробную информацию о правах можно найти в руководстве «Основы привилегий Linux».

Итак, теперь сертификат и закрытый ключ готовы к использованию.

4: Настройка Apache для поддержки SSL

Откройте конфигурационный файл сервера при помощи любого удобного текстового редактора:

sudo nano /etc/apache2/sites-enabled/default-ssl.conf

Найдите раздел, который начинается со строки <VirtualHost _default_:443> и внесите в него следующие изменения:

  • Добавьте строку Server Name под строкой ServerAdmin, в ней укажите домен или IP сервера:
  • Найдите следующие две строки и укажите в них правильные пути к сертификату и ключу:

SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

В результате конфигурационный файл должен иметь следующий вид:

Сохраните и закройте файл.

Чтобы обновить настойки веб-сервера, перезапустите Apache.

sudo service apache2 reload

Примечание: Более подробную информацию о виртуальных хостах можно найти в этом руководстве.

5: Тестирование настройки

В завершение нужно протестировать SSL-соединение.

Проверку можно выполнить при помощи:

  • Локальной Unix-подобной системы
  • Другого сервера
  • Этого же сервера

Рекомендуется проверить настройку с помощью внешней системы, поскольку это подтверждает то, что сайт находится в открытом доступе.

openssl s_client -connect your_server_ip :443

В середине вывода (после ключа) найдите следующие строки:

—-
SSL handshake has read 3999 bytes and written 444 bytes
—-
. . .
SSL-Session:
. . .

Конечно, числа могут отличаться, но эта строка говорит о том, что SSL-сертификат успешно установлен.

Инструкция написана для операционных систем на базе UNIX.

Шаг 1. Создание сертификата

Для тестовой среды можно сгенерировать самоподписанный сертификат. Для этого сперва переходим в рабочую папку.

а) на Red Hat / CentOS:

б) на Debian / Ubuntu:

Создаем папку для сертификатов и переходим в нее:

mkdir ssl ; cd ssl

И генерируем сертификат:

openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.dmosk.local/CN=test"

* в данном примере созданы открытый и закрытый ключи на 4 года (1461 день); значения параметра subj могут быть любыми в рамках тестирования.

Шаг 2. Установка модуля SSL для Apache

Прежде, чем устанавливать модуль, выполняем команду:

apachectl -M | grep ssl

Если видим строчку, на подобие:

Спускаемся к шагу 3 данной инструкции.

yum install mod_ssl

б) Для Ubuntu/Debian:

Открываем файл конфигурации apache:

* подразумевается, что используется apache 2.4.

Находим и снимаем комментарии со следующих строчек:

И ставим комментарии в следующих строках:

Чтобы настройки применились, необходимо перезапустить веб-сервер одной из команд:

systemctl restart apache2

service apache2 restart

* первая, как правило, используется в системах на базе RPM, вторая — DEB, третья — BSD.

Шаг 3. Настройка Apache

Выходим из папки ssl:

Открываем файл с настройкой виртуальный доменов.

* где site.conf — конфигурационный файл для конкретного сайта

В открытый файл добавляем следующее:

* где ServerName — домен сайта; DocumentRoot — расположение файлов сайта в системе; SSLCertificateFile и SSLCertificateKeyFile — пути до файлов ключей, которые были сгенерированы на шаге 1.

Проверяем корректность настроек в Apache:

Перечитываем конфигурацию apache:

Шаг 4. Проверка работоспособности

Шаг 5. Настройка редиректа

В конфигурационном файле

Открываем файл с настройкой виртуальных доменов (как в шаге 3) и дописываем следующее:

В файле .htaccess

Установка модуля rewrite

Чтобы перенаправление работало в Apache, необходимо установить модуль rewrite.

а) в CentOS открываем конфигурационный файл и проверяем наличие строки:

LoadModule rewrite_module modules/mod_rewrite.so

* если ее нет, добавляем; если она закомментирована, снимаем комментарий.

systemctl restart apache2

Apache + NGINX

Начнем мы с наиболее популярного веб-сервера Apache, первоначальная настройка которого выполнена по нашей статье: Настраиваем веб-сервер на базе Apache в Debian / Ubuntu Server. В данной статье будет использоваться Apache 2.4 установленный в среде Debian 10, но все сказанное ниже будет справедливо для любого основанного на Debian или Ubuntu дистрибутива, а с некоторыми поправками - для любой Linux системы.

Мы не будем подробно описывать значение опций, это сделано в указанной нами статье, а конфигурация приведена для примера, на который мы будем опираться в дальнейшем по ходу статьи.

Прежде всего нам потребуется настроить веб-сервер для работы с Let's Encrypt, сделав так, чтобы сертификаты можно было легко получать для любого обслуживаемого сервером сайта без дополнительных настроек. Создадим для этого специальную директорию:

И сделаем ее владельцем веб сервер:

Затем создадим файл конфигурации для Аpache:

и внесем в него следующий текст:

Эта настройка будет перенаправлять все запросы к /.well-known/acme-challenge любого сайта в созданную нами директорию /var/www/letsencrypt.

Подключим конфигурационный файл:

и проверим конфигурацию на ошибки:

Затем перезапустим веб-сервер

Следующим шагом установим certbot, в современных дистрибутивах он включен в репозитории, поэтому достаточно выполнить:

Если вы используете более старые дистрибутивы, то обратитесь к нашей статье: Получаем сертификаты Let's Encrypt при помощи Certbot

Пакет не требует начальной настройки и готов к работе сразу после установки. Перед тем, как получать сертификат, убедитесь, что к вашему серверу есть доступ из интернета. В любом случае советуем сначала выполнить пробное получение:

apache-LAMP-SSL-001.jpg

После того, как тест прошел успешно можно выполнить настоящее получение сертификатов, для этого просто уберите ключ --dry-run из команды.

Порядок расположения опций значения не имеет. Параметр renew_hook позволяет указать действие, которое следует выполнить при успешном продлении сертификата, в нашем случае это перезапуск веб-сервера Apache.

Сертификат получен, можно переходить к настройке виртуального хоста для работы сайта по защищенному протоколу, рекомендуем скопировать текущий файл конфигурации и вносить настройки в него:

Затем откроем его и сразу изменим порт с 80 на 443:

Также советуем изменить имена файлов логов:

Эти опции включают SSL и указывают пути к сертификатам. В теории этого достаточно, но в современных условиях такие настройки не будут надежными, так как разрешают использование устаревших протоколов и нестойких шифров. Для получения современной и актуальной конфигурации SSL мы советуем воспользоваться сервисом moz://a SSL Configuration Generator, который предлагает несколько вариантов настроек, оптимальным является использование опции Intermediate.

Но не следует добавлять сразу все опции, ряд из них могут иметь достаточно "неожиданное" действие на неподготовленного пользователя. Поэтому сначала разберемся с шифрами и протоколами:

Первая опция отключает устаревшие и небезопасные протоколы SSLv3, TLS 1.0 и TLS 1.1, вторая задает доступные к использованию шифры. Создание набора шифров - это наиболее сложная задача, поэтому лучше довериться специалистам Mozilla, нежели изобретать велосипед самостоятельно.

Первая строка определяет приоритет при выборе шифра, включенная опция отдает приоритет серверу, выключенная - браузеру клиента. В целях совместимости следует отдавать приоритет выбору клиента, а выбор сервера использовать только тогда, когда требуется принудительно использовать максимально стойкое шифрование. Вторая отключает использование сессионных билетов SSL, что требуется для обеспечения режима совершенной прямой секретности.

Сохраним файл конфигурации и подключим его:

Также нам потребуется модуль SSL:

Проверим конфигурацию и перезапустим веб-сервер:

Для этого добавим в конфигурацию виртуального хоста строку:

Также включим механизм OCSP Stapling, который позволяет ускорить проверку сертификата клиентом, что особенно важно для мобильных пользователей. Добавим строку:

Однако этого недостаточно, сохраним настройки виртуального хоста и снова откроем файл /etc/apache2/conf-available/le.conf, куда добавим:

Для работы вышеперечисленных опций нам потребуется модуль Headers:

Снова проверяем конфигурацию и перезапускаем сервер:

А затем добавим:

Сохраним файл конфигурации и подключим модуль Rewrite:

И еще раз перезапустим сервер, не забыв проверить конфигурацию:

Теперь наш сервер настроен с учетом всех современных методик, проверить это можно на сайте SSL Labs, с текущими настройками была получена высшая оценка A+:

Активный SSL-сертификат

SSL в личном кабинете

Установка SSL

После выпуска SSL на ваш контактный e-mail придёт письмо с данными для его установки, это:

  • сам сертификат;
  • корневой сертификат;
  • промежуточный сертификат.

Приватный ключ обычно генерируется при заказе SSL и сохраняется на ваш локальный ПК.

Перед установкой SSL на Ubuntu/Debian необходимо включить модуль mod_ssl с помощью команды: a2enmod ssl .

Чтобы установить SSL:

Создайте на вашем сервере в каталоге /etc/ssl/ файлы domain_name.crt, private.key и chain.crt со следующим содержимым:

  • domain_name.crt — сам сертификат;
  • private.key — приватный ключ;
  • chain.crt — цепочка сертификатов, которая содержит сначала промежуточный сертификат и следом за ним корневой (с новой строки без пробелов и пустых строк).

Откройте файл конфигурации Apache. В зависимости от особенностей вашего сервера этот файл находится по одному из следующих адресов:

В конце файла создайте копию блока «VirtualHost». Укажите для блока порт 443 и добавьте внутри него строки:

Пример конфигурационного файла:

Пример конфига Apache

Проверьте конфигурацию Apache до перезапуска командой: apachectl configtest

Готово, вы настроили SSL-сертификат. Теперь настройте переадресацию для вашего сайта.

Чтобы осуществить переадресацию добавьте в конце файла .htaccess следующие строки:

Подробнее про редирект через .htaccess вы можете узнать в статье: Редирект через .htaccess.

Проверка установленного SSL

Вы можете проверить корректность установки SSL-сертификата по инструкции: Как проверить правильность установки SSL-сертификата?

Если у вас возникли сложности с установкой SSL-сертификата, вы можете написать заявку в службу поддержки, и наши специалисты вам помогут.


Let’s Encrypt — это бесплатный SSL-сертификат, срок действия которого составляет всего 90 дней, но может быть продлен в любой момент времени. Его создатель — Let Encrypt.

Что такое SSL-сертификат?

SSL-сертификат — это цифровой сертификат, который шифрует связь между браузером и веб-сервером. Этот шифр гарантирует, что любая информация, отправляемая на веб-сервер, является конфиденциальной. SSL-сертификаты обычно используются на веб-сайтах электронной коммерции, банковских веб-сайтах и ​​платформах отправки/перевода денег, таких как PayPal, Payoneer и Skrill.

Как я узнаю, что мой сайт защищен?

Check-SSL-Certificate-on-Website


Если сайт не защищен сертификатом SSL, Google отобразит предупреждение «Not Secure» перед адресом сайта в URL.

Предпосылки

Прежде чем начать, убедитесь, что выполнены следующие требования:

Шаг 1: Установка Certbot в Debian 10

Для реализации выше сказанного действия, вам нужно обновите системные репозитории:


Добавьте репозиторий в вашей системе Debian, используя команду показанную ниже:

Шаг 2: Получение сертификата SSL для домена

После успешной установки клиента certbot, устанавливаем сертификат Let Encrypt с помощью приведенной ниже команды:

Система запросит ваш адрес электронной почты, как показано на скриншоте ниже:

Obtain-Let’s-Encrypt-SSL-Certificate-for-Domain

Далее вам будет предложено согласиться с Условиями обслуживания. Введите A и нажмите Enter.

Accept-Let’s-Encrypt-Terms-of-Service

Кроме того, вам будет задан вопрос о том, хотите ли вы поделиться своим адресом электронной почты с фондом EFF и получать периодические обновления о своей работе. Введите Y и нажмите Enter:

Share-Email-Address-with-EFF

Installing-Let’s-Encrypt-SSL-Certificate-on-Domain

Redirect-HTTP-to-HTTPS-on-Domain

Enabled-Let’s-Encrypt-SSL-Certificate-on-Domain

Затем перезагрузите брандмауэр, чтобы изменения вступили в силу:

Чтобы проверить, вступили ли изменения в силу, выполните команду ниже, для проверки состояние брандмауэра:

Verify-HTTPS-Port-on-UFW-Firewall

Как видно из вывода выше, порт 443 открыт.

Check-SSL-Certificate-on-Website

Вы также можете проверить дополнительную информацию о SSL-сертификате, нажатием значка замка, как показано на скриншоте ниже:

Verify-HTTPS-on-Website

В раскрывающемся меню указана опция «Certificate» со знаком «Valid».

Check-SSL-Certificate-Issuer

Test-SSL-Certificate-of-Website

Шаг 5: Проверка автообновления сертификата Certbot SSL

Certbot автоматически продлевает сертификат SSL за 30 дней до истечения срока его действия. Чтобы проверить процесс обновления, выполните команду ниже:

Приведенные ниже результаты подтверждают, что все в порядке и что сертификат SSL будет автоматически обновляться до истечения 90-дневного срока.

Check-Certbot-SSL-Certificate-Auto-Renew

Итоги

Из этой статьи вы узнали, как защитить веб-сервер Apache с помощью бесплатного шифрования Let’s Encrypt.

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Читайте также: