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

Как создать SSL-сертификат на Nginx для Ubuntu 14.04


Введение

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

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

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

Примечание. Возможно, вы захотите использовать Let’s Encrypt вместо самоподписанного сертификата. Let’s Encrypt — это новый центр сертификации, выпускающий бесплатные сертификаты SSL/TLS, которым доверяют большинство веб-браузеров. Для начала ознакомьтесь с руководством: Как защитить Nginx с помощью Let’s Encrypt в Ubuntu 14.04.

Предпосылки

Чтобы приступить к работе с этим руководством, вам нужно будет настроить некоторые базовые вещи на вашем сервере.

У вас должен быть доступный пользователь без полномочий root с привилегиями sudo. Вы можете узнать, как настроить такую учетную запись пользователя, выполнив шаги 1-4 в нашей начальной настройке сервера для Ubuntu 14.04.

После этого вам также потребуется установить веб-сервер Nginx. Если вы хотите установить на свой сервер весь стек LEMP (Linux, Nginx, MySQL, PHP), следуйте нашему руководству по настройке LEMP в Ubuntu 14.04.

Если вам просто нужен веб-сервер Nginx, вы можете просто ввести:

sudo apt-get update
sudo apt-get install nginx

Шаг первый — создайте SSL-сертификат

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

sudo mkdir /etc/nginx/ssl

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

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

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

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

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

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

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

<пред>

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

Шаг второй — настройте Nginx для использования SSL

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

Nginx версии 0.7.14 и выше (Ubuntu 14.04 поставляется с версией 1.4.6) может включать SSL в том же блоке сервера, что и обычный HTTP-трафик. Это позволяет нам настраивать доступ к тому же сайту гораздо более лаконично.

Ваш серверный блок может выглядеть примерно так:

<пред>

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name your_domain.com;

    location / {
            try_files $uri $uri/ =404;
    }

}

Единственное, что нам нужно сделать, чтобы заставить SSL работать на том же блоке сервера, но при этом разрешать обычные HTTP-соединения, это добавить следующие строки:

<пред>

    <span class="highlight">listen 443 ssl;</span>

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name <span class="highlight">your_domain.com</span>;
    <span class="highlight">ssl_certificate /etc/nginx/ssl/nginx.crt;</span>
    <span class="highlight">ssl_certificate_key /etc/nginx/ssl/nginx.key;</span>

    location / {
            try_files $uri $uri/ =404;
    }

}

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

Теперь все, что вам нужно сделать, это перезапустить Nginx, чтобы использовать ваши новые настройки:

sudo service nginx restart

Это должно перезагрузить конфигурацию вашего сайта, теперь позволяя ему отвечать на запросы HTTP и HTTPS (SSL).

Шаг третий — проверьте свою установку

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

Во-первых, давайте проверим, чтобы убедиться, что мы все еще можем получить доступ к сайту с использованием обычного HTTP. В веб-браузере перейдите к доменному имени или IP-адресу вашего сервера:

<пред>

Вы должны увидеть свой обычный веб-сайт. В моем примере я просто обслуживаю страницу Nginx по умолчанию:

Если вы получили эту страницу, ваш сервер по-прежнему корректно обрабатывает HTTP-запросы.

Теперь мы можем проверить, может ли наш сервер использовать SSL для связи. Для этого укажите протокол https вместо протокола http.

<пред>

Скорее всего, вы получите предупреждение в своем веб-браузере, которое выглядит примерно так:

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

Нажмите «Все равно продолжить», «Продолжить» или любой другой доступный вариант. Вы должны снова увидеть свой сайт:

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

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

Заключение

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

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

Джастин Эллингвуд