Вимоги
Перед тим як ти почнеш
Встановіть Nginx
Встановіть Python і Lexicon
Встановіть клієнт acme.sh
Отримайте сертифікати підстановки від Let's Encrypt
Налаштуйте веб-сервер Nginx
У березні 2018 року Let's Encrypt додала підтримку сертифікатів підстановки. Сертифікати підстановки дозволяють захистити всі субдомени першого рівня домену за допомогою одного сертифіката. Сертифікати підстановки доступні лише через ACMEv2, який є оновленою версією протоколу ACME. Щоб використовувати ACMEv2 для сертифікатів із підстановкою або без підстановки, вам потрібен клієнт, який був оновлений для підтримки ACMEv2. Одним із таких клієнтів є acme.sh, клієнт протоколу ACME/ACMEv2, написаний виключно мовою Shell (оболонка Unix) без будь-яких залежностей. Крім того, домени підстановки повинні бути перевірені за допомогою типу виклику DNS-01. Це означає, що вам потрібно змінити записи DNS TXT, щоб підтвердити контроль над доменом, щоб отримати сертифікат підстановки.
У цьому посібнику ми пояснюємо, як отримати та розгорнути безкоштовні сертифікати підстановки з Let's Encrypt в Ubuntu 19.04 за допомогою acme.sh
клієнта, інструменту Lexicon для автоматичного маніпулювання записами DNS шляхом використання Vultr API та розгортання сертифікатів на веб-сервері Nginx.
Вимоги
- Нещодавно розгорнутий хмарний сервер Ubuntu 19.04 Vultr.
- У вас зареєстроване доменне ім’я. Цей посібник використовує
example.com
як приклад домену.
- Переконайтеся, що ви встановили записи DNS A/AAAA і CNAME для вашого повного доменного імені (FQDN). Ви можете ознайомитися з підручником «Вступ до Vultr DNS», якщо вам потрібно ознайомитися з концепціями DNS.
- Доступ до Vultr API увімкнено на панелі керування обліковим записом Vultr.
Перед тим як ти почнеш
Перевірте версію Ubuntu.
lsb_release -ds
# Ubuntu 19.04
Створіть новий обліковий запис користувача з sudo
доступом і бажаним іменем користувача та перейдіть на нього. Ми використовуємо johndoe
.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
ПРИМІТКА : замініть johndoe
на своє ім’я користувача.
Налаштуйте часовий пояс.
sudo dpkg-reconfigure tzdata
Переконайтеся, що ваша система Ubuntu оновлена.
sudo apt update && sudo apt upgrade -y
Встановіть необхідні пакети.
sudo apt install -y git wget curl socat
Встановіть Nginx
Встановіть веб-сервер Nginx.
sudo apt install -y nginx
Перевірте версію.
sudo nginx -v
# nginx version: nginx/1.15.9 (Ubuntu)
Встановіть Python і Lexicon
Як перший крок у процесі отримання сертифікатів підстановки від Let's Encrypt за допомогою acme.sh і Vultr API, вам потрібно встановити Python і Lexicon . Lexicon — це пакет Python, який надає спосіб стандартизованим способом маніпулювати записами DNS на кількох постачальниках DNS.
Встановіть Python, якщо він ще не встановлений у вашій системі.
sudo apt install -y python3
Підтвердьте встановлення, перевіривши версію.
python3 --version
# Python 3.7.3
Встановіть інструмент Lexicon. Лексикон — це інструмент Python, який дозволяє вам стандартизовано маніпулювати записами DNS на різних провайдерах DNS.
sudo apt install -y lexicon
Перевірте версію Lexicon.
lexicon --version
# lexicon 3.0.8
Встановити acme.sh
клієнт
Acme.sh
це клієнт протоколу ACME, написаний виключно мовою Shell (оболонка Unix), який автоматизує процес отримання підписаного сертифіката через Let's Encrypt. Він підтримує ACME v1 і ACME v2, і, що найголовніше, він підтримує ACME v2 підстановочних сертифікатів. У цьому розділі ми встановлюємо скрипт Acme.sh.
ПРИМІТКА. Рекомендується використовувати root
користувача для встановлення acme.sh
, хоча він не вимагає root
/ sudo
доступу.
Перейдіть на root
користувача зі звичайного користувача, якщо ви його створили.
sudo su - root
Завантажте та встановіть acme.sh
.
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail "[email protected]"
source ~/.bashrc
cd
Перевірте версію.
acme.sh --version
# v2.8.2
Отримайте сертифікати підстановки від Let's Encrypt
Щоб отримати сертифікат підстановки, ми можемо використовувати лише метод перевірки DNS. Ми використовуємо Lexicon і Vultr DNS API для маніпулювання записами TXT DNS.
Отримайте сертифікати підстановки RSA та ECC для свого домену.
# Configure your API key and username
export PROVIDER=vultr
export LEXICON_VULTR_USERNAME="[email protected]"
export LEXICON_VULTR_TOKEN="XXXXXXXXXXXXXXX"
# RSA 2048
acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength 2048
# ECC 256
acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength ec-256
ПРИМІТКА . Не забудьте замінити example.com
ім’ям вашого домену та замінити значення заповнювача Vultr API на свої власні.
Після виконання попередніх команд ваші сертифікати та ключі знаходяться в:
- Для RSA:
~/.acme.sh/example.com
каталог.
- Для ECC/ECDSA:
~/.acme.sh/example.com_ecc
каталог.
ПРИМІТКА . Ви не повинні використовувати файли сертифікатів у ~/.acme.sh/
папці, вони призначені лише для внутрішнього використання, структура каталогів може змінитися в майбутньому.
Щоб перерахувати свої сертифікати, ви можете запустити:
acme.sh --list
Створіть папку для зберігання ваших сертифікатів у виробництві. Ми використовуємо /etc/letsencrypt
каталог.
sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc
Встановити/скопіювати сертифікати для використання у виробництві на вашому сервері.
# RSA
acme.sh --install-cert -d example.com \
--cert-file /etc/letsencrypt/example.com/cert.pem \
--key-file /etc/letsencrypt/example.com/private.key \
--fullchain-file /etc/letsencrypt/example.com/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx.service"
# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc \
--cert-file /etc/letsencrypt/example.com_ecc/cert.pem \
--key-file /etc/letsencrypt/example.com_ecc/private.key \
--fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx.service"
Тепер, коли ми успішно отримали сертифікати підстановки від Let's Encrypt, нам потрібно налаштувати веб-сервер Nginx. Усі сертифікати автоматично поновлюються кожні 60 днів.
Після отримання та встановлення сертифікатів у бажаному місці ви можете вийти з root
користувача до звичайного sudo
користувача та продовжувати керувати своїм сервером за допомогою, sudo
якщо потрібно.
exit
Запустіть sudo vim /etc/nginx/sites-available/example.com.conf
і заповніть файл таким вмістом. Замініть усі входження example.com
власного доменного імені.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com *.example.com;
root /var/www/example.com;
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com/private.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.key;
}
Активуйте нову example.com.conf
конфігурацію, зв’язавши файл із sites-enabled
каталогом.
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Перевірте конфігурацію Nginx.
sudo nginx -t
Перезавантажте Nginx.
sudo systemctl reload nginx.service
Це воно. Ми розгорнули сертифікати підстановки в Nginx, використовуючи acme.sh, Lexicon і API Vultr. Сертифікати підстановки можуть бути корисними, якщо ви хочете захистити декілька субдоменів першого рівня, створених динамічно.