Как настроить конечное шифрование SSL CloudFlare

Настройка SSL для любого веб-сайта является вызовом. Посетители сайта, браузеры и поисковые системы вознаграждают правильно защищенный веб-сайт с Secure Sockets Layer (SSL). Ранее этот процесс включал приобретение, установку и настройку SSL-сертификата. Однако с помощью Cloudflare SSL вы можете завершить процесс настройки SSL всего несколькими кликами!

В этой статье вы узнаете, как настроить ваш сайт с помощью шифрования SSL через Cloudflare. Таким образом, создайте связи с SSL-соединениями от начала до конца!

Предварительные условия

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

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • Сервер с Ubuntu Linux, установленный и настроенный с использованием NGINX. В этом руководстве показан процесс настройки на Linux и NGINX, но тот же общий процесс работает для IIS или Apache.

Настройка Cloudflare Universal SSL: только начало

Есть несколько способов настроить SSL с помощью Cloudflare. Часто самым быстрым методом является использование Универсального SSL. Почему? С Универсальным SSL вместо того, чтобы искать и покупать SSL-сертификат, Cloudflare предоставляет сертификат, после чего весь трафик, отправленный через Cloudflare, будет использовать этот сертификат.

После включения Универсального SSL Cloudflare предоставляет действующий SSL-сертификат как посетителям, так и поисковым системам. Кроме того, Cloudflare не требует настройки сервера или веб-сайта для использования этого сертификата—все просто!

1. Запустите ваш веб-браузер и войдите в панель управления Cloudflare.

2. Перейдите на ваш сайт из списка доменов вашего аккаунта, как показано ниже.

Choose the site to change options for.

3. Теперь нажмите на SSL/TLS, чтобы просмотреть варианты шифрования вашего сайта.

The SSL/TLS Encryption mode page

4. Выберите вариант Гибкий, чтобы включить Универсальный SSL. После выбора изменения вступают в силу немедленно. Теперь ваш сайт зашифрован между браузером и Cloudflare!

Enabling Universal SSL on Cloudflare

Настройка Полного Шифрования от конца к концу

Хотя Универсальный SSL — отличный способ начать обеспечивать безопасность сайтов, он оставляет трафик между сервером и Cloudflare незащищенным. К счастью, существуют два режима шифрования для зашифровки трафика от Cloudflare к серверу, Полное и Полное (строгое) шифрование, каждое с основными различиями в требованиях к установке сертификатов.

  • Полное – Требует сертификата на сервере, но это может быть самоподписанный сертификат.
  • Полный (строгий) – Установленный серверный сертификат должен быть действительным сертификатом.

Давайте рассмотрим разницу между этими шифрованиями и как их настроить.

Настройка полного шифрования SSL/TLS с самоподписанным сертификатом

В отличие от универсального SSL, для полного шифрования SSL/TLS ваш веб-сервер должен правильно предоставлять SSL-сертификат для шифрования трафика от сервера до Cloudflare. Существует множество способов сделать это, но в этом руководстве показаны шаги на сервере Linux с NGINX.

Генерация самоподписанного сертификата

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

1. Secure Shell (SSH) на вашем веб-сервере Linux.

2. Перейдите (cd) в стандартный каталог SSL Ubuntu (/etc/ssl) с помощью следующей команды. cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. Теперь сгенерируйте как открытый, так и закрытый ключи для вашего сайта с помощью команды openssl. Для этого выполните следующую команду openssl.

Эта команда выполняет несколько действий:

  • Запрашивает (req) сертификат X.509, предоставляемый параметром -x509.
  • Когда ссылается на NGINX, позволяет NGINX читать сертификат при запуске с использованием параметра -nodes.
  • Указывает количество дней, в течение которых сертификат действителен.
  • Создает новый открытый и закрытый ключ с помощью -newkey с использованием шифрования RSA 2048 бит (rsa:2048).
  • Сохраняет закрытый ключ в /etc/ssl/private/nginx-selfsigned.key с параметром -keyout.
  • Сохраняет открытый ключ в /etc/ssl/certs/nginx-selfsigned.crt с использованием параметра -out.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Если openssl возвращает безвредную ошибку Can't load /root/.rnd into RNG, вам нужно закомментировать строку #RANDFILE = $ENV::HOME/.rnd в файле /etc/ssl/openssl.cnf. Все современные версии openssl переключаются на использование системного устройства /dev/urandom для данных случайной энтропии и не требуют определенного файла для инициализации.

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

  • Имя страны: US
  • Название штата или провинции: Иллинойс
  • Название населенного пункта: Блумингтон
  • Название организации: Тестовая компания, ООО
  • Название подразделения организации: <пусто>
  • Общее имя: test.adamlistek.me
  • Адрес электронной почты: [email protected]
Generating a self-signed certificate

5. В последней части убедитесь, что сертификат существует, используя команду test. Если команда test возвращает (echo $?) 0, то файл существует как ожидалось. Вы можете видеть на следующем скриншоте, что каждая команда вернула значение 0.

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

Настройка NGINX

Теперь, когда сертификат был сгенерирован и сохранен в каталогах ключей /etc/ssl/certs и /etc/ssl/private, необходимо настроить NGINX для применения сертификата и обслуживания контента сайта.

Конфигурации сайтов NGINX определяются в блоках server, которые обычно содержатся в файлах виртуальных хостов. В приведенном ниже примере базовая конфигурация сайта хранится в файле test.adamlistek.me.conf и включается в основной файл nginx.conf.

1. Сначала создайте новый файл виртуального хоста с выбранным вами именем, но для этого примера назовите его test.adamlistek.me.conf в каталоге /etc/nginx/vhosts.d. Затем скопируйте содержимое ниже в файл виртуального хоста и сохраните его.

Замените доменное имя test.adamlistek.me на свое собственное, так как это только для демонстрационных целей. И если каталог /etc/nginx/vhosts.d не существует, создайте каталог, выполнив mkdir /etc/nginx/vhosts.d.

server {
   # Слушайте порт 80 для IPv4 и IPv6
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # Выполните 301 перенаправление с любыми параметрами на блок SSL-сервера ниже
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # Слушайте порт 443 для IPv4 и IPv6 с включенным HTTP2 (требуется SSL)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # Местоположение общего и частного сертификатов
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # Местоположение файлов веб-сайтов для загрузки, это местоположение NGINX по умолчанию
   root /usr/share/nginx/html;
 # Файл по умолчанию для обслуживания при запросе корневого домена
   index index.html;
 }

2. Убедитесь, что ваш основной конфигурационный файл NGINX, /etc/nginx/nginx.conf, содержит необходимую строку include в блоке http, расположенном в конце блока.

# Здесь находятся конфигурации сервера
 …
 http {
     # Здесь находятся дополнительные конфигурации# Включить виртуальные хосты
     include /etc/nginx/vhosts.d/*.conf;
 }

3. Перезапустите NGINX с помощью следующей команды, если вы используете systemd, который является современным системным и сервисным менеджером для Linux.

service nginx restart

4. Вернитесь к Cloudflare и убедитесь, что самоподписанный сертификат работает. Для этого отключите «оранжевое облако» для записи DNS под статусом прокси, как показано ниже. Отключение опции «оранжевое облако» обходит Cloudflare и обслуживает запросы напрямую с веб-сервера.

Disabling Cloudflare proxying via Proxy Status.

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

Displaying the self-signed certificate error.

6. Наконец, включите полное шифрование TLS/SSL на Cloudflare. Для этого включите снова статус прокси Cloudflare “оранжевое облако” на ранее отключенной записи DNS. Затем перейдите на вкладку SSL/TLS и нажмите кнопку-переключатель Full, показанную ниже.

Enabling Full SSL/TLS encryption on Cloudflare.

Генерация сертификатов источника для полного (строгого) шифрования SSL/TLS

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

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

Возможно автоматизировать генерацию сертификата, используя API Origin CA Create Certificate, но это выходит за рамки данного руководства.

1. Перейдите на исходный сервер, перейдя на вкладку SSL/TLS -> Исходный сервер, как показано ниже, и нажмите кнопку Создать сертификат.

Navigating to the Origin Server page.

2. Как вы можете видеть ниже, параметры по умолчанию уже установлены для генерации сертификата wildcard для домена с сроком действия 15 лет — прекрасно! Поэтому оставьте параметры по умолчанию и сгенерируйте сертификат, нажав на кнопку Создать в правом нижнем углу страницы.

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. Добавьте вновь созданный сертификат в вашу систему Linux, сначала сохраняя закрытый и открытый ключи с помощью текстового редактора GNU nano. Поскольку нужно сохранить два ключа, вам придется сохранить файлы ключей поочередно.

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

Откройте терминал, затем создайте и откройте файл открытого ключа (nginx-test.adamlistek.me.crt) в nano, запустив первую команду ниже.

Затем вернитесь на Cloudflare и скопируйте ключ Origin Certificate (открытый ключ), нажав на опцию Нажмите, чтобы скопировать, как показано ниже. Затем вставьте (Ctrl+U) скопированный вами открытый ключ в файл открытого ключа, открытый в nano. Сохраните изменения (Ctrl+O) и выйдите (Ctrl+X) из nano.

После сохранения файла открытого ключа повторите тот же процесс создания файла ключа, копирования ключа из Cloudfare и сохранения его в файле ключа. Но на этот раз вы создаете файл закрытого ключа (nginx-test.adamlistek.me.key).

# Публичный ключ, в разделе Origin Certificiate
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
# Приватный ключ, в разделе с тем же именем
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. Теперь вы создали публичный и приватный ключи, укажите NGINX местоположение сертификатов. Сделайте это, изменив файл конфигурации test.adamlistek.me.conf следующими строками, измененными для поддержки вашего домена.

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. Чтобы применить новые сертификаты, перезапустите NGINX следующей командой.

service nginx restart

6. Теперь вернитесь к вкладке SSL/TLS в Cloudflare, обновите режим шифрования SSL/TLS, нажав на Full (strict), как показано ниже.

Setting the Encryption mode to Full (strict).

Включение строгого режима шифрования SSL/TLS с помощью LetsEncrypt

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

Хотя вы можете использовать любой действительный сертификат, LetsEncrypt является общим выбором для генерации действительного сертификата. Существует несколько клиентов LetsEncrypt, но этот учебник демонстрирует клиент acme.sh.

Поскольку вы уже находитесь на Cloudflare, одним из лучших методов DNS-предоставления с LetsEncrypt является опция DNS.

1. Сначала откройте терминал и установите acme.sh с помощью команды curl.

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. Далее необходимо создать или изменить файл account.conf, расположенный в директории установки, чтобы добавить сохраненные ключи API Cloudflare. Эти ключи можно найти в разделе Профиль —> API-токены панели управления Cloudflare.

Хотя вы можете создать специфический токен с ограниченными правами, в данном руководстве используйте вместо этого Global API Key, как показано ниже.

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. Сгенерируйте сертификат с помощью следующей команды. Обратите внимание, что данная команда указывает клиенту acme.sh использовать Cloudflare (dns_cf) для проверки (--dns) владения сертификатом. Затем устанавливается время ожидания (--dnsslep) в 20 секунд перед выдачей (--issue) сертификата для домена (-d) test.adamlistek.me.

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

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. Как и ранее, измените конфигурацию сайта NGINX, чтобы изменить расположение ssl_certificate и ssl_certificate_key. Убедитесь, что замените /home/user на местоположение вашей установки acme.sh.

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. Примените новую конфигурацию, перезапустив NGINX следующей командой.

service nginx restart

6. Наконец, обновите режим шифрования SSL/TLS в Cloudflare, перейдя во вкладку SSL/TLS, затем нажмите на Полный (строгий).

Setting the Encryption mode to Full (strict).

Заключение

На протяжении этого учебного пособия вы узнали, как обеспечить безопасность вашего сайта с помощью различных вариантов SSL/TLS, предоставленных Cloudflare. Добавление LetsEncrypt к вашей конфигурации Cloudflare SSL также добавляет гибкий и управляемый пользователем вариант оригинального сертификата!

С учетом знаний о различных вариантах обеспечения безопасности соединения с посетителем сайта, вы будете работать над полностью безопасным соединением с вашим сервером с помощью Cloudflare SSL?

Source:
https://adamtheautomator.com/cloudflare-ssl/