Let’s Encrypt — это компания которая предоставляет халявные сертификаты. Она возникла со стартапа и постепенно преобразовалась в независимый Центр Сертификации. Данная компания, работает со следующими IT-корпорациями: HP, Google, Facebook,Cisco, Mozilla и ряд других. Как я уже говорил, проект возник со стартапа в 2012-м году, а создателями являются 2-е сотрудников Mozilla.
Почему SSL сертификаты от Let’s Encrypt пользуются популярностью?
- Во-первых, — они халявные и за них не нужно платить.
- Во-вторых, — выпуск сертификатов выполняется через консоль ( что упрощает жизнь) в автоматическом режиме.
- В-третьих, — качество выпуска данных сертификатов, не хуже от других известных Центров Сертификации( Comodo, Geotrust, Symantec и т.д).
Недостатки SSL-сертификатов от Let’s Encrypt
- Бесплатный SSL-сертификат не вечен.
- Не все домены можно защитить бесплатным SSL-сертификатом.
Установка certbot для получения сертификата от letsencrypt в Unix/Linux
Шифрование Let’s — это новый центр сертификации (CA), который обеспечивает простой способ получения и установки бесплатных TLS/SSL-сертификатов, что позволяет использовать зашифрованный HTTPS на веб-серверах. Имеется certbot, который автоматизирует все и упрощает использование.
Вот пример того, как же работает letsencrypt с веб-сервером:
На этом примере, я показал как работает certbot с letsencrypt для nginx. Но можно использовать apache или любой другой веб-сервер.
# true | openssl s_client -showcerts -connect linux-notes.org:443 2>&1 | openssl x509 -text | grep -o 'DNS:[^,]*' | cut -f2 -d:
Установка Certbot в Unix/Linux
Приведу пример установки на различные ОС.
Установка Certbot в Ubuntu:
Установим вспомогательный пакет:
$ apt-get install software-properties-common -y
Добавляем репозиторий:
# add-apt-repository ppa:certbot/certbot
Обновимся:
# apt-get update -y
Устанавливаем Certbot:
# apt-get install certbot -y
Установка Certbot в Debian:
Добавляем репозиторий:
# echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list
Обновимся:
# apt-get update -y
Устанавливаем Certbot:
# apt-get install certbot -t jessie-backports
Не приходилось еще ставить и возможно данная инструкция не будет работать на новых версиях debian. Но внизу будут представлено решение ( универсальное) для Unix/Linux ОС.
Установка Certbot в Mac OS X:
Устанавливаем homebrew, если не знаете как, то вот статья:
Установка homebrew на Mac OS X
Выполним поиск пакета:
$ brew search certbot
Выполняем установку:
$ brew install certbot
Установка Certbot в RedHat/CentOS/Fedora:
Подключаем репозиторий EPEL:
Как включить EPEL репозиторий на CentOS
И потом, выполняем установку:
# yum install certbot -y
Установка Certbot в Gentoo:
Установим установку:
$ emerge -av app-crypt/certbot
Установка Certbot в Arch Linux:
Установим установку:
# pacman -S certbot
Установка Certbot в FreeBSD:
Установим установку:
# cd /usr/ports/security/py-certbot && make install clean
Установка Certbot на другие Unix/Linux ОС:
-===СПОСОБ 1 — используем файл===-
Выполняем:
# wget -O /usr/local/bin/certbot-auto https://dl.eff.org/certbot-auto # chmod +x /usr/local/bin/certbot-auto # ln -s /usr/local/bin/certbot-auto /usr/local/bin/certbot
-===СПОСОБ 2 — используем git===-
Ставим гит и выполняем:
# git clone https://github.com/certbot/certbot /usr/local/letsencrypt
-===СПОСОБ 3 — Другие решения===-
Вот, можно ознакомится:
$ links https://letsencrypt.org/docs/client-options
Установку выполнили, переходим к установке и настройке сертификатов.
Настройка сертификат от letsencrypt
Можно использовать данный сертификат на различных веб-сервера, но в данной статье — я приведу несколько примеров.
Чтобы получить помощь, можно использовать:
$ certbot --help
Регистрируем бота:
# certbot register --email your_email_addr_here@linux-notes.org
Если нужно добавить поддомен или домен в сертификат
Если забыли добавить поддомен ( ну скажем www — это как пример), или может, понадобилось добавить поддомен для какой-то нужды, то я сейчас покажу как можно это сделать:
# certbot certonly -d linux-notes.org -d www.linux-notes.org -d shop.linux-notes.org
Отвечая на вопросы, вы сгенерируете себе сертификат для поддоменов и он будет единый для всех.
Если добавить нужный ключ, то можем избавиться от вопросов, например:
# certbot certonly --expand -d linux-notes.org -d www.linux-notes.org -d shop.linux-notes.org
Можно еще использовать вебхук:
# letsencrypt certonly -a webroot --webroot-path=/home/www/windows-notes/public_html/ -d windows-notes.org -d www.windows-notes.org && systemctl reload nginx.service
ЗАМЕЧАНИЕ: Один такой сертификат может включать в себя до 100 поддоменов в одном сертификате!
Если используется APACHE
Если у вас Apache2, открываем:
# vim /etc/apache2/conf-available/certbot.conf
И прописываем:
Alias /.well-known/ /home/www/linux-notes/public_html/.well-known/ <Directory /home/www/linux-notes/public_html/.well-known/> Satisfy any </Directory>
Затем, подключаем модуль в апач:
# a2enconf certbot
Создаем папку для работы:
$ mkdir -p /home/www/linux-notes/public_html/.well-known
и перезапускаем сервер:
# service apache2 reload
И выполним проверку:
# mkdir -p /home/www/linux-notes/public_html/.well-known/.well-known/acme-challenge # echo Success > /home/www/linux-notes/public_html/.well-known/acme-challenge/test.html $ curl -L http://linux-notes.org/.well-known/acme-challenge/test.html && rm /home/www/linux-notes/public_html/.well-known/acme-challenge/example.html
Но я не проверял работу на апаче!
Если используется NGINX
Т.к у меня установлен и используется nginx в качестве веб сервера, то я приведу настройку сертификата именно для него.
Открываем конфиг:
$ vim /etc/nginx/conf.d/linux-notes.org.conf
И прописываем к уже имеющемуся конфигу следующие строки:
location ~ /\.($|!well-known/acme-challenge/*) { deny all; }
PS: Если вы получаете все файлы с папки ( можно проверить curl-ом)с ограничением в 10 переадресаций:
$ curl --location --max-redirs 10 http://linux-notes.org/.well-known/acme-challenge/index.php
ИЛИ:
$ curl --head --silent --location --max-redirs 10 http://linux-notes.org/.well-known/acme-challenge | grep ^HTTP
Если это так, то Boulder сможет получить все эти файлы. Так же, вы не должны создавать никаких ограничений по IP.
Вот полезное чтиво по CURL:
Сохраняем, закрываем файл и перезапускаем веб-сервер:
$ systemctl reload nginx
Или:
# service nginx reload
Уже имеется в системе certbot, и сейчас можно прогнать тестовый запуск:
# certbot certonly --dry-run -d linux-notes.org -d www.linux-notes.org
Устанавливаем сертификат вручную (первый раз):
# certbot certonly --webroot --webroot-path=/home/www/linux-notes/public_html/ --email solo.metal@bigmir.net -d linux-notes.org -d www.linux-notes.org
Или:
# certbot certonly --webroot -w /home/www/linux-notes/public_html/ --email solo.metal@bigmir.net -d linux-notes.org -d www.linux-notes.org
Ключи:
- —webroot — Плагин для работы ( получения) с сертификатом. Можно использовать standalone.
- —standalone — Плагин для работы ( получения) с сертификатом. Можно использовать webroot.
- —email — Задаем почту. Она будет отображаться в сертификате.
- -w — С помощью данного ключа, можно указать директорию где лежит сайт.
- -d — Задаем доменное имя ( можно использовать данную опцию несколько раз) для которого будет сгенерирован сертификат.
После выполения команды что выше, в папке /etc/letsencrypt/live/linux-notes.org/ должны быть следующие файлы:
- cert.pem — Сертификат вашего домена.
- chain.pem — Сертификат Let’s Encrypt цепи.
- fullchain.pem — Это сояитание cert.pem и chain.pem.
- privkey.pem — Закрытый ключ вашего сертификата.
Каждый раз выполнять данное действие не то что, сложно — а скорее глупо, для этого имеется крон. И сейчас я, добавлю команду на выполнения в автоматическом режиме, которая будет обновлять сертификат ( если он просрочился):
# crontab -e -uroot
И прописываем:
0 5 * * * /usr/bin/certbot renew --quiet --renew-hook "systemctl reload nginx"
После этого действия, certbot будет запущен в 5.00 ( каждый день) и будет проверять состояние сертификата. При истечении срока, он будет продлен автоматически.
Генерация dhparam (группы Диффи-Хеллмана), для этого выполняем:
# openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
И так, все уже имеется. Открываем конфиг веб сервера:
# vim /etc/nginx/conf.d/linux-notes.org.conf
И приводим к виду:
ssl_certificate /etc/letsencrypt/live/linux-notes.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/linux-notes.org/privkey.pem; ssl_dhparam /etc/nginx/ssl/dhparam.pem;
Так же, я внес в настройку certbot-а. Открываем:
# vim /etc/letsencrypt/cli.ini
И прописал:
authenticator = webroot webroot-path = /home/www/linux-notes/public_html post-hook = systemctl reload nginx.service text = True
Проверяем, всели в порядке:
# nginx -t
И выполняем релоад:
# service nginx reload
Собственно — это все!
После всех этих действий, можно проверить когда же истекает созданный сертификат:
# openssl s_client -connect linux-notes.org:443 2>/dev/null | openssl x509 -noout -enddate
PS: Больше полезных команд по OpenSSL можно найти тут:
Примеры использования OpenSSL в Unix/Linux
Это все хорошо, но если имеется несколько доменов. Как быть? Я нашел решение, приведу его ниже.
Создаем конфиг:
# vim /etc/letsencrypt/windows-notes.org.conf
Прописываем:
# the domain we want to get the cert for; # technically it's possible to have multiple of this lines, but it only worked # with one domain for me, another one only got one cert, so I would recommend # separate config files per domain. domains = windows-notes.org # increase key size rsa-key-size = 2048 # Or 4096 # the current closed beta (as of 2015-Nov-07) is using this server server = https://acme-v01.api.letsencrypt.org/directory # this address will receive renewal reminders email = solo.metal@bigmir.net # turn off the ncurses UI, we want this to be run as a cronjob text = True # authenticate by placing a file in the webroot (under .well-known/acme-challenge/) # and then letting LE fetch it authenticator = webroot webroot-path = /home/www/windows-notes/public_html/
PS: Замените параметры на свои!
Создаем папку:
# mkdir -p /home/www/windows-notes/public_html/.well-known/acme-challenge # chown -R apache. /home/www/windows-notes/public_html/.well-known # chmod 775 /home/www/windows-notes/public_html/.well-known && chmod 775 /home/www/windows-notes/public_html/.well-known/acme-challenge
Если это новый сайт и нет сертификатов, нужно запустить:
$ letsencrypt certonly -a webroot --webroot-path=/home/www/windows-notes/public_html/ -d windows-notes.org -d www.windows-notes.org
Потом, запускаем:
$ certbot --config /etc/letsencrypt/renewal/windows-notes.org.conf certonly
НЕ ЗАБЫВАЕМ ПРОПИСАТЬ ВСЕ НЕОБХОДИМОЕ В КОНФИГ-ФАЙЛЕ САМОГО NGINX!
Создадим баш-скрипт:
$ vim /home/captain/renew‑letsencrypt.sh
и прописываем:
#!/bin/sh certbot --config /etc/letsencrypt/windows-notes.org.conf certonly if [ $? -ne 0 ] then ERRORLOG=`tail /var/log/letsencrypt/letsencrypt.log` echo -e "The Let's Encrypt cert has not been renewed! \n \n" \ $ERRORLOG else nginx -s reload fi exit 0
И, конечно же — пропишем в кроне:
$ crontab -e -uroot
Следующий текст:
0 0 1 JAN,MAR,MAY,JUL,SEP,NOV * /home/captain/renew-letsencrypt.sh
и так для каждого сайта.
Если вы хотите удалить сертификат с вашего сервера, его можно аннулировать с помощью подкоманды. Команда ниже может использоваться, чтобы отменить определенный сертификат. Замените имя_домена доменом, сертификат которого вы хотите отозвать:
# certbot revoke --cert-path /etc/letsencrypt/live/имя_домена/cert.pem
Процесс не дает подтверждения по завершении, но если вы выполните его снова, вы получите сообщение о том, что сертификат уже отозван.
А на этом у меня все, статья «Установка certbot для получения сертификата от letsencrypt в Unix/Linux» завершена.