Yet another инструкция по получению ssl-сертификата Let’s Encrypt / Хабр

Yet another инструкция по получению ssl-сертификата Let's Encrypt / Хабр Сертификаты
Содержание
  1. Основные преимущества
  2. Let’s encrypt начал выдавать wildcard сертификаты
  3. Устанавливаем официальный клиент Let’s Encrypt
  4. Настраиваем механизм автоматического обновления сертификатов
  5. PROFIT!
  6. Cert-manager
  7. Getting help
  8. №1. самоподписанный сертификат
  9. №3. wildcard le с валидацией через dns
  10. №4. использование специальных аннотаций ingress
  11. Obtaining and renewing let’s encrypt ssl certificate
  12. Without shell access
  13. Yet another инструкция по получению ssl-сертификата let’s encrypt
  14. Выдача let’s encrypt
  15. Настройка клиента let’s encrypt
  16. О недостатках let’s encrypt
  17. Обновление сертификатов
  18. Получение сертификата без использования веб-сервера
  19. Получение сертификата с использованием nginx
  20. Получение сертификатов с использованием отдельного сервера хранения
  21. Пример обновления сертификатов веб-сервера из хранилища сертификатов
  22. Пример перезапуска nginx при обновлении сертификатов
  23. Программная реализация
  24. Требования
  25. Устанавливаем ssl сертификат let’s encrypt (инструкция)
  26. Вместо заключения

Основные преимущества

бесплатно:
любой владелец сайта (в частности, доменного имени) может получить и установить доверенный TLS-сертификат Let’s Encrypt (TLS — наследник SSL);
автоматизация:
все функции установки, конфигурации и обновления проводятся в автоматическом режиме;
безопасность:
все методы шифрования Let’s Encrypt отвечают текущим стандартам;
прозрачность:
публичная доступность информации о выпуске и отзыве каждого сертификата для любого желающего;
свободно:
будет использован принцип open standard для протоколов взаимодействия с CA (certificate authority).

Let’s encrypt начал выдавать wildcard сертификаты

Let’s Encrypt перешагнул важную веху — с 14 марта каждый может получить бесплатный SSL/TLS сертификат вида *.example.com. Пример установленного сертификата:

https://subdomain.baur.im
https://any-text.baur.im

Вчера Let’s Encrypt официально объявил о запуске ACMEv2 (Automated Certificate Management Environment), который наконец позволяет получить wildcard сертификат. Изначально планировалось начать их выдачу в январе, однако запуск перенесли из-за обнаруженных проблем.

Получение wildcard сертификата сейчас возможно только через DNS challenge, где необходимо временно создать TXT запись вида _acme-challenge.example.com с определенным значением.

Официальный клиент Certbot и некоторые другие клиенты для автоматического обновления сертификатов уже поддерживают staging ACMEv2, версии для production на подходе. И чтобы автоматически пройти DNS challenge уже есть несколько специальных Certbot плагинов. Разумеется, скоро их будет еще больше, в том числе и для сторонних клиентов.

В качестве простейшего примера я вручную получил сертификат на домен, которым владею — baur.im, через браузерный клиент https://www.sslforfree.com. Если я хочу использовать один и тот же сертификат как для суб-доменов, так и для самого домена, то это надо указать явно: baur.im *.baur.im (картинки кликабельны):

кликабельно

Пройдя дальше, предлагается пройти два DNS challenge.

кликабельно

Добавляем обе запрашиваемые TXT записи на суб-домен _acme-challenge.baur.im
кликабельно

И можно скачивать сертификат, который будет действовать 3 месяца.

кликабельно

Теперь эти TXT записи можно удалить. В этом примере для любого суб-домена nginx возвращает статичный html: https://habrahabr.baur.im/.

Устанавливаем официальный клиент Let’s Encrypt

Удобнее всего это сделать из дерева портов системы.

Настраиваем механизм автоматического обновления сертификатов

Все сертификаты, выдаваемые Let’s Encrypt имеют срок действия в 90 дней и это его второй относительный минус. Столь короткий срок, равно как и отсутствие возможности использования wildcard, обусловлены заботой о повышении уровня безопасности сертифицируемых доменов.
Обновление всей базы полученых SSL сертификатов производится простой командой.

PROFIT!

Статья была полезной? Тогда прошу не стесняться и поддерживать деньгами через PayPal или Яндекс.Деньги.

Cert-manager

— специальный проект для Kubernetes, представляющий собой набор CustomResourceDefinitions (отсюда

на минимально поддерживаемую версию K8s — v1.12) для конфигурации CA (удостоверяющих центров) и непосредственного заказа сертификатов. Установка CRD в кластер тривиальна и

к применению одного YAML-файла:

Getting help

If you have questions about selecting an ACME client, or about using a particular client, or anything else related to Let’s Encrypt, please try our helpful community forums.

№1. самоподписанный сертификат

Ресурс Issuer будет выглядеть так:

apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
  name: selfsigned
spec:
  selfSigned: {}

А чтобы выпустить сертификат, необходимо описать ресурс

Про сертификаты:  Все продукты Tom Ford TOM FORD – купить по ценам от 1020 рублей в интернет-магазине РИВ ГОШ | Новинки, отзывы

Certificate

, где указывается, как произвести выпуск (см. раздел

issuerRef

ниже) и где размещен приватный ключ (поле

secretName

). После этого в Ingress потребуется сослаться на этот ключ (см. раздел

tlsspec

№3. wildcard le с валидацией через dns


Усложним задачу, выписав сертификат сразу на все поддомены сайта и воспользовавшись на этот раз DNS-проверкой (через CloudFlare).

Для начала получим в панели управления CloudFlare токен для работы через API:

  1. Profile → API Tokens → Create Token.
  2. Выставляем права доступа следующим образом:
  3. Копируем полученный после сохранения токен (например: y_JNkgQwkroIsflbbYqYmBooyspN6BskXZpsiH4M).

Создадим Secret, в котором будет храниться этот токен, и сошлемся на него в Issuer:

№4. использование специальных аннотаций ingress


Помимо прямого пути по созданию сертификатов в cert-manager есть возможность воспользоваться компонентом под названием

и явно не создавать ресурсы

Certificate

. Идея заключается в том, что с помощью специальных аннотаций Ingress’а сертификат будет автоматически заказан с помощью указанного в них

Issuer

. В результате получается примерно следующий ресурс Ingress’а:

Obtaining and renewing let’s encrypt ssl certificate

Не так давно в промышленную эксплуатацию был запущен центр сертификации Let’s Encrypt.

От всех прочих провайдеров SSL сертификатов его отличает две главные особенности.

Во-первых, Let’s Encrypt позволяет получить (и в ряде случаев даже установить) полученный сертификат в вашу систему в автоматическом режиме, а, во-вторых, сделать это совершенно бесплатно.

Сочетание этих двух факторов даёт возможность легко получить, быстро установить и забыть об обновлении полученного (одного или нескольких) SSL сертификатов в будущем.

Итак, небольшой how-to который был подготовлен на базе настройки этого самого блога.

Without shell access

The best way to use Let’s Encrypt without shell access is by using built-in support
from your hosting provider. If your hosting provider offers Let’s Encrypt
support, they can request a free certificate on your behalf, install it, and
keep it up-to-date automatically.

Check our list of hosting providers
to see if yours is on it. If so, follow their documentation to set up your
Let’s Encrypt certificate.

If your hosting provider does not support Let’s Encrypt, you can contact them to
request support. We do our best to make it very easy to add Let’s Encrypt
support, and providers are often happy to hear suggestions from customers!

Yet another инструкция по получению ssl-сертификата let’s encrypt

Тема получения сертификата Let’s Encrypt уже подымалась на хабре (см.

тут

), да и в сети можно найти много рецептов разного качества.

Читал я и ужасался: одни пишут, что то нужно nginx или apache остановить («на пару минуточек всего»), другие предлагают файлы подкладывать в папку веб-сервера (в соседней ssh-сессии), третьи — о том, как важно соблюсти правильный Content-type для файлов проверки домена…

Давайте попробуем обойтись без всего этого: чтобы не было мучительно больно ни на стадии установки, ни очередном продлении — даже если придётся обновлять сразу много доменов. Собственно, вот и вся цель моей небольшой заметки: это не пошаговый степ-бай-степ, не длинная теоретическая статья о том, как функционирует Let’s Encrypt — просто описывается правильный на мой взгляд подход, который будет правилен для конфигурации любой сложности.

Вся суть в двух словах: пусть Let’s Encrypt запустит веб-сервер на 9999 порту, а мы допишем конфиг nginx, чтобы он пробросил запрос на этот бекенд. Кому интересны детали — прошу под кат

Установка Let’s Encrypt в настоящее время рекомендуется из репозитория на гитхабе:

git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt

Для некоторых операционок уже есть готовые пакеты (более того — вместо команды letsencrypt-auto (которая по сути есть лишь обёртка для letsencrypt) можно использовать letsencrypt), но установка из репозитория меня, как программиста вполне устраивает.

Про сертификаты:  Раздел 5. Операции с ценными бумагами и производными финансовыми инструментами | ГАРАНТ

Далее — нужно подготовить наш сервер.

В принципе, всё, что от нас требуется — это чтобы по адресу mysubdomain.mydomain.tld/.well-known/acme-challenge/6il4rb2ErDWuBnUsTw_qrJc_tXGNv43p2a4kQQc0CvE отдавался заранее определённый контент с нужными заголовками.

Переложим эту работу на сам Let’s Encrypt: пусть сам подымет на 127.0.0.1:9999 собственный веб-сервер, а мы — лишь допишем в конфиг nginx правило для проброса запросов на этот бекенд. Не нужно ни останавливать ничего, ни тем более создавать файлы вручную.

Итак. Создаём файл /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;
}

И подключим в конфиг-файлы нужных поддоменов:

     include template/letsencrypt.conf;

Собственно, это всё. Дальше можно запустить одну-единственную команду — собственно запустить Let’s encrypt:

letsencrypt-auto --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d mydomain.tld -d www.mydomain.tld -d i1.mydomain.tld -d i2.mydomain.tld

Здесь я получаю сертификат сразу для четырёх поддоменов, указываю, что нужно запустить веб-сервер на порту 9999, согласиться с лицензионным соглашением. (В принципе, можно указать в командной строке е-мейл, чтобы вообще не пришлось в интерактивный режим входить и довносить эту информацию: читайте описание ключей в документации)

В принципе, больше описывать нечего. Как внести сертификат в конфиг-файл nginx достаточно хороших и правильных описаний.

Единственное — осталось добавить в cron команду автоматического продления:

letsencrypt-auto renew >> /dev/null 2>&1

В getting-started приведены другие примеры скриптов обновления, рекомендую посмотреть: можно предусмотреть допустим отправку письма в случае, если обновление закончилось неудачей или автоматически рестартовать демон веб-сервера.

Вот и всё. От себя добавлю, что очень не люблю быть в первых рядах новой технологии («пока не выйдет первый сервис-пак — нет смысла обновлять винду на новую»), но в принципе, вижу, что Let’s Encrypt уже можно потихоньку начинать использовать в продакшн.

PS В качестве основы для своей заметки я взял статью Дмитрия из его блога. Не знаю, есть ли он на хабре, в любом случае от меня — большое спасибо.

Выдача let’s encrypt

Запрос на Let’s Encrypt желательно выполнить на сервере с Zimbra, чтобы получить сертификат SSL, CA Intermediate и Private Key. Для этого необходимо остановить службу почтового сервера (порты 80 и 443):

1. Останавливаем службы.

zmproxyctl stop zmmailboxdctl stop

2. Загружаем пакет Let’s Encrypt и заходим в каталог letencrypt:

Примечание. В RedHat и CentOS 6 перед установкой вам нужно будет включить репозиторий EPEL.

Настройка клиента let’s encrypt

Установите клиент Let’s Encrypt:

О недостатках let’s encrypt

В конце этой статьи хотим отметить, что несмотря на все преимущества данного типа сертификата, существуют недостатки, которые нужно учитывать при выборе SSL:

  1. Бесплатный сертификат Let’s Encrypt кратковременный и рассчитан на срок не более 90 дней, в отличии от платного, который можно выпустить сроком до 3 лет. Вы можете , конечно, перевыпускать сертификат каждые 3 месяца, но обязательно следите за сроками. Перевыпуск сертификата можно осуществить тремя способами: вручную, за счет настройки планировщика задач cron или автоматически.

    Если вы выбрали способ обновления вручную, то следите четко за сроками и вовремя перевыпускайте сертификат. Иначе рискуете получить наплыв недовольных пользователей сайта и их последующий отток.

    Планировщик задач cron – это способ настройки автоматического обновления. Способ хорош для тех, кто владеет навыками администрирования Linux и умеет работать с кронами. Нужно еще учитывать, что в работе крона не исключены ошибки, которые могут помешать перевыпуску сертификата. Вывод: следить за обновлением все равно придется.

    Автоматическое обновление. Этот способ подразумевает, что вы принимаете автоматические настройки, предусмотренные Центром сертификации. И тут нужно понимать, что вы таким образом, даете свое согласие на то, что ЦС может вносить изменения по своему усмотрению в ПО и настройки вашего сервера.

  2. Не все домены можно защитить бесплатным Let’s Encrypt. Данный сертификат рассчитан только на защиту одного домена без проверки компании, так называемые DV SSL (Domain Validation).

    Так, при помощи Let’s Encrypt нельзя создать следующие типы сертификатов:

    – WildCard сертификат для защиты поддоменов определённого домена;
    – Сертификаты OV SSL(organization validation), предполагающие проверку не только домена, но и компании;
    – Сертификаты EV SSL (extended validation). Сертификат с максимальной степенью защиты и зелёной адресной строкой браузера;
    – Multi-Domain сертификат типа UCC;

  3. Важный момент — нет никаких финансовых гарантий использования Let’sEncrypt . Если вдруг произойдет взлом бесплатного сертификата, то денежную компенсацию никто вам не предоставит.
Про сертификаты:  Экспорт, импорт и таможенное оформление роз

Обновление сертификатов

1. Останавливаем Zimbra.

/etc/init.d/zimbra stop

2. Получаем новые сертификаты и запускаем почтовый сервер.

Получение сертификата без использования веб-сервера

Данная схема подходит, если на указанной машине нет веб-сервера.

Выполните следующую команду для получения сертификата для домена

example.org

Здесь и далее по тексту вместо

example.org
подставьте свой домен. Сертификат и закрытые ключи будут находиться в каталоге
/etc/letsencrypt/live/example.org/

Получение сертификата с использованием nginx

Данная схема подходит, если на указанной машине уже работает сервер Nginx.

Создайте настройки для включения в конфигурации серверов:

mkdir /var/calculate/www/acme

Включите ACME в настройку необходимого сервера

example.org
и перезапустите Nginx:

Выполните следующую команду для получения сертификата для доменов

example.orgwww.example.org:

Получение сертификатов с использованием отдельного сервера хранения

Данная схема подходит, если на сервере хранения нет веб-сервиса.

На веб-сервере создайте файл для перенаправления ACME на

Пример обновления сертификатов веб-сервера из хранилища сертификатов

В данном примере скрипт

при обновлении сертификата для
example.org
будет вызывать скрипт, который обновит сертификаты на
webserver
, а также перезапустит на нём Nginx.

Установите права на выполнение скрипта:

chmod 700 /etc/letsencrypt/renewal-hooks/deploy/push-to-nginx

Пример перезапуска nginx при обновлении сертификатов

Этот пример подойдёт, если получение сертификата осуществляется через Nginx, находящийся на этой же машине.

Установите права на выполнение скрипта:

chmod 700 /etc/letsencrypt/renewal-hooks/deploy/restart-nginx

Программная реализация

Центр Сертификации выдаёт сертификаты, которые генерируются на АСМЕ сервере по протоколу Boulder, написанные на языке GO (доступный в исходниках под лицензией MPL2).

Данный сервер предоставляет RESTful-протокол, который функционирует через канал с TLS шифрованием.

Требования

Выполнив предварительные требования, войдите на свой сервер как пользователь sudo, чтобы начать работу.

Устанавливаем ssl сертификат let’s encrypt (инструкция)

Рассмотрим использование сертификата применительно к серверам , используемым на нашем хостинге.

Подавляющее большинство наших серверов используют версию Plesk 12.5 где данный модуль уже включён в дистрибутив Plesk 12.5 и установка его проста и удобна. Достаточно зайти в панель плеск в раздел «Сайты и домены », кликнуть на модуль Let’s Encrypt,

выбрать нужные опции и после нажатия кнопки «Установить», установка произойдёт менее чем за минуту.

Так как данный сертификат рассчитан на срок не более 90 дней, то в панели плеск создана соответствующая задача cron в разделе Инструменты и настройки – Планировщик задач

Стоит заметить, что существуют некоторые ограничения на генерацию сертификата:

  • дублирующие сертификаты — не более 5 в неделю;
  • количество попыток генерации сертификата не более 5 раз в час.

Вместо заключения


Путём несложных манипуляций с CRD мы научились выписывать автопродляемые, самоподписанные и бесплатные SSL-сертификаты от проекта Let’s Encrypt для доменов сайтов, запущенных в рамках Ingress’ов в Kubernetes-кластерах.

В статье приведены примеры решения наиболее частых в нашей практике задач. Однако функции cert-manager не ограничиваются описанными выше возможностями. На сайте утилиты можно найти примеры работы с другими сервисами — например, связка с Vault или же использование внешних выпускающих центров (issuers).

Оцените статью
Мой сертификат
Добавить комментарий