Створення самопідписаного SSL-сертифіката для Nginx в Ubuntu, Блог
- Головна
- Блог
- Адміністрація
- Створення самопідписаного SSL-сертифіката для Nginx в Ubuntu 16.04
Створення самопідписаного SSL-сертифіката для Nginx в Ubuntu 16.04
Ми покажемо вам, як створити сертифікат, а також налаштувати веб-сервер Nginx для підтримки SSL
SSL (Secure Socket Layers) є криптографічний протокол для захисту, що передаються в інтернеті між клієнтом і сервером. Протокол унеможливлює перехоплення даних зловмисниками. SSL також допомагають користувачам перевіряти справжність відвідуваних ресурсів. У цій статті ми покажемо вам, як можна зробити для веб-сервера Nginx на Ubuntu 16.04 самопідписаний сертифікат.
Майте на увазі, що такий SSL не здатний підтвердити автентифікацію сервера через відсутність підтвердження від спеціального сертифікаційного центру. Сертифікат здатний лише забезпечувати шифрування каналу передачі. Його можна використовувати користувачам без доменного імені. Якщо домен у вас вже є, SSL доведеться завірити в центрі сертифікації. Ви також можете отримати від сервісу Let's Encrypt безкоштовний сертифікат.
- • Вже налаштований сервер Nginx;
- • Чи не-root користувач, який має доступ до sudo.
1. Як створити сертифікат?
SSL для роботи застосовує поєднання закритого ключа та відкритого сертифіката. Ключ знаходиться на сервері, і доступу до нього немає. Сертифікат доступний всім користувачам, які завантажують контент з сервера. Для створення самопідписаного SSL та ключа нам потрібно набрати в командному рядку:
На екрані ви побачите кілька запитань. З компонентів команди можна виділити:
- • Openssl – це базовий інструмент командного рядка. Він потрібен для створення та управління сертифікатами, атакож файлами OpenSSL та ключами;
- • Підкоманда req показує, що потрібний запит для підпису сертифіката X.509 (CSR). Це стандарт інфраструктури для відкритих ключів, управління сертифікатами;
- • Опція –x509 здатна вносити зміни до попередньої команди. Вони повідомляє, що потрібно створити самопідписаний сертифікат замість запиту з його підпис;
- • -nodes використовується для пропуску опції захисту SSL-сертифіката за допомогою пароля. Це необхідно для того, щоб Nginx під час запуску зчитував файл без необхідності втручання користувача. Якщо встановити пароль – його потрібно буде вводити після кожного перезавантаження;
- • Опція -days365 допоможе встановити термін дії сертифіката;
- • Параметр -newkey rsa:2048 дозволяє зробити одночасно сертифікат і ключ, адже він не був створений раніше. Число 2048 означає, що ключ буде на 2048 біт;
- • Рядок -keyout показує, куди OpenSSL перемістить отриманий файл ключа;
- • Опція -out робить те саме, але для сертифіката.
За допомогою вищеописаних опцій ви зможете згенерувати одночасно сертифікат із ключем. Вам потрібно лише вказати дані сервера, що відображаються в SSL.
Рядок common name дуже важливий. У ній потрібно написати своє ім'я або повне доменне ім'я сервера. Простими словами: вона потрібна для зв'язку із сервером доменного імені. Якщо його немає, вкажіть IP сервера. Поля виглядатимуть якось так:
Зверніть увагу, що файли сертифіката та ключа будуть переміщені до папки /etc/nginx/ssl. Якщо ви використовуєте OpenSSL, вам також потрібно зробити спеціальні ключі Діффі-Хеллмана для підтримки PFS. Щоб це зробити, наберіть у командному рядку:
Зачекайте кілька хвилин, поки згенеруються ключі. Вони будуть розміщені у каталозі /etc/ssl/certs/dhparam.pem.
2. Як настроїти Nginx для підтримки SSL-сертифікатів?
Створені ключі зберігаються в папці: /etc/ssl. Тепер нам потрібно буде внести редагування в налаштування веб-сервера Nginx:
До файлу додамо правило ssl_sertificate, що вказує шлях до нашого сертифіката. Крім того, нам потрібна директива ssl_sertificate_key для шляху до ключа:
2) Тепер потрібно додати налаштування сертифіката за допомогою ще одного СНІП. Це дозволить нам отримати надійний механізм шифрування за допомогою додаткових можливостей безпеки. Задані параметри вдасться використовувати у майбутніх конфігураціях веб-сервера Nginx. Дайте файлу якесь спільне ім'я:
Налаштуємо DNS-розпізнавач для запитів зі висхідного каналу, а також додамо ssl_dhparam для підтримки ключів Діффі-Хеллмана. Вийде ось так:
Зауважте, що через самопідписаність сертифіката не буде використовуватися SSL stapling. При цьому сервер Nginx покаже попередження, вимкне stapling для цього SSL та продовжить працювати. Тепер збережемо зміни та закриємо файл.
3) І останнє: налаштувати блоки server, щоб вони могли обслуговувати запити SSL та підтримувати нові налаштування. У статті розглядається випадок застосування віртуального хоста default (блок server). Він зберігається у папці /etc/nginx/sites-available. Якщо ви хочете користуватися іншим файлом, потрібно вказати його ім'я. Створимо резервну копію файлу блоку server за допомогою:
Він виглядатиме десь так:
Зміни потрібно зберегти, а файл закрити. Якщо потрібно налаштувати одночасну підтримку HTTP і HTTPS, об'єднайте два блоки server в один. Редирект потрібно видалити.
Ці зміни слід зберегти. Після цього закривайте файл.
3. Як настроїти брандмауер?
Нам також потрібно буде побачитипоточні параметри брандмауера. Наберіть у консолі:
Вони будуть виглядати так, якщо підтримується тільки трафік з протоколу HTTP:
Нам потрібна підтримка і HTTPS. Для цього ми відключимо профіль Nginx HTTP та налаштуємо Nginx Full. Наберіть у командному рядку:
Налаштування брандмауера зміняться і виглядатимуть так:
4. Як оновити налаштування Nginx
Після коригування налаштувань веб-сервера та брандмауера потрібно перезапустити Nginx, щоб усі зміни набули чинності. Перевірте синтаксис на наявність помилок за допомогою:
Якщо все правильно, на екрані ви побачите:
Попередження з'являється в першому рядку, оскільки ми використовуємо сертифікат, що підписаний самопідписанням. Не звертайте уваги, з'єднання все одно коректно шифруватиметься. У разі виявлення помилок їх потрібно виправити. Після цього буде потрібно перезапустити веб-сервер Nginx за допомогою:
5. Тестуємо налаштування
Нам потрібно переконатися, що трафік між клієнтом та сервером шифрується. Це можна зробити, відкривши у браузері посилання:
Не дивуйтеся, якщо браузер повідомить, що сертифікат є ненадійним, адже ми його підписали самостійно:
6. Як зробити постійний редирект?
Якщо робота всіх налаштувань сервера правильна, можна замість тимчасового редагування ставити постійний. Для цього відкриємо файл блоку server:
У ньому потрібно знайти return 302 та замінити значення на 301. Вийде таке:
Зміни у файлі потрібно зберегти та закрити його. Не забудьте перевірити синтаксис щодо змісту помилок. Для цього знадобиться команда:
Якщо все правильно, Nginx можна перезапустити за допомогою: