У минулому році Google явно дав усім зрозуміти. що пора б уже підключати SSL сертифікати до своїх сайтів. Тепер же за замовчуванням перевага надаватиметься сайтам, які використовують захищене з'єднання. У зв'язку з цим з недавніх пір з'явилася галас навколо безкоштовних SSL сертифікатів (давно вже пора). За підтримки Linux Foundation, а також Mozilla, Facebook, Akamai, Cisco і багатьох інших іменитих гігантів IT індустрії, світ побачив проект під назвою Let's Encrypt.
Проект в першу чергу покликаний убезпечити веб, а також полегшити життя рядовим веб-розробникам (всю цю метушню з генерацій приватних ключів, CSR, підтвердженням прав на домен, налаштуванням веб-сервера і так далі звести нанівець). Більш того, SSL сертифікати. видаються Let's Encrypt, повністю безкоштовні. Є в них правда одне але, вони є базовими і термін дії обмежений до 3-х місяців (але це зовсім не проблема, так як продовження можна налаштувати автоматично).
Скажу відразу, що на свій блог я поставив саме сертифікат від Let's Encrypt.
Варто відзначити, що зараз проект знаходиться на стадії бета-тестування, тому можуть виникати помилки в роботі їх скриптів.
Весь процес роботи з сервісом відбувається за допомогою python скрипта letsencrypt. на поточний момент не для всіх дистрибутивів linux існують пакети letsencrypt, тому офіційна документація рекомендує ставити його попередньо склоніровав git репозиторій з github.
letsencrypt-auto це скрипт-обгортка навколо letsencrypt. автоматизує процес розгортання. Простіше кажучи, скрипт викачує всі необхідні залежності, піднімає окреме віртуальне оточення для Python, використовуючи virtualenv, встановлюючи в нього необхідні python-модулі при цьому не засмічуючи системний пітон. Варто зазначити, що для коректної роботи скрипта необхідні права на запис в системні директорії (sudo).
Так як скрипт покликаний максимально спростити роботу по установці сертифікатів безпеки, він підтримує систему плагінів. Наприклад, в стандартному постачанні є плагін для роботи з Apache (повноцінно функціонуючий) і nginx (поки тільки на експериментальній стадії).
Установка SSL сертифікату для Apache
Мій блог працює на зв'язці LAMP, тобто Linux, Apache, MySQL та PHP. Розробники Let's Encrypt постаралися на славу і спростили налаштування сертифіката для Apache до рівня "простіше нікуди". Весь процес зводиться до таких кроків:
- Перевірить приналежність домена
- Випустить необхідний сертифікат терміном на 90 днів
- Внесе всі необхідні настройки для веб-сервера Apache
Після всіх цих маніпуляцій мені тільки залишалося налаштувати 301 редирект (Moved Permanently) з http на https і перезавантажити веб-сервер.
Налаштування SSL сертифікатів для інших веб-серверів
У постачання letsencrypt крім плагіна для роботи з Apache є ряд інших, а саме:
Standalone
Суть standalone полягає в тому, що скрипт спробує підняти власний веб-сервер на час процедури отримання сертифікату (щоб підтвердити приналежність домена), а для цього необхідно буде відключити вже працюючий, щоб звільнити порти 80 і 443. Для більшості веб-розробників даний варіант незручний через необхідність відключення сайту.
Дана опція підходить тим, кого не влаштовує standalone. При вказівці ключа --webroot необхідно також буде вказати і директорію, де розташовуються файли, які обробляє веб-сервер.
При роботі з даною опцією необхідно налаштувати веб-сервер на читання файлів відповідним чином.
З назви можна здогадатися, що настройка і установка SSL сертифікату буде проводитися вручну :-) Мабуть, зараз це найбільш зручний варіант настройки сертифіката для nginx з огляду на "сируватий" letsencrypt nginx плагіна.
Після введення цієї команди вам необхідно буде самостійно провести маніпуляції з підтвердження домену, розмістивши файл з певним вмістом в потрібній директорії на сайті. Коли процедура створення сертифіката закінчиться, всі необхідні файли будуть лежати по наступним шляхом / etc / letsencrypt / live / $ domain. У підкаталозі live знаходяться всі найактуальніші сертифікати і ключі, тоді як keys і archive містять всі раніше створені файли.
Налаштування SSL в Nginx
Отже, якщо процедура зі створенням сертифікатів в manual режимі пройшла успішно, то у вищезгаданій директорії ми знайдемо всі необхідні файли для настройки безпечного з'єднання.
- privkey.pem - наш приватний ключ
- cert.pem - сертифікат сервера
- chain.pem - кореневої (root) і проміжний (intermediate)
- fullchain.pem - всі необхідні нам сертифікати для настройки веб-сервера.
Як же в даному випадку буде виглядати настройка Nginx?
Хлопці з letsencrypt не радять переміщати файли, тому що при продовженні сертифікату старі будуть автоматично замінені новими за тими ж шляхами, краще в цьому випадку створити символічно посилання.
Продовження SSL сертифікату
Раніше я вже згадував про те, що безкоштовні SSL сертифікати "живуть" тільки 90 днів, тому після їх закінчення необхідно буде запускати процедуру продовження, благо це теж безкоштовно :-)
Що ж собою являє процес продовження?
Як стверджують в Let's Encrypt, перед закінченням, на пошту, вказану при створенні, приходить відповідний лист-повідомлення про те, що пора б продовжити сертифікат. Щоб це зробити вручну досить запустити команду:
І слідувати інструкціям на екрані. Автоматичне ж продовження можна налаштувати використовуючи конфігураційний файл і звичайний crontab. Бажано налаштувати крон таким чином, щоб продовження відбувалося не частіше 1 разу на місяць.
Якщо ви працюєте з під Windows, то letsencrypt можна розгорнути, використовуючи Vagrant або Docker. Правда в цьому випадку для правильного налаштування веб-сервера необхідно буде вручну перемістити всі файли на сервер.
На каналі вже понад 1000 учасників, тому приєднуйтесь і Ви - DevBrain