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

Вступление

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

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

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

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

Предпосылки

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

Вам потребуется доступ к серверу CentOS 7 с пользователем без sudoполномочий root, имеющим привилегии. Если вы еще не настроили это, вы можете запустить руководство по установке начального сервера CentOS 7 для создания этой учетной записи.

Вам также потребуется установить Apache для того, чтобы настроить для него виртуальные хосты. Если вы еще этого не сделали, вы можете использовать yumдля установки Apache через репозитории программного обеспечения по умолчанию CentOS:

  • sudo yum install httpd

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

  • sudo systemctl enable httpd.service

По завершении этих шагов вы можете войти в систему как свою учетную запись пользователя без полномочий root через SSH и продолжить обучение.

Шаг первый: установите Mod SSL

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

  • sudo yum install mod_ssl

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

Шаг второй: создайте новый сертификат

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

Во-первых, нам нужно создать новый каталог для хранения нашего закрытого ключа ( /etc/ssl/certsкаталог уже доступен для хранения нашего файла сертификата):

  • sudo mkdir /etc/ssl/private

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

  • sudo chmod 700 /etc/ssl/private

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

  • 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 -x509 : Указывает, что мы хотим использовать управление запросом на сертификат X.509 (CSR). «X.509» — это стандарт инфраструктуры открытых ключей, который поддерживает SSL и TLS для управления ключами и сертификатами.
  • -nodes : Это говорит OpenSSL, чтобы пропустить этот вариант, чтобы защитить наш сертификат парольной фразой. Нам нужно, чтобы Apache мог читать файл без вмешательства пользователя, когда сервер запускается. Кодовая фраза предотвратит это, потому что нам нужно будет ввести его после каждого перезапуска.
  • -дней 365 : Эта опция устанавливает время, в течение которого сертификат считается действительным. Мы установили его на один год здесь.
  • -newkey rsa: 2048 : Указывает, что мы хотим одновременно создать новый сертификат и новый ключ. Мы не создали ключ, который требуется для подписания сертификата на предыдущем шаге, поэтому нам нужно создать его вместе с сертификатом. rsa:2048Часть говорит это , чтобы сделать ключ RSA , который имеет длину 2048 бит.
  • -keyout : эта строка сообщает OpenSSL, куда поместить созданный файл закрытого ключа, который мы создаем.
  • -out : Это сообщает OpenSSL, где разместить сертификат, который мы создаем.

Заполните соответствующие подсказки соответствующим образом. Самая важная строка — та, которая запрашивает 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

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

Хотя мы используем OpenSSL, мы также должны создать сильную группу Diffie-Hellman, которая используется для переговоров с Perfect Forward Secrecy с клиентами.

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

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

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

Поскольку версия Apache, которая поставляется с CentOS 7, не включает SSLOpenSSLConfCmdдирективу, нам придется вручную добавить сгенерированный файл в конец нашего самозаверяющего сертификата. Для этого введите:

  • cat /etc/ssl/certs/dhparam.pem | sudo tee -a /etc/ssl/certs/apache-selfsigned.crt

Теперь apache-selfsigned.crtфайл должен иметь как сертификат, так и созданную группу Diffie-Hellman.

Шаг третий: установите сертификат

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

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

  • sudo vi /etc/httpd/conf.d/ssl.conf

Найдите раздел, который начинается с <VirtualHost _default_:443>. Здесь необходимо внести несколько изменений, чтобы гарантировать, что наш сертификат SSL правильно применяется на нашем сайте.

Настройка директив VirtualHost

Во-первых, раскомментируйте DocumentRootстроку и отредактируйте адрес в кавычках в месте расположения корня документа вашего сайта. По умолчанию это будет /var/www/html, и вам не нужно менять эту строку, если вы не изменили корень документа для своего сайта. Однако, если вы следовали руководству, подобному руководству по настройке виртуальных хостов Apache , корень документа вашего сайта может отличаться.

Затем раскомментируйте ServerNameстроку и замените ее www.example.comIP-адресом вашего домена или сервера (в зависимости от того, что вы указали как общее имя в своем сертификате):

/etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
. . .
DocumentRoot "/var/www/example.com/public_html"
ServerName www.example.com:443

Далее, найти SSLProtocolи SSLCipherSuiteлиний и либо удалить их или комментировать их. Конфигурация, которую мы вставляем в одно мгновение, предложит более безопасные настройки, чем значение по умолчанию, включенное в Apache CentOS:

/etc/httpd/conf.d/ssl.conf
. . .
# SSLProtocol all -SSLv2
. . .
# SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

Найти SSLCertificateFileи SSLCertificateKeyFileлиний и изменить их в каталог , который мы сделали в /etc/httpd/ssl:

/etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

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

Настройка защищенных параметров SSL

Затем, чтобы более безопасно настроить Apache SSL, мы будем использовать рекомендации Remy van Elst на сайте Cipherli.st . Этот сайт предназначен для обеспечения простых в использовании настроек шифрования для популярного программного обеспечения.

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

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

Для наших целей мы можем полностью скопировать предоставленные настройки. Мы просто сделаем два небольших изменения.

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

Другое изменение, которое мы сделаем, — это прокомментировать SSLSessionTicketsдирективу, поскольку это недоступно в версии Apache, поставляемой с CentOS 7.

Вставить в настройки с сайта ПОСЛЕ окончания VirtualHostблока:

/etc/httpd/conf.d/ssl.conf
    . . .
</VirtualHost>
. . .

# Begin copied text
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
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"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# 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. Если вы не хотите или не нуждаетесь в этой функции, вы можете спокойно пропустить этот раздел.

Для того, чтобы перенаправить весь трафик будет зашифрован SSL, создать и открыть файл , заканчивающийся .confв /etc/httpd/conf.dкаталоге:

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

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

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
        ServerName www.example.com
        Redirect "/" "https://www.example.com/"
</VirtualHost>

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

Шаг четвертый: активируйте сертификат

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

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

  • sudo apachectl configtest

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

Output
. . .
Syntax OK

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

  • sudo systemctl restart httpd.service

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

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

  • sudo firewall-cmd —add-service=http
  • sudo firewall-cmd —add-service=https
  • sudo firewall-cmd —runtime-to-permanent

Если работает брандмауэр iptables , команды, которые необходимо выполнить, сильно зависят от вашего текущего набора правил. Для базового набора правил вы можете добавить доступ HTTP и HTTPS, набрав:sudo iptables -I INPUT -p tcp -m tcp —dport 80 -j ACCEPT

  • sudo iptables -I INPUT -p tcp -m tcp —dport 443 -j ACCEPT

В своем веб-браузере попробуйте посетить свое доменное имя или IP-адрес, https://чтобы увидеть новый сертификат в действии.

https://example.com/

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

После добавления исключения в проверку подлинности браузера вам будет разрешено перейти на ваш вновь защищенный сайт.

Заключение

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

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *