Стаття також доступна російською (перейти до перегляду).

Зміст:
- Необхідні передумови
- Встановлення клієнта для Let’s Encrypt
- Налаштування веб-серверу
- Налаштування брандмауеру
- Процес отримання сертифікату
- Автоматичне подовження SSL сертифікату
Одним із найважливіших завдань у питаннях захисту свого веб-сайту є налаштування захищеного каналу передачі даних між браузером та веб-сервером. Для того, щоб це реалізувати необхідна наявність сертифікату типу TLS/SSL, котрий може мати значну вартість або ж бути безкоштовним, але з певними обмеженнями у використанні. Для невеликих проектів доцільно використовувати безкоштовні Let’s Encrypt сертифікати, доля ринку котрих за даними агенції W3Techs станом на грудень поточного року становить 63,1% у абсолютному вимірі. Єдиною складністю їх використання є необхідність виконання певних налаштувань на сервері у термінальному режимі, що б дозволило отримати сертифікат та у подальшому здійснювати операції його автоматичного оновлення. Наведемо приклад виконання таких налаштувань для веб-серверу Apache за допомогою нашого сервера під управлінням Ubuntu версії 24.04.
Необхідні передумови
Вкажемо необхідні параметри налаштувань, конфігурації обладнання та програмного забезпечення, котрі знадобляться нам для отримання безкоштовного сертифікату Let’s Encrypt:
-
Налаштований сервер Ubuntu;
-
Користувач із правами sudo;
-
Зареєстрований домен, як приклад, нами буде використовуватися my_domain;
-
Наявність субдомену www.my_domain;
-
Розгорнутий веб-сервер Apache, на котрому знаходиться файл віртуального хоста для зареєстрованого нами домену.
Якщо вказані передумови виконані, можна переходити до реалізації наступних етапів.
Встановлення клієнта для Let’s Encrypt
Клієнтська програма бере на себе всі посередницькі функції та допомагає отримати та у подальшому обслуговувати сертифікат. У якості клієнта використовується програма Certbot і тому спробуємо її встановити на нашому сервері. Для цього скористаємося можливостями репозиторію Ubuntu.
Послідовність дій при цьому буде наступною:
-
Оновлення індексу пакетів;
-
Запуск двох пакетів – для встановлення програми та її інтеграції із веб-сервером Apache.
Відповідні команди:
$ sudoapt update $ sudoaptinstall certbot python3-certbot-apache
Якщо програма була успішно встановлена, можна переходити до наступного етапу – налаштуванню конфігурації веб-серверу.
Налаштування веб-серверу
Завданням цього етапу буде перевірка, і при необхідності встановлення правильних налаштувань віртуального хоста для веб-серверу Apache. Це дозволить клієнтській програмі безпомилково визначити потрібний віртуальний хост у налаштуваннях веб-серверу.
Правильні налаштування повинні бути виставлені у конфігураційному файлі /etc/apache2/sites-available/my_domain.conf зареєстрованого нами домену у розділі для віртуального хоста.
Перевірити їх можна за допомогою наступної команди:
$ sudonano /etc/apache2/sites-available/your_domain.conf
Наведемо ці параметри та їх значення для нашого випадку:
ServerName my_domain ServerAlias www.my_domain
Якщо значення вказаних директив встановлені вірно, тоді нічого змінювати не потрібно. У іншому випадку їх треба відредагувати, зберегти внесені зміни та вийти з редактору.
Якщо у файл були внесені зміни, його необхідно перевірити на наявність синтаксичних помилок. Це можна зробити за допомогою наступної команди:
$ sudo apache2ctl configtest
Якщо все гаразд, повинно з’явитися відповідне повідомлення. Після цього можна оновити поточну конфігурацію шляхом перезавантаження серверу:
$ sudo systemctl reload apache2
Тепер ми можемо бути впевнені, що клієнтська програма правильно визначить віртуальний хост і тому можна переходити до наступного етапу налаштувань.
Налаштування брандмауеру
Основне завдання цього етапу – дозволити трафік по захищеному протоколу HTTPS.
Для початку треба визначити, який профіль брандмауера використовує Apache на даний час. Це можна зробити шляхом перевірки статусу додатку:
$ sudo ufw status
Якщо на виході команди не буде виведений профільApache Full, то це буде означати, що сервером буде блокуватися трафік по захищеному протоколу, але дозволений по незахищеному. І тому треба додати потрібний профіль та видалити «звичайний».
Додати профіль можна за допомогою команди:
$ sudo ufw allow 'Apache Full'
Тепер видалимо непотрібний профіль:
$sudo ufw delete allow 'Apache'
Перевіримо статус додатку:
$ sudo ufw status
Вихід команди:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)
&Можна переконатися, що тепер трафік по протоколу HTTPS є дозволеним. Після цього можна перейти до етапу безпосереднього отримання сертифікату.
Процес отримання сертифікату
Є різні варіанти отримання сертифікату від Центру сертифікації Let’s Encrypt за допомогою клієнтської програми. Зокрема, це можна зробити з використанням відповідного плагіну веб-серверу Apache. Скористаємося ним і ми.
У терміналі введемо наступну команду:
$ sudo certbot --apache
При цьому запуститься управляюча програма, котра буде послідовно виводити у терміналі уточнюючі запитання.
Output Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): testing@my_domain
Вводимо нашу електронну адресу та підтверджуємо свій вибір клавішею вводу. Адреса необхідна для зворотного зв’язку між нами та Центром сертифікації, зокрема, для інформування про подовження дії сертифікату та питання безпеки.
Наступне запитання буде стосуватися нашої згоди на умови обслуговування у обраному нами Центрі, і якщо вони нас влаштовують слід натиснути клавішу Y (Yes).
Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y
Після цього нам запропонують надати свою електронну адресу Міжнародній організації із захисту цифрових прав EFF для періодичного отримання найбільш важливої інформації.
Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: N
Відмовляємось від пропозиції та продовжуємо далі.
Далі на екран буде виведений список доменів, вказаних у налаштуваннях віртуального хоста веб-серверу, котрі ми налаштовували раніше. Запитання буде стосуватися нашого рішення активувати HTTPS для вказаних доменів
Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: my_domain
2: www.my_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
Якщо ми хочемо це зробити для всіх виведених ресурсів, тоді слід натиснути клавішу вводу. Але якщо тільки для обраних, тоді необхідно перерахувати їх номери у списку, розділяючи їх комами або кроком каретки.
Натискаємо клавішу Enter, після чого налаштування клієнта буде завершено. При цьому буде виведене завершальне вікно команди із інформацією про місце розміщення файлу сертифікату та його ключа, термін дії сертифікату, повідомлення про порядок автоматичного оновлення сертифікату клієнтською програмою та деяка інша інформація.
Output Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/my_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/my_domain/privkey.pem This certificate expires on 2025-03-17. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/my_domain-le-ssl.conf Successfully deployed certificate for www.my_domain.com to /etc/apache2/sites-available/my_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/my_domain and https://www.my_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le
Тепер сертифікат повністю встановлений та налаштований. Для того, щоб перевірити це достатньо замінити в адресній строчці браузера протокол для свого сайту із http на https. Якщо все гаразд, сайт буде працювати, як і раніше, а з лівого боку його адреси з’явиться зображення зачиненого замка. Це і буде показником його захисту.
Окрім того, ви завжди можете застосувати SSL Labs Server Test для перевірки класу захисту та отримання додаткової інформації про сертифікат.
На завершальному етапі нами буде протестовано роботу механізму автоматичного подовження терміну дії нашого сертифікату.
Автоматичне подовження SSL сертифікату
На відміну від багатьох платних SSL-сертифікатів, термін дії сертифікатів Центру Let’s Encrypt становить лише три місяці. І тому для безперебійної роботи сайту необхідно вчасно здійснювати оновлення сертифікату в ручному, або автоматичному режимі. У нашому випадку це завдання бере на себе клієнтська програма Certbot, здійснюючи його автоматичне оновлення за допомогою сценарію /etc/cron.d.
Для початку перевіримо статус сервісу, котрий керує вказаним сценарієм. Це можна зробити за допомогою наступної команди:
$ sudo systemctl status certbot.timer
Вихід команди може бути наступним:
Output ? certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:> Active: active (waiting) since Mon 2024-12-17 20:52:46 UTC; 4min 3s ago Trigger: Tue 2024-12-18 00:56:55 UTC; 4h 0min left Triggers: ? certbot.service Dec 17 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.
Запустимо процес оновлення сертифікату:
$ sudo certbot renew --dry-run
Вихід команди:
Output Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/my_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for my_domain and www.my_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/my_domain/fullchain.pem (success)
Можна переконатися, що будь-які помилки відсутні. Це означає, що автоматичне оновлення також буде «працювати».
У випадку появи якихось помилок при виконанні автоматичного оновлення сертифікату, на вказану вами Email-адресу буде направлятися повідомлення про необхідність оновити сертифікат до вказаної дати. Це дозволить уникнути прострочення документу при виникненні проблем із автоматичним оновленням.
Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.
Дивіться наш канал Youtube на https://www.youtube.com/freehostua.
Ми у чомусь помилилися, чи щось пропустили?
Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.
|
Дата: 18.12.2024 Автор: Олександр Ровник
|
|

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus