​Як отримати SSL сертифікат?


Перший свій сертифікат я отримав в 2017 році від startssl.com, але невдовзі дізнався, що цей центр сертифікації видавав сертифікати задніми числами і його кореневий сертифікат видалили основні браузери. І тому я мені довелося зробити сертифікат у letsencrypt.org. Отримати сертифікат у них можна двома шляхами - за допомогою бота certbot, або в ручному режимі (manual mode) на сайті.

Я ж покажу як це робиться в автоматичному режимі, за допомогою бота certbot

Для початку, за допомогою команди, завантажимо його:

wget https://github.com/letsencrypt/letsencrypt/archive/master.zip"

Розпакуємо:

unzip master.zip

Перейдемо в директорію бота:

cd letsencrypt-master

Дамо права на виконання

sudo chmod +x letsencrypt-auto

Тепер можна почати процедуру отримання сертифіката! Для цього потрібно відключити твій веб-сервер і виконати команду

./letsencrypt-auto certonly --standalone --agree-tos -m [email protected] -d css.in.ua -d www.css.in.ua

Де:

  • --agree-tos — дозволяє автоматично погоджуватися з усіма умовами (Видалити цей ключ, якщо хочеш прочитати всі умови і правила);
  • -m [email protected] — Твоя пошта. Ця пошта буде використовуватися для подовження та відновдення сертифіката;
  • -d css.in.ua — через ключ -d ти вказуєш, для яких доменів ти хочеш отримати сертифікат. Починати треба з основного домена, а далі всі піддомени.

Під час генерації сертифіката бот виступить в ролі веб-сервера на який буде відправлено спеціальний запит, ось чому важливо, щоб порти 80 і 443 були вільними і саме бот їх слухав, а не твій веб-сервер. Саме таким чином буде підтверджено, що ти є власником свого домену.

В процесі генерації бот запропонує встановити деякі пакети, погоджуйся, без них нічого не вийде. Коли сертифікат буде створено - з’явиться повідомлення:

IMPORTANT NOTES:
— If you lose your account credentials, you can recover through
e-mails sent to [email protected]
— Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/css.in.ua/fullchain.pem. Your
cert will expire on 2017-03-12. To obtain a new version of the
certificate in the future, simply run Let’s Encrypt again.
— Your account credentials have been saved in your Let’s Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let’s
Encrypt so making regular backups of this folder is ideal.
— If like Let’s Encrypt, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt: <a href="https://letsencrypt.org/donate">https://letsencrypt.org/donate</a>
Donating to EFF: <a href="https://eff.org/donate-le">https://eff.org/donate-le</a>

Після цього ти можеш знайти свій сертифікат в директорії /etc/letsencrypt/live/

  • cert.pem - Власне це те, за що ти так боровся - SSL сертифікат.
  • privkey.pem - приватний ключ для сертифіката.
  • chain.pem - ланцюжок сертифікатів.
  • fullchain.pem - Повна зв’язка сертифікатів (просто об’єднаний chain.pem та cert.pem в одному фалі).

Якщо з’явилася помилка “Failed to connect to host for DVSNI challenge”, то потрібно, знайти процес, що слухає вище вказані порти і зупинити його.

Якщо у тебе в якості веб-сервера apache, то використовуй наступну команду

service apache2 stop && ./letsencrypt-auto certonly --standalone --agree-tos -m [email protected] -d css.in.ua -d <a href="http://www.css.in.ua">www.css.in.ua</a> && service apache2 start

Вона автоматично зупинить твій веб-сервер, а після генерації сертифіката твій веб-сервер автоматично запуститься. Це максимально зменшить недоступність твого сайту під час генерації сертифіката.

Продовження терміну дії сертифіката

Оскільки letsencrypt видає сертифікати на три місяці, то нам періодично потрібно буде їх продовжувати. Робиться це за допомогою команди.

service apache2 stop && .letsencrypt-auto renew && service apache2 start

Я виконую ці команді з періодичністю в один місяць. Частіше не має сенсу.

Додатково!

Маленький відступ. Це ми згенерували сертифікат за допомогою клієнта letsencrypt. В інших атестаційних центрах процес отримання сертифіката зовсім інший.

Розповім про це в двух словах.

Перше, що потрібно зробити, щоб отримати SSL сертифікат - потрібно сформувати спеціальний запит на випуск сертифіката, так званий (Certificate Signing Request).

Робиться це за допомогою команди:

openssl req -new -newkey rsa:2048 -nodes -keyout /etc/ssl/private.key -out /etc/ssl/domain.csr

При формуванні цього запиту тобі буде поставлено ряд питань, для уточнення деталей про тебе та твій домен. Після завершення буде створено два криптографічні ключі: приватний ключ - private.key і публічний ключ.

Публічний ключ не є секретним і він поміщається в запит CSR - domain.csr. Цей ключ містить деякі дані про твій веб-сайт (домен, країна, пошта і т.п.), переглянути їх можна за допомогою цього веб-сервісу. Обов’язково скористайся цим сервісом, та перевір введені дані, можливо ти вказав хибну країну чи свою пошту.

На відмінну від запиту на формування сертифіката (domain.csr) приватний ключ (private.key) ти нікому не показуєш та не передаєш. Це важливо, адже тоді дехто ворожий зможе декодувати дані чи підмінити якусь інформацію.

Після того як CSR сформований ти можеш приступати до оформлення заявки на випуск сертифіката. Під час цього процесу центр сертифікації зробить перевірку введених тобою даних і після успішної перевірки випустить SSL сертифікат для твого домену, що і дасть можливість тобі використовувати HTTPS протокол.

Але це на словах просто, на ділі тобі доведеться підтвердити свій тел. номер, підтвердити права на домен, створивши на ньому свою пошту, чи виконати інше брутальне завдання. У кожного сертифікаційного центру свої процедури знущання (перевірки), тому вважаю, що бот від letsencrypt найліпший варіанті та найшвидший!

Отже сертифікат у тебе в руках! Тепер ти готовий налаштувати свій веб-сервер для роботи через прошарок безпеки. І про це я розповім тобі в наступній частині.


  web, https, ssl     02-04-2017