Изисквания
Преди да започнеш
Инсталирайте Nginx
Инсталирайте Python и Lexicon
Инсталирайте клиента acme.sh
Вземете заместващи сертификати от Let's Encrypt
Конфигурирайте уеб сървъра на Nginx
През март 2018 г. Let's Encrypt добави поддръжка за заместващи сертификати. Сертификатите със заместващи символи ви позволяват да защитите всички поддомейни от първо ниво на домейн с един сертификат. Сертификатите за заместващи символи се получават само чрез ACMEv2, който е актуализирана версия на протокола ACME. За да използвате ACMEv2 за сертификати със заместващи символи или без заместващи символи, ще ви е необходим клиент, който е актуализиран, за да поддържа ACMEv2. Един такъв клиент е acme.sh, който е клиент на протокола ACME/ACMEv2, написан чисто на език Shell (Unix shell) без никакви зависимости. Освен това домейните с заместващи знаци трябва да бъдат валидирани с помощта на типа предизвикателство DNS-01. Това означава, че трябва да промените DNS TXT записи, за да докажете контрол върху домейн, за да получите сертификат за заместващ знак.
В това ръководство обясняваме как да получите и разположите безплатни сертификати за заместващи символи от Let's Encrypt на Ubuntu 19.04 чрез използване на acme.sh
клиент, инструмент Lexicon за автоматично манипулиране на DNS записи чрез използване на Vultr API и внедряване на сертификати на уеб сървъра на Nginx.
Изисквания
- Наскоро внедрен Ubuntu 19.04 Vultr облачен сървър.
- Имате регистрирано име на домейн. Това ръководство използва
example.com
като примерен домейн.
- Уверете се, че сте задали A/AAAA и CNAME DNS записи за вашето напълно квалифицирано име на домейн (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 shell), който автоматизира процеса на получаване на подписан сертификат чрез 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
директория.
ЗАБЕЛЕЖКА : Не трябва да използвате cert файловете в ~/.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 и Vultr API. Заместващите сертификати могат да бъдат полезни, когато искате да защитите множество поддомейни от първо ниво, генерирани динамично.