Поиск по сайту:

Как создать SSL-сертификат на Apache для CentOS 7


Введение

TLS, или безопасность транспортного уровня, и его предшественник SSL, что означает уровень защищенных сокетов, — это веб-протоколы, используемые для переноса обычного трафика в защищенную зашифрованную оболочку.

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

В этом руководстве вы настроите самозаверяющий сертификат SSL для использования с веб-сервером Apache на сервере CentOS 7.

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

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

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

Предпосылки

Прежде чем приступить к работе с этим руководством, необходимо выполнить несколько шагов.

  • Вам потребуется доступ к серверу CentOS 7 от пользователя без полномочий root с правами sudo. Если вы еще не настроили это, вы можете запустить руководство по начальной настройке сервера CentOS 7, чтобы создать эту учетную запись.
  • Вам также потребуется установить Apache, как описано в шаге 1 руководства Установка веб-сервера Apache в CentOS 7. После выполнения этих шагов вы можете войти в систему под своей учетной записью пользователя без полномочий root через SSH и продолжить обучение.

Шаг 1 — Установка mod_ssl

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

  1. sudo yum install mod_ssl

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

Шаг 2 — Создание нового сертификата

Теперь, когда Apache готов к использованию шифрования, вы можете перейти к созданию нового SSL-сертификата. TLS/SSL работает с использованием комбинации открытого сертификата и закрытого ключа. Ключ SSL хранится в секрете на сервере. Он используется для шифрования содержимого, отправляемого клиентам. SSL-сертификат общедоступен всем, кто запрашивает содержимое. Его можно использовать для расшифровки содержимого, подписанного соответствующим ключом SSL.

Каталог /etc/ssl/certs, который можно использовать для хранения общедоступного сертификата, уже должен существовать на сервере. Вам также потребуется создать каталог /etc/ssl/private для хранения файла закрытого ключа. Поскольку секретность этого ключа важна для безопасности, важно заблокировать разрешения для предотвращения несанкционированного доступа:

  1. sudo mkdir /etc/ssl/private
  2. sudo chmod 700 /etc/ssl/private

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

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

Вам будет задан ряд вопросов. Прежде чем перейти к этому, давайте посмотрим, что происходит в команде:

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

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

Заполните подсказки соответствующим образом.

Примечание. Важно, чтобы вы вводили свое доменное имя или общедоступный IP-адрес вашего сервера, когда вам будет предложено ввести Общее имя (например, полное доменное имя сервера или ВАШЕ имя). Значение здесь должно соответствовать тому, как ваши пользователи получают доступ к вашему серверу.

В целом подсказки будут выглядеть примерно так:

Output
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) []:your_domain_or_ip Email Address []:webmaster@example.com

Оба созданных вами файла будут помещены в соответствующие подкаталоги каталога /etc/ssl.

Поскольку вы используете OpenSSL, вам также следует создать сильную группу Диффи-Хеллмана, которая используется при согласовании совершенной секретности пересылки с клиентами.

Вы можете сделать это, набрав:

  1. sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Это может занять несколько минут, но когда это будет сделано, у вас будет сильная группа DH по адресу /etc/ssl/certs/dhparam.pem, которую вы сможете использовать в своей конфигурации.

Шаг 3 — Настройка сертификата

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

Откройте новый файл в каталоге /etc/httpd/conf.d:

  1. sudo vi /etc/httpd/conf.d/your_domain_or_ip.conf

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

<VirtualHost *:443>
    ServerName your_domain_or_ip
    DocumentRoot /var/www/html
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
    SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>

Обязательно обновите строку ServerName так, как вы собираетесь обращаться к своему серверу. Это может быть имя хоста, полное доменное имя или IP-адрес. Убедитесь, что все, что вы выберете, соответствует Common Name, которое вы выбрали при создании сертификата.

Настройка параметров безопасного SSL

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

Примечание. Предлагаемые по умолчанию настройки на Cipherlist.eu обеспечивают надежную защиту. Иногда это происходит за счет большей совместимости клиентов. Если вам нужна поддержка старых клиентов, существует альтернативный список, доступ к которому можно получить, щелкнув ссылку с надписью «Да, дайте мне набор шифров, который работает с устаревшим/старым программным обеспечением».

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

Есть несколько частей конфигурации, которые вы можете изменить. Во-первых, вы можете добавить предпочитаемый преобразователь DNS для восходящих запросов в директиву resolver. Вы использовали Google для этого руководства, но вы можете изменить это, если у вас есть другие предпочтения.

Наконец, вы должны уделить немного времени, чтобы прочитать о функции «предварительной загрузки». Предварительная загрузка HSTS обеспечивает повышенную безопасность, но может иметь далеко идущие последствия, если она случайно или неправильно включена. В этом руководстве вы не будете предварительно загружать настройки, но вы можете измените это, если вы уверены, что понимаете последствия.

Другие изменения, которые вы внесете, заключаются в удалении +TLSv1.3 и закомментировании директив SSLSessionTickets и SSLOpenSSLConfCmd, поскольку они недоступны в версия Apache, поставляемая с CentOS 7.

Вставьте настройки с сайта после окончания блока VirtualHost:


    . . .
</VirtualHost>
. . .

# Begin copied text
# from https://cipherli.st/

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
# Requires Apache 2.4.36 & OpenSSL 1.1.1
SSLProtocol -all +TLSv1.2
# SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
# Older versions
# SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
# SSLSessionTickets Off

Когда вы закончите вносить эти изменения, вы можете сохранить и закрыть файл.

Создание перенаправления с HTTP на HTTPS (необязательно)

В настоящее время сервер будет предоставлять как незашифрованный HTTP-трафик, так и зашифрованный HTTPS-трафик. Для большей безопасности в большинстве случаев рекомендуется автоматически перенаправлять HTTP на HTTPS. Если вы не хотите или не нуждаетесь в этом функционале, вы можете смело пропустить этот раздел.

Чтобы перенаправить весь трафик на SSL-шифрование, создайте и откройте файл с расширением .conf в каталоге /etc/httpd/conf.d:

  1. sudo vi /etc/httpd/conf.d/non-ssl.conf

Внутри создайте блок VirtualHost для сопоставления запросов на порту 80. Внутри используйте директиву ServerName, чтобы снова сопоставить ваше доменное имя или IP-адрес. Затем используйте Redirect, чтобы сопоставить любые запросы и отправить их на SSL VirtualHost. Не забудьте включить косую черту в конце:

<VirtualHost *:80>
       ServerName your_domain_or_ip
        Redirect "/" "https://your_domain_or_ip/"
</VirtualHost>

Сохраните и закройте этот файл, когда закончите.

Шаг 4 — Применение изменений конфигурации Apache

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

Сначала проверьте файл конфигурации на наличие синтаксических ошибок, набрав:

  1. sudo apachectl configtest

Пока вывод заканчивается Syntax OK, вы можете продолжать. Если это не часть вашего вывода, проверьте синтаксис ваших файлов и повторите попытку:

Output
. . . Syntax OK

Перезапустите сервер Apache, чтобы применить ваши изменения, набрав:

  1. sudo systemctl restart httpd.service

Затем убедитесь, что порты 80 и 443 открыты в вашем брандмауэре. Если вы не используете брандмауэр, вы можете пропустить этот шаг.

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

  1. sudo firewall-cmd --add-service=http
  2. sudo firewall-cmd --add-service=https
  3. sudo firewall-cmd --runtime-to-permanent

Если у вас запущен брандмауэр iptables, команды, которые вам нужно выполнить, сильно зависят от вашего текущего набора правил. Для базового набора правил вы можете добавить доступ HTTP и HTTPS, набрав:

  1. sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
  2. sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Шаг 5 — Тестирование шифрования

Теперь вы готовы протестировать свой SSL-сервер.

Откройте веб-браузер и введите https://, а затем доменное имя или IP-адрес вашего сервера в адресную строку:

https://your_domain_or_ip

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

Это ожидаемо и нормально. Вас интересует только аспект шифрования вашего сертификата, а не сторонняя проверка подлинности вашего хоста. Нажмите «ДОПОЛНИТЕЛЬНО», а затем ссылку, чтобы перейти к вашему хосту в любом случае:

Вас должны перенаправить на ваш сайт. Если вы посмотрите в адресную строку браузера, вы увидите некоторые признаки частичной безопасности. Это может быть замок со знаком \x над ним или треугольник с восклицательным знаком. В этом случае это просто означает, что сертификат не может быть проверен. Он все еще шифрует ваше соединение.

Если вы настроили Apache для перенаправления HTTP-запросов на HTTPS, вы также можете проверить, правильно ли работает перенаправление:

http://your_domain_or_ip

Если это приводит к тому же значку, это означает, что ваше перенаправление сработало правильно.

Заключение

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

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