Поставил сертификат Let’sEncrypt

22 комментария

Установка сертификата от Let's EncyptВот наконец решил попробовать SSL сертификат от Let’s Encrypt. Сподвигло меня на это то что, купленный мной ранее сертификат от COMODO, на платформе Android оказывается считается недоверенным. А я ни сном ни духом об этом( Да и вобщем хрен с ним с тем сертификатом, стоил он всего 8$, и во первых не жалко, а во вторых, FireFox начал ругаться на то сертификат использует небезопасное шифрование 1024bit.

Вообще что такое Let’s Encrypt? Это центр сертификации который выдает бесплатные HTTPS сертификаты. Ну и немножко википедии:

Проект Let’s Encrypt создан для того, чтобы большая часть интернет-сайтов смогла перейти к шифрованным подключениям (HTTPS). В отличие от коммерческих центров сертификации, в данном проекте не требуется оплата, переконфигурация веб-серверов, использование электронной почты, обработка просроченных сертификатов, что делает процесс установки и настройки TLS-шифрования значительно более простым. Например, на типичном веб-сервере на базе Linux, требуется исполнить две команды, которые настроят HTTPS шифрование, получат и установят сертификат примерно за 20-30 секунд.

У сервиса есть несколько ограничений которые немного печалят, сертификат выдается сроком всего на 3 месяца, отсутствуют WildCard сертификаты. Первое ограничение объясняют тем что мол в случае компрометации, сертификат, выданный на 3 месяца, нанесет вреда меньше, чем сертификат выданный на год.

Теория заговора: хотя мне кажется все эти ограничения созданы искусственно с другой целью — оставить остальные центры сертификации на плаву. Кому то будет лень настраивать cron на перевыпуск сертификата, или же перевыпускать его вручную каждые три месяца. Кому то лень получать сертификаты на все поддомены. А так Let’s Encypt занимает свою нишу среди гиков, которым такие вещи только нравятся.

Как установить Let’s Encypt?

Для этого существует специальный одноименный клиент созданный этой же организацией:

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

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

 ./letsencrypt-auto certonly --webroot -w [path to webroot dir] -d [domain]

В моем случае это выглядит вот так:

 ./letsencrypt-auto certonly --webroot -w /var/www/intsystem.org/public_html/ -d intsystem.org -d www.intsystem.org

После чего будет создан каталог /etc/letsencrypt/live/intsystem.org/ с символическими ссылками на сертификаты и ключ:

lrwxrwxrwx 1 root root  cert.pem -> ../../archive/intsystem.org/cert1.pem
lrwxrwxrwx 1 root root  chain.pem -> ../../archive/intsystem.org/chain1.pem
lrwxrwxrwx 1 root root  fullchain.pem -> ../../archive/intsystem.org/fullchain1.pem
lrwxrwxrwx 1 root root  privkey.pem -> ../../archive/intsystem.org/privkey1.pem

Теперь путь к ним осталось прописать в конфиг Nginx

ssl_certificate "/etc/letsencrypt/live/intsystem.org/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/intsystem.org/privkey.pem";
ssl_trusted_certificate "/etc/letsencrypt/live/intsystem.org/chain.pem"; #Если используете OCSP

и рестартуем Nginx.

Как обновить сертификат?

Особого умения тут тоже не надо, используем ту же самую команду, но с параметром --renew-by-default:

./letsencrypt-auto certonly --renew-by-default --webroot -w [path to webroot dir] -d [domain]

В моем случае:

./letsencrypt-auto certonly --renew-by-default --webroot -w /var/www/intsystem.org/public_html/ -d intsystem.org -d www.intsystem.org

После выпуска и получения новых сертификатов, должны автоматически обновится символические ссылки на них:

lrwxrwxrwx 1 root root  cert.pem -> ../../archive/intsystem.org/cert2.pem
lrwxrwxrwx 1 root root  chain.pem -> ../../archive/intsystem.org/chain2.pem
lrwxrwxrwx 1 root root  fullchain.pem -> ../../archive/intsystem.org/fullchain2.pem
lrwxrwxrwx 1 root root  privkey.pem -> ../../archive/intsystem.org/privkey2.pem

и рестарт Nginx (reload).

Как обновлять сертификат Let’s Encypt автоматически?

Для этого можно добавить следующие комманды в крон на каждые два месяца:

[path]/letsencrypt-auto certonly --renew-by-default --webroot -w [path to webroot dir] -d [domain]
service nginx reload

После чего про головную боль связанную с SSL сертификатами можно забыть навсегда.

Итог

Сертификат от Let's Encypt на intsystem.org

  1. Виталя

    Надо будет к моему сайту тоже HTTPS подключить) А кстати если просто хостинг а не сервер, реально ли это?

    1. Дмитрий Амиров Автор

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

      1. Странник

        Насколько я знаю, SSL сертификация требует выделенного IP. Не знаю как насчёт Let’s encrypt, но у остальных так

        1. Дмитрий Амиров Автор

          Не, тут вы немного заблуждаетесь. Выделенный IP требуется для совместимости со старыми системами. Сейчас все современные браузеры и веб серверы поддерживают технологию SNI, которая позволяет работать с разными SSL сертификатами для разных доменов на одном IP.

  2. Странник

    Кстати, вы зря нападаете на 3-месячный срок. Книга Б. Шнайера и Н. Фергюсона «Практическая криптография», насколько я помню, рекомендует быстрое устаревание, тем более что очень многие браузеры вообще не смотрят списки отзыва. Никогда.

    1. Дмитрий Амиров Автор

      Мой внутренний криптограф считает так же. Но вот вторая часть меня негодует из за того что пришлось совершать лишние действия)

  3. Сергей

    Все сделал, но проблема с OCSP , nginx
    verify error:num=20:unable to get local issuer certificate

    stapling не включатся ((( подскажите как решить ? В файле fullchain цепочка из 2 элементов.

    1. Дмитрий Амиров Автор

      По моему это как то связано с корневыми сертификатами. Точный ответ на вопрос я не знаю. Рекомендую все же погуглить.

  4. Кирилл

    Дмитрий, нужно ли перегенерировать dhparam.pem, который используется в директиве ssl_dhparam, после обновления сертификата?

    1. Дмитрий Амиров Автор

      Нет конечно) Замаетесь каждый раз его перегенерировать :)

  5. Дмитрий

    А как его прописать для Apache?

    Можно ли его сгенерировать не на том сервере где его устанавливаешь а в другом месте?
    То есть реально ли такой сертификат поставить на обычный шаред хостинг?

    1. Дмитрий Амиров Автор

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

  6. R

    Дмитрий, здравствуйте, у меня несколько поддоменов лежит в www, а как же их сертбот проверит, если мы вебрут указываем только для папки с главным доменом?
    ./letsencrypt-auto certonly -a webroot —webroot-path=/var/www/site-/main -d ‘site.ru,is.site.ru,static.site.ru’
    Разумеется он ошибку выкидывает такого вида по всем поддоменам
    Domain: is.site.ru
    Type: unauthorized
    Detail: Invalid response from
    http://is.site.ru/.well-known/acme-challenge/nVU_cw7LcJ9hTTX8HR44Wlu75aFcy47aESdqfNSpl9Y:

    1. Дмитрий Амиров Автор

      Я уже подробностей не помню, но если не ошибаюсь это делается симлинками. Т.е. в корне сайта создается симлинк .well-known на какой то общий каталог, и этот каталог указывается в кач-ве вебрута для всех доменов. Могу ошибаться.

    2. Нат

      R, я запускала без указания webroot:
      ./certbot-auto certonly -d site.ru -d www.site.ru --manual
      При этом дважды требовалось создавать файл для проверки:
      http://site.ru/.well-known/acme-challenge/igHOep5uGXD5xIbGzv9qUDTILodPSF7yrJOJYZHYYvw
      и
      http://www.site.ru/.well-known/acme-challenge/qipY6GE_ePZpuExBzNkAjm9TV1hywv-LX-ccKFwnCEc
      иначе выходила аналогичная ошибка для www.site.ru
      Вам действительно нужно завести общий каталог какой-то.

  7. Сергей

    Здравствуйте. Подружил с десяток сайтов с LetsEncrypt, но вот завести Postfix с TLS шифрованием и сертификатами от LetsEncrypt кардинально не получилось. :( Пишет что неизвестный CA сертификат и хоть тресни. Postfix c сертификатами от StartSSL работает все четко, даже с самоподписанными проблем нет. Может кто что посоветует?

  8. Влад

    Вроде подробно все описано а где это прописать все эти коды и в каких файлах сайта непонятно. Толку от такого урока.

    1. Дмитрий Амиров Автор

      Так это и не урок) Обзор в общих чертах, если можно сказать.

  9. Юрий

    Запускаю ./letsencrypt-auto —help
    Получаю в ответ:
    FATAL: Gentoo support is very experimental at present…
    if you would like to work on improving it, please ensure you have backups
    and then run this script again with the —debug flag!
    Alternatively, you can install OS dependencies yourself and run this script
    again with —no-bootstrap.
    Что делать?

  10. Илья

    Дмитрий , добрый вечер! Подскажите пожалуйста. Как раз несколько дней пытаюсь решить вопрос с Lets encrypt сертификатом. На хостинге hosting.energy при создании сайта dommeb.com.ua подключил бесплатный Lets encrypt из Isp панели. Все было хорошо несколько дней, проходил тесты SSL ssllabs.com/ssltest/analyze.html на А+. Пробовал загрузить с мобильного на Android 2.3.6 с стандартного браузера и Maxton — появлялось только предупреждения о ненадежности сертификата , а дальше можно нажать Продолжить и сайт был доступен.

    Неделю назад заметил, что при загрузке с мобильного и тестов на редиректы (поставил в настройках домена на хостинге редиректы с http-https) происходит добавление в url :443 (название SSL порта). И сайт не доступен при загрузке (надпись ошибки).

    Написал в хостинг, решили в течении нескольких дней вопрос. Написали «Исправили конфигурации Nginx относительно редиректов, в конфиги закралась ошибка (вероятно, из-за панели управления) и было 2 редиректа.»

    :443 уже не дописывался с мобильного и при тесте на редиректы.
    Но сайт по прежнему не грузился, как с появлением этих двойных редиректов :443 (ошибка на Android 2.3.6 сайт не доступен при загрузке).

    Посмотрел ssl тест, тоже А+ результат, но появилась ошибка в подпункте Handshake Simulation No SNI 2Android 2.3.7 No SNI 2 Server sent fatal alert: handshake_failure

    Погуглил по этой ошибке:
    Здесь про эту ошибку и решение пишут talk.plesk.com/threads/https-websites-not-loading-in-ie.338346/ Передал всю информацию в тех поддержку хостинга.

    Несколько дней переписывался с хостингом, говорят ничего в конфигурации настроек хостинга не меняли, используют стандартный плагин Lets Encrypt сертификата. И они не гарантируют работу SSL от LetsEncryt на устаревших платформах. Предложили выделенный IP за 1.5$ в месяц.
    Хотя несколько дней назад все работало и правок не было на обеих сайтах (все данные в браузерах очищал). А сам сайт хостинга (тоже на этом сертификате, нормально и сейчас грузится с с мобильного и даже без предупреждения)

    Сайты на виртуальном хостинге, без выделенного IP. Один сайт сделал на Opencart с Lets encrypt сертификатом, все было в порядке. Второй тестовый на WordPress — все было тоже хорошо с android 2.3.6. Собирался переходить на третьем сайте (WordPress) с http на https, и уже первые два нормально не грузятся на Android 2.3.6…
    Хотелось бы чтобы все пользователи могли нормально заходить на сайт (в крайнем случае на старых платформах как Android 2.3.6 чтобы было только предупреждение, которое можно пропустить)
    Подскажите пожалуйста, может вы знаете в чем может быть причина?

    Решил посмотреть платные сертификаты, вроде хороший этот от Comodo namecheap.com/security/ssl-certificates/comodo/positivessl.aspx ,
    но у вас в статье прочитал, что на платформе Android сертификат Comodo был недостоверным. Немного запутался с этим

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

Прочли запись? Понравилась? Не стесняйтесь, оставьте, пожалуйста, свой комментарий. Мне очень интересно, что вы думаете об этом. Кстати в комментарии вы можете задать мне любой вопрос. Я обязательно отвечу.

Вы можете оставить коментарий анонимно, для этого можно не указывать Имя и email. Все комментарии проходят модерацию, поэтому ваш комментарий появится не сразу.