Установка certbot для получения сертификата от letsencrypt в Unix/Linux

Установка certbot для получения сертификата от letsencrypt в Unix/Linux

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

работа 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

Можно использовать данный сертификат на различных веб-сервера, но в данной статье — я приведу несколько примеров.

Если используется 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:

Команда Curl в Unix/Linux

Сохраняем, закрываем файл и перезапускаем веб-сервер:

$ 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

Запускаем:

$ certbot --config /etc/letsencrypt/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 для получения сертификата от letsencrypt в Unix/Linux» завершена.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.