Let's Encrypt: получение сертификата по шагам

    В данной статье будет описан реальный способ получения сертификата от Let's Encrypt в ручном режиме для его дальнейшей установки на веб-сервер Windows (IIS/Microsoft Azure) или Linux (полностью ручной режим). Из-за отсутствия официального клиента под Windows для генерации сертификата будет использоваться дистрибутив Linux.



    В первые дни открытия заявок на бета-тестирование и было принято решение записаться и вот недавно пришло письмо, которое сообщает о том, что теперь программа ACME сгенерирует валидный сертификат для нашего домена.

    Далее мы решили опубликовать статью с пошаговой инструкцией процесса, чтобы к моменту релиза вы уже смогли оперативно создать и начать пользоваться своим сертификатом.

    Как это работает


    Полное описание процесса доступно по этой ссылке.
    Важно лишь знать, что для подтверждения владения доменом и успешной генерации сертификата нужно будет иметь доступ к записям DNS или к серверу куда ссылается A-запись, что вполне логично.

    Смысл программного набора Automated Certificate Management Environment (ACME) (написан на Python) в том, чтобы автоматизировать генерацию и установку сертификата в Linux-окружении.

    Существует неофициальный Windows-клиент с открытыми исходными кодами, который может генерировать и устанавливать сертификаты на Windows IIS и Amazon Web Services, но у нас была задача получить ключи и установить их вручную. Предлагаю любому желающему написать статью по работе с ним.

    Процесс по шагам


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

    [11/01/17] Новый клиент CertBot

    Небольшое обновление статьи в 2017 году.
    Теперь можно установить CertBot и получить сертификат в ручном режиме.

    Краткая инструкция:

    1. Скачиванием дистрибутив

    wget https://dl.eff.org/certbot-auto

    2. Установка прав на файл

    chmod a+x certbot-auto

    3. Запуск для получения сертификата в ручном режиме

    ./certbot-auto certonly --authenticator manual

    4. Следуйте указаниям программы (подробнее смотрите в полной инструкции ниже с шага № 4).

    Подробная инструкция (старый клиент — всё ещё работает)

    Использовалась официальная инструкция.
    Пользователи Linux могут использовать текст ниже как пример генерации сертификата в ручном режиме.

    1. Запустите ваш любимый дистрибутив Linux (мы использовали Debian 8).

    либо 2. Установите Git и выполните команды ниже:

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

    или 2. Скачайте и распакуйте в папку данный архив и перейдите в эту папку

    3. Запустите установку и генерацию с помощью

    ./letsencrypt-auto --agree-dev-preview --server \https://acme-v01.api.letsencrypt.org/directory -a manual auth

    Вам будет предложено ввести электронную почту для восстановления в будущем.
    Ключ -a manual позволит сгенерировать ключи в ручном режиме без их автоматической установки на веб-сервер.

    4. Далее введите домены для которых вы хотите создать сертификаты


    5. Подтвердите сохранение вашего адреса в логах Let's Encrypt


    6. Подтвердите владение доменом


    В сентябре 2016 года произошли небольшие изменения в порядке получения сертификата. Спасибо toxi_roman за обновление.

    Старый способ подтверждения с text/plain (не актуально по состоянию на октябрь 2016 г.)
    Это один из ответственных моментов в режиме ручной регистрации.
    Обратите внимание: нас просят создать ответ на запрос, который возвращает Content-Type text/plain.

    Такой ответ не пройдёт и подтверждение выдаст ошибку:


    Нужно, чтобы было так:



    Если у вас сервер на Windows (с поддержкой Razor Views, аналогично и с MVC), то самый простой способ создания правильного ответа:
    а) создать папку .well-known и в ней папку acme-challenge
    б) поместить туда файл [запрос].cshtml
    в) в содержание этого файла добавить:
    @{Response.ContentType = "text/plain";Response.Charset = "";}здесь проверочный код

    7. После успешной проверки, будут созданы следующие сертификаты в папке /etc/letsencrypt/live/[имя домена]:

    privkey.pem — приватный ключ для сертификата
    Используется Apache для SSLCertificateKeyFile и nginx для ssl_certificate_key.

    cert.pem (сертификат сервера)
    Используется Apache для SSLCertificateFile.

    chain.pem (сертификат цепочки)
    Он же используется Apache для SSLCertificateChainFile.

    fullchain.pem (соединение chain.pem и cert.pem)
    Он же используется nginx для ssl_certificate.

    7. Теперь пришло время сконвертировать его в родной для Windows .pfx формат.
    Перейдите в папку /etc/letsencrypt/live/[имя домена] (откройте терминал в режиме администратора с помощью команды su):

    cd /etc/letsencrypt/live/[имя домена]

    Запустите OpenSSL с помощью команды:

    openssl

    и начните конвертацию с помощью команды:

    pkcs12 -inkey privkey.pem -in fullchain.pem -export -out mydomain.pfx

    Вас попросят ввести пароль и подтвердить его.



    7.2 Выходим из OpenSSL с помощью команды quit

    7.3 Копируем итоговый файл в директорию нашего пользователя
    cp --no-preserve=all mydomain.pfx /home/(имя пользователя)/Documents

    8. Мы получили сертификат mydomain.pfx, который теперь можем использовать в Windows-окружении.

    Для обновления сертификата в ручном режиме:
    ./letsencrypt-auto certonly --renew-by-default -a manual

    Важно знать, что сертификаты Let's Encrypt валидны 90 дней. Рекомендуется обновлять их каждые 60 дней. На электронную почту, которую вы указали для генерации, будут приходить уведомления об истечении сертификата.

    Буду рад услышать ваши замечания или пожелания к статье.

    Статья опубликована при поддержке Москоу Компани, которая разрабатывает современные приложения под Windows, Windows Phone и Windows 10 Mobile.
    Планируете ли вы использовать сертификаты от Let's Encrypt в своих проектах

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 48
    • +1
      Блин, я даже не знал что они запустили бету, а где зарегистрироваться?
    • +1
      Сертификат можно получить только на www.example.com/example.com или на other.example.com тоже можно?
      • +1
        Тут есть немного информации, но пока в бете выдали на домен с www и без www (хотя мы запрашивали только на один без www).
        • 0
          Можно.
        • +1
          90 дней это ограничение для беты, или запустится сервис с таким же ограничением?
          • +2
            Вот тут написали, что на запуске будет тоже 90 дней. Они считают, что администраторы за год могут забыть про сертификат, а настроив автоматизацию один раз можно избавиться от многих проблем.
            • –1
              Ясно. Так и знал, что где-то подвох.
          • +1
            90 дней — не интересно.

            WoSign мне выдал на три года без всяких проблем.

            А использовать какую-то приблуду на сервере, которая работает под рутом и будет периодически лазить за сертификатом, лазить в конфиг моего веб-сервера для настройки веб-сайта для подтверждения валидности, а затем для подмены сертификата…

            Зачем мне это всё? Зачем так сложно?
            • +1
              Ну, объективно говоря, приблуда на сервере на должна работать от рута, и не должна менять конфиг сервера каждый раз. А смысл как раз в том чтобы настроить раз и забыть.
              • –3
                Лично мне проще раз в три года сходить за сертификатом по напоминалке в календаре, чем такое городить.
                Затем уже этот сертификат каким-нибудь Ansible/Puppet/etc раскидать куда надо.

                А их клиент (ACME) мне напомнил какой-то продукт для админов локалхоста, которое всё делает за тебя.
                Поэтому, хоть инвайт на бету и прислали, пользоваться им пока нормальный срок действия сертификатов не введут не собираюсь пока…
                • –2
                  Мне кажется что LE вообще строго говоря и предназначен для админов локалхоста.

                  У меня на проде два nginx, и LE'шная схема получения сертификатов действительно несколько попаболь. Пишу вот обвязку на го для мониторинга и самостоятельного перевыпуска, попробую пару доменов все же перенести на LE.
                  • 0
                    Ну, могли бы и для админов просто добавить какой-нибудь более удобный способ выпустить себе сертификаты. Надеюсь, в будущем это будет доступно.
                    • 0
                      Весь инструментарий уже есть, надо просто один раз подготовить в том же ansible конфиги nginx и крон задачу. =) Да, сперва придется поиграться с командной строкой, а потом уже всё автоматизировать. Выглядит очень разумно, хотя я и не доволен описанием процедуры генерации без автоматических правок конфигов.
                • +1
                  ну менять конфиг сервера не обязательно как раз, достаточно обновить файлы сертификатов, а это реализуемо от не привелигированного юзера
                  • 0
                    У меня вебсервер в докер-контейнере с read-only файловой системой. Так что придётся и контейнер пересобрать и перезапустить его.
                    • +1
                      Надо просто пробросить два каталога на хост систему: один с валидационными файлами, второй с сертификатами.
                • 0
                  Вы используете DNSSEC? Как миритесь с еженедельными переподписями зон?
                  • 0
                    Пользую. Я генерирую ключи (KSK/ZSK) на каждую зону один раз, дальше за меня всё делает BIND автоматом.
                  • +1
                    90 — это сейчас, пока бета, потом они планировали увеличить.

                    Вот у меня, например, wosign через полгода после выдачи один сертификат без объяснения причин отозвал, и поддержка ничего вразумительного не смогла сказать. Благо сертификат был прибит DANE и DNSSEC и использовался исключительно для внутренних нужд, посему отзыв не был дизастером, но все равно было неприятно.

                    Что касается приблуды, есть вот такая вещь: github.com/diafygi/letsencrypt-nosudo. Разумеется, не все нужен весь тот воз функционала (и гуев), что есть в официальном клиенте, так что в ближайшее время появятся варианты на любой вкус, API то открыты.
                    • 0
                      Но есть проблема — сертификаты от Wosign 1 января 2017 SHA-1 станут красными. :(
                  • +4
                    Я бы добавил, что в автоматическом режиме ещё генерируется конфиг для веб-сервера, практически готовый к активации.

                    После настройки https очевидным было протестировать при помощи Qualys SSL Server Test. Результат меня удивил. A без каких-либо дополнительных телодвижений.
                    • +1
                      И A+ тоже, но с небольшим телодвижением :)
                      для апача например в виртуальные хосты добавить:
                                      <IfModule mod_headers.c>
                                              Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
                                      </IfModule>
                      

                      ну и включить модуль headers.
                      • 0
                        Я так делал для сертификатов от StartSSL, потом пожалел — даже после того как убрал, сервер продолжает перекидывать клиента на https, независимо от поддомена. А сертификат-то не вилдкардовый.
                        • 0
                          А что мешает убрать «includeSubDomains;»?
                          • 0
                            Уже давно всё убрал, у меня оказался малость не тот случай, когда надо бегать за красивыми А+ циферками, при ограниченном сертификате.
                            • 0
                              Я имею ввиду, что изначально не нужно было ставить «includeSubDomains;», а теперь, если проблема только на вашем браузере, то можно почистить настройки HSTS.
                              И можно подробнее про ограниченный сертификат?
                              • 0
                                Проблема, к сожалению, не только у меня. Про ограничения я имел в виду, что он только на domain.tld. и www.domain.tld. — когда мне понадобилось сделать static.domain.tld., я столкнулся с таким вот конфузом, при этом многие клиенты уже хотят по таким вот настройкам «для А+» =) Ну это, безусловно, мой косяк. За ссылку большое спасибо!
                                • 0
                                  Кстати, для статики лучше использовать не поддомен, а отдельный домен, чтобы на него не шли лишние куки.
                                  • 0
                                    Использование secure в куках чуток улучшает ситуацию в данном кейсе.
                                  • 0
                                    Когда нужен static.domain.tld — просто создаете еще один сертификат
                                • 0
                                  max-age=0 -> редирект куда и как надо -> отдача правильного HSTS (если всё еще на SSL)
                                  • 0
                                    Дождусь LetsEncrypt и попробую, спасибо.
                                    • 0
                                      Этот костыль опробован и работает на основных браузерах и платформах (крутится в продакшене на одном сайте средней популярности).
                        • 0
                          А кто-нибудь может подсказать, где IP-адреса регистрирующих машин «will be publicly logged»? Зачем это вообще и что делать пользователям CloudFlare?
                          • +1
                            Для cloudflare можете все равно поставить сертификат, для защиты трафика между вашим сервером и origin pull-сервером (Full SSL — Strict)

                            Кроме того, cloudflare обслуживает только определенные порты, если ваш сервер нуждается в защите других портов — вам все равно пригодится LE.
                            • 0
                              Это понятно. Я про то, что для машин за CloudFlare не допускается утечка IP-адреса. По этому скриншоту из статьи можно предположить, что где-то в интернете в открытом доступе есть пары IP-domain, некоторые из которых раскрывают реальные IP-адреса машин за экранами.
                              • 0
                                Насколько я понял, записывается IP машины, с которой был запрошен сертификат.

                                Берете любой VPS на пару дней на тест и выходите в этот момент в сеть через него.
                          • +3
                            7. Скопируйте их на Windows-машину.
                            8. Теперь пришло время сконвертировать их в родной .pfx формат.
                            Для этого установим OpenSSL, распакуем его, добавим в эту же папку наши ключи и запустим от имени администратора:

                            Я бы поменял пункты местами и конвертил бы линуксовым OpenSSL(команды идентичны)
                            • +1
                              как вариант — делать все в cygwin
                              • 0
                                Спасибо! Действительно, лишний шаг с установкой openssl в Windows. Обновил инструкцию.
                              • 0
                                Могу ли я использовать letsencrypt на коммерческом сайте?
                              • 0
                                Их скрипт работает только в некоторых дистрибутивах GNU/Linux. В частности, в дистрибутивах с RPM требует Yum или DNF.
                                Это очень большой минус.

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.