Модуль 17

Let's Encrypt та Certbot

Ось урок, згенерований за твоїм майстер-промптом. Вмикай уяву — ми в лекційній залі, на екрані слайд з величезним червоним замком, а я ходжу сценою і звертаюсь саме до тебе.


🎓 CS50: Безпека в інтернеті. Тема: Let's Encrypt та Certbot

Привіт, друзі! Мене звати... ну, скажімо, Девід, і це — ваш курс комп'ютерних наук.

Сьогодні ми говоримо про безпеку. Але не про ту нудну безпеку з кілометровими паролями, а про те, що робить сучасний інтернет можливим.

1. 🔥 Вступ: Чому ваш сайт без замка — це катастрофа?

Уявіть ситуацію. Ви сидите в кав’ярні, підключилися до публічного Wi-Fi та вирішили купити квитки на потяг. Ви вводите номер своєї картки, натискаєте "Оплатити"... і в цей момент хлопець за сусіднім столиком, який попиває лате і дивно посміхається в ноутбук, бачить ваші дані. Номер картки, CVV, все.

Чому? Тому що ви використали HTTP без шифрування. Це як надіслати поштову листівку: поштар, сусіди, сортувальник — усі можуть прочитати текст на звороті.

А тепер подивіться на адресний рядок вашого браузера. Бачите цей маленький замочок 🔒 поруч із https://?

Цей замочок означає дві речі: 1. Конфіденційність: Ваші дані їдуть у "броньованому авто", а не на возі. 2. Довіра: Сайт дійсно є тим, за кого себе видає (це справді Google.com, а не сайт хакера Васі).

Раніше, щоб отримати цей "замочок" (SSL-сертифікат), треба було: * Заплатити купу грошей (іноді сотні доларів на рік). * Заповнити купу паперів. * Чекати дні або тижні. * Налаштовувати все вручну, страждаючи від помилок.

Питання до вас: Чи повинен безпечний інтернет бути розкішшю? Чи має бути безпека доступна кожному студенту, стартаперу та блогеру?

Звісно, ні. Саме тому з'явилися Let's Encrypt та Certbot. Вони зробили HTTPS безкоштовним, автоматичним і доступним для всіх. Без них сучасний Web був би зовсім іншим.


2. 🧠 Теоретична база: Як це працює (без магії)

Давайте розберемося, що відбувається "під капотом", коли ми хочемо отримати цей замок.

Ключові гравці:

  1. HTTPS (TLS/SSL): Протокол шифрування. Це мова, якою спілкуються ваш браузер і сервер, щоб ніхто не підслухав.
  2. Сертифікат: Цифровий паспорт вашого сайту. Він каже: "Я — mysite.com, і ось мій публічний ключ".
  3. Certificate Authority (CA): Організація, яка видає ці паспорти. В нашому випадку це Let's Encrypt.
  4. Certbot: Це програма-робот, яку ви ставите на свій сервер. Вона виконує всю брудну роботу за вас: стукає до Let's Encrypt, проходить перевірки та налаштовує сервер.

Як працює механізм (аналогія з паспортом):

Уявіть, що ви хочете отримати перепустку в секретний клуб (HTTPS). Ви приходите до охоронця (Let's Encrypt).

Ви: "Привіт, я власник домену example.com. Дай перепустку." Охоронець (Let's Encrypt): "Я тобі не вірю. Доведи."

Тут починається Challenge (Виклик).

  1. Завдання: Охоронець каже: "Якщо ти справді володієш example.com, поклади ось цей унікальний файл у папку .well-known на своєму сайті".
  2. Виконання: Ваш помічник (Certbot) миттєво створює цей файл на сервері.
  3. Перевірка: Охоронець заходить на http://example.com/.well-known/..., бачить файл і каже: "Ок, ти не брешеш. Тримай сертифікат!"

Що треба запам'ятати залізно: * Сертифікати Let's Encrypt живуть 90 днів. Чому так мало? Щоб якщо ключ вкрадуть, зловмисник не користувався ним роками. * Вам потрібен відкритий 80-й порт (HTTP), щоб Let's Encrypt міг зайти і перевірити "виклик".


3. 🧪 Приклади: Від "Hello World" до реальності

Припустимо, у нас є сервер на Ubuntu, де вже працює вебсервер Nginx. Сайт відкривається по HTTP, і браузер кричить "Небезпечно!".

Що ми очікуємо зробити?

Ми хочемо ввести одну-дві команди, і щоб сайт став зеленим (HTTPS), а Nginx сам перезавантажився з новими налаштуваннями.

Крок 1: Встановлення Certbot

Це як купити інструменти перед ремонтом.

sudo apt update
sudo apt install certbot python3-certbot-nginx

(Тут ми ставимо самого бота і плагін спеціально для Nginx, щоб він вмів редагувати конфіги).

Крок 2: Магія (Отримання сертифіката)

Запускаємо команду:

sudo certbot --nginx -d example.com

Що відбувається в цей момент? 1. Certbot питає вашу пошту (для нагадувань). 2. Він зв'язується з Let's Encrypt. 3. Проходить перевірку (Challenge), про яку ми говорили. 4. Завантажує сертифікати у папку /etc/letsencrypt/live/example.com/. 5. Найкрутіше: Він лізе в конфіг Nginx, додає туди шляхи до ключів і налаштовує редірект з HTTP на HTTPS.

Результат

Ви заходите на сайт, і він автоматично перекидає вас на https://.... Замочок є. Ви — чудові!


4. 🛠 Практична частина

Теорія без практики — мертва. Ось ваші завдання. Не бійтеся зламати (якщо це тестовий сервер)!

🔹 Завдання 1: Симуляція (Dry Run)

Ми часто боїмося щось зламати на проді. Спробуйте запустити отримання сертифіката "понарошку", щоб перевірити, чи все ок з доступами. Команда: sudo certbot renew --dry-run Питання: Що написала консоль? Чи були помилки?

🔹 Завдання 2: "А де мої ключі?"

Знайдіть, де фізично лежать ваші сертифікати. Підказка: Подивіться в /etc/letsencrypt/live/. Завдання: Виведіть список файлів. Ви побачите fullchain.pem та privkey.pem. Увага: privkey.pem — це як пін-код від картки. Ніколи, чуєте, НІКОЛИ нікому його не передавайте.

🔹 Завдання 3: Перевірка автооновлення

Certbot зазвичай сам додає таймер для оновлення сертифікатів. Перевірте, чи він є. Команда: systemctl list-timers | grep certbot Аналіз: Коли наступний запуск?

🔹 Завдання 4: Кейс із фаєрволом

Уявіть: ви запускаєте Certbot, а він видає помилку Timeout або Connection Refused під час перевірки. Ситуація: Ви закрили порт 80 (HTTP) на фаєрволі, залишивши тільки 443 (HTTPS), бо думали, що так безпечніше. Рішення: Чому це проблема для Let's Encrypt? Як це виправити, не відкриваючи дірок у безпеці? (Відповідь: відкрити 80-й порт, але налаштувати Nginx так, щоб він одразу перекидав на HTTPS, проте дозволяв шлях /.well-known).


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі в роботі з SSL?

1. Новачок думає: "Я отримав сертифікат, ура! Забуду про це назавжди." Профі думає: "Через 90 днів це перетвориться на гарбуз. Чи точно спрацює автооновлення? Чи перезавантажиться Nginx після оновлення, щоб підхопити новий файл?"

2. Типова помилка: Копіювати папку /etc/letsencrypt руками з одного сервера на інший. Чому це погано: Там є "сімлінки" (посилання) на реальні файли. Копіюючи неправильно, ви скопіюєте порожні посилання і зламаєте прод. Краще згенерувати новий сертифікат на новому місці.

3. Ліміти: Let's Encrypt має ліміти (Rate Limits). Якщо ви будете довбати їхній сервер командою кожні 5 хвилин через помилку в скрипті, вас заблокують на тиждень. Порада: Для тестів завжди використовуйте прапорець --staging (тестовий сервер Let's Encrypt, який видає "фейкові", але валідні технічно сертифікати без лімітів).


6. 🧩 Підсумок

Отже, що ми маємо на виході?

  1. HTTP — це минуле. Небезпечне і відкрите.
  2. HTTPS — це стандарт. Конфіденційність і довіра.
  3. Certbot + Let's Encrypt — це ваші найкращі друзі, які роблять складну криптографію справою однієї команди.

Тепер ви вмієте не просто "робити сайти", а робити їх безпечними для користувачів. Ви піднялися на сходинку вище в еволюції системного адміністратора та бекенд-розробника.

А що далі? Зараз ми налаштували все на одному сервері "руками". Але що, як у вас 50 мікросервісів? Як керувати сертифікатами в хмарі, де сервери живуть по 2 години? На наступному занятті ми поговоримо про Docker і те, як запакувати наш безпечний вебсервер у контейнер.

Це був CS50. До зустрічі! 👋