LetsEncrypt SSL
Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit.
We give people the digital certificates they need in order to enable HTTPS (SSL/TLS) for websites, for free, in the most user-friendly way we can. We do this because we want to create a more secure and privacy-respecting Web.
The key principles behind Let’s Encrypt are:
- Free: Anyone who owns a domain name can use Let’s Encrypt to obtain a trusted certificate at zero cost.
- Automatic: Software running on a web server can interact with Let’s Encrypt to painlessly obtain a certificate, securely configure it for use, and automatically take care of renewal.
- Secure: Let’s Encrypt will serve as a platform for advancing TLS security best practices, both on the CA side and by helping site operators properly secure their servers.
- Transparent: All certificates issued or revoked will be publicly recorded and available for anyone to inspect.
- Open: The automatic issuance and renewal protocol will be published as an open standard that others can adopt.
- Cooperative: Much like the underlying Internet protocols themselves, Let’s Encrypt is a joint effort to benefit the community, beyond the control of any one organization.
Установка приложения
Centos
yum install epel-release -y
yum install certbot
Arch Linux
pacman -Syu certbot
Debian/Ubuntu
sudo apt-get update
sudo apt-get install letsencrypt
Получение сертификата
В силу того что в своей работе я отдаю предпочтение веб серверу Nginx все примеры будат заточены под него.
Для примера возьмем домен wiki.webko.net.ua, у него есть конфиг вида
server {
listen 212.26.146.24:80;
server_name wiki.webko.net.ua;
root /srv/http/wiki;
index index.php;
access_log /var/log/nginx/domains/wiki.webko.net.ua.log combined;
error_log /var/log/nginx/domains/wiki.webko.net.ua.error.log error;
client_max_body_size 5m;
client_body_timeout 60;
location / {
...
}
}
Для того чтобы полчуть сертификат для домена первым делом нужно удостовить LE в том что вы имеете право на запрос сертификата для домена. Я использую acme-challenge. Для упрощения админисрирования, возможно, большего хазяйства я использую шаблон для проведения удостоверения, его основная функция - переадресация всех запросов к урлу .well-known/acme-challenge/ приложению проводящему удостоверение (тоесть letsencrypt или certbot), его мы сможем подключать к любому виртуальному хосту, выглядит он так.
mkdir /etc/nginx/template
vim /etc/nginx/template/letsencrypt.conf
location ~ ^/(.well-known/acme-challenge/.*)$ {
proxy_pass http://127.0.0.1:9999/$1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Дальше подключаем его к виртуальному хосту нашего домена.
server {
listen 212.26.146.24:80;
server_name wiki.webko.net.ua;
root /srv/http/wiki;
index index.php;
access_log /var/log/nginx/domains/wiki.webko.net.ua.log combined;
error_log /var/log/nginx/domains/wiki.webko.net.ua.error.log error;
client_max_body_size 5m;
client_body_timeout 60;
include template/letsencrypt.conf; # <---
location / {
...
}
}
Перезагружаем конфиг Nginx для применения изменений.
nginx -t
nginx -s reload
Подготовка завершена, переходим непосредственно к запросу сертификата. В зависимости от вашего дистрибютива приложение может иметь разные названия (letsencrypt или certbot).
letsencrypt --agree-tos --renew-by-default --standalone --standalone-supported-challenges \
http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory \ #запуск внутреннего http сервера для проведения аутентификации
certonly \ #получаем сертификаты без автоматической правки конфигов вебсервера(возможно при помощи отдельных плагинов для LE)
-d wiki.webko.net.ua -d www.wiki.webko.net.ua \ #перечислены домены для которых запрашивается сертификат
--rsa-key-size 4096
Дальше начнется удостоверенеие, в ходе так же у вас будет запршен "контактный" емейл, для отправки вам уведомлений об окончании срока действия сертификата.
Если все прошло успешно вы увидите уведомление об успешном создании сертификатов и пути их расположения.
/etc/letsencrypt/renewal/wiki.webko.net.ua.conf - конфиг
/etc/letsencrypt/archive/wiki.webko.net.ua/ - архив сертификатов
/etc/letsencrypt/live/wiki.webko.net.ua/ - актуальные сертификаты
Следубщим шагом создадим виртуальный конфиг для нашего домена с поддержкой SSL.
# постоянный редирект на https
server {
listen 212.26.146.24:80;
server_name wiki.webko.net.ua;
return 301 https://$server_name$request_uri;
}
# конфиг виртуального хоста
server {
listen 212.26.146.24:443 ssl;
server_name wiki.webko.net.ua;
root /srv/http/wiki;
index index.php;
access_log /var/log/nginx/domains/wiki.webko.net.ua.log combined;
error_log /var/log/nginx/domains/wiki.webko.net.ua.error.log error;
# включение ssl и подключение сертификатов
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/wiki.webko.net.ua/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wiki.webko.net.ua/privkey.pem;
client_max_body_size 5m;
client_body_timeout 60;
include template/letsencrypt.conf;
location / {
...
}
}
Перезагружаем конфиг Nginx для применения изменений.
nginx -t
nginx -s reload
Теперь наш сайт доступен по https соединению, при переходе по http будет срабатывать редирект на https.