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

TLS (или Transport Layer Security, протокол безопасности транспортного уровня) и предшествующий ему SSL (Secure Sockets Layer) – это сетевые протоколы, которые шифруют и тем самым защищают трафик. Благодаря этой технологии процесс обмена данными между клиентом и сервером надежно защищен от перехвата посторонним абонентом. Кроме того, система сертификации помогает пользователям проверить подлинность сайта.

В данном руководстве речь пойдет о создании самоподписанного SSL-сертификата для веб-сервера Apache на виртуальном выделенном сервере CentOS 7. Самостоятельно подписанный сертификат не может подтвердить подлинность сайта, поскольку он не заверен центром сертификации (ЦС), которому может доверять браузер; но он будет шифровать взаимодействие между сервером и посетителями сайта, и тем самым повысит безопасность соединения.

Требования

Для выполнения данного руководства нужен предварительно настроенный сервер CentOS 7 и не-рутовая учетная запись пользователя с расширенными привилегиями sudo. Подробнее об этом можно прочесть в руководстве «Начальная настройка сервера CentOS 7».

Кроме того, нужно предварительно установить Apache; для установки веб-сервера можно использовать стандартный менеджер пакетов yum:

sudo yum install httpd

Затем нужно запустить Apache в качестве сервиса CentOS, чтобы автоматизировать запуск Apache после перезагрузки:

sudo systemctl enable httpd.service

1: Установка mod_ssl

Чтобы создать самоподписанный сертификат, для начала нужно установить mod_ssl, модуль Apache для поддержки шифрования SSL. Для этого используйте команду yum:

sudo yum install mod_ssl

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

2: Создание SSL-сертификата

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

Сначала нужно создать новый каталог, в котором будет храниться ключ сервера (key-файл) и сам сертификат:

sudo mkdir /etc/httpd/ssl

При помощи команды openssl создайте ключ и сертификат SSL:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt

После ввода запроса будет открыта командная строка, в которой можно ввести информацию о сайте. Но сперва рассмотрим подробнее вышеприведенную команду:

  • openssl: базовый инструмент командной строки для создания и управления сертификатами, ключами и другими файлами OpenSSL;
  • req -x509: эта опция указывает, что в команде нужно использовать запрос на подпись сертификата (CSR) X.509. X.509 – это стандарт инфраструктуры открытых ключей, которого придерживаются SSL и TLS в управлении ключами и сертификатами.
  • -nodes: благодаря этой опции OpenSSL не станет защищать сертификат паролем. Веб-сервер Apache должен иметь возможность читать файл без вмешательства пользователя; в этом случае пароль будет мешать, так как его придется вводить вручную после каждой перезагрузки.
  • -days 365: эта опция устанавливает срок действия сертификата (в данном случае сертификат действителен в течение года).
  • -newkey rsa:2048: эта опция одновременно создает сертификат и ключ. Поскольку ключ, который необходим для подписи сертификата, не был создан ранее, его нужно создать сейчас. Опция rsa:2048 создаст 2048-битный RSA-ключ.
  • -keyout: данная строка задает каталог, в который нужно поместить закрытый ключ.
  • -out: указывает каталог, в который нужно поместить сертификат.

Теперь заполните форму соответствующими данными. Самым важным полем в форме является Common Name, в котором нужно указать доменное имя сайта или внешний IP-адрес сервера. Форма имеет такой вид:

Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Example
Locality Name (eg, city) [Default City]:Example
Organization Name (eg, company) [Default Company Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Example Dept
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:webmaster@example.com

3: Установка SSL-сертификата

Итак, все необходимые компоненты готовы. Теперь нужно настроить виртуальный хост для отображения нового сертификата.

Откройте конфигурационный файл Apache для SSL в текстовом редакторе с привилегиями root:

sudo nano /etc/httpd/conf.d/ssl.conf

Найдите раздел, который начинается с <VirtualHost _default_:443>. В него нужно внести несколько изменений, чтобы сертификат должным образом отображался на сайте.

Сначала раскомментируйте строку DocumentRoot и отредактируйте адрес в кавычках, указав свой каталог document root. По умолчанию это /var/www/html; если вы используете другой root-каталог веб-сервера, укажите в этой строке правильный адрес.

DocumentRoot "/var/www/example.com/public_html"

Затем раскомментируйте строку ServerName (вместо www.example.com укажите свое доменное имя или IP, в зависимости от того, что было указано в поле Common Name).

ServerName www.example.com:443

Найдите строки SSLCertificateFile и SSLCertificateKeyFile и укажите в них адрес ключа и сертификата – каталог /etc/httpd/ssl:

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

Внеся все изменения, сохраните и закройте файл.

4: Активация сертификата SSL

На данный момент SSL-сертификат и веб-сервер готовы. Чтобы применить все изменения и запустить шифрование SSL, перезапустите сервер Apache, это обновит его конфигурации:

sudo apachectl restart

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

https://example.com/

Скорее всего, браузер выдаст предупреждение вроде «site’s security certificate is not trusted». Это значит, что браузер не может доверять сертификату, который не был заверен авторитетным центром сертификации. Это вполне ожидаемая реакция.

Чтобы продолжить, нужно добавить исключение в проверку подлинности браузера.

Заключение

Теперь сервер Apache поддерживает запросы HTTP и HTTPS. Это обезопасит взаимодействие с клиентами и не позволит посторонним читать ваш трафик.

Tags: , , , , , , , ,

1 комментарий

  • Игорь Лазуткин says:

    Ну никак я не могу сервер с CentOs на ssl перевести, всё делал по инструкциям,сервер без домена используется под базу данных и обработку графика, только внешний IP от contabo.Установил LAMP, WEbmin а ssl замахал уже)

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