Вот наконец решил попробовать 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 сертификатами можно забыть навсегда.
Надо будет к моему сайту тоже HTTPS подключить) А кстати если просто хостинг а не сервер, реально ли это?
Стандартная утилита требует рута для автоматизации процесса. Но у них так же есть АПИ, разобравшись с которым, я думаю можно сгенерировать сертификат и без рута. Или можно попробовать сгенерировать сертификат на другом сервере, но будет геморой с подтверждением прав на домен.
В целом не уверен что это будет просто, но думаю что вполне реально.
Насколько я знаю, SSL сертификация требует выделенного IP. Не знаю как насчёт Let’s encrypt, но у остальных так
Не, тут вы немного заблуждаетесь. Выделенный IP требуется для совместимости со старыми системами. Сейчас все современные браузеры и веб серверы поддерживают технологию SNI, которая позволяет работать с разными SSL сертификатами для разных доменов на одном IP.
Значит мои познания в этой области устарели
Кстати, вы зря нападаете на 3-месячный срок. Книга Б. Шнайера и Н. Фергюсона «Практическая криптография», насколько я помню, рекомендует быстрое устаревание, тем более что очень многие браузеры вообще не смотрят списки отзыва. Никогда.
Мой внутренний криптограф считает так же. Но вот вторая часть меня негодует из за того что пришлось совершать лишние действия)
Все сделал, но проблема с OCSP , nginx
verify error:num=20:unable to get local issuer certificate
stapling не включатся ((( подскажите как решить ? В файле fullchain цепочка из 2 элементов.
По моему это как то связано с корневыми сертификатами. Точный ответ на вопрос я не знаю. Рекомендую все же погуглить.
Дмитрий, нужно ли перегенерировать dhparam.pem, который используется в директиве ssl_dhparam, после обновления сертификата?
Нет конечно) Замаетесь каждый раз его перегенерировать :)
А как его прописать для Apache?
Можно ли его сгенерировать не на том сервере где его устанавливаешь а в другом месте?
То есть реально ли такой сертификат поставить на обычный шаред хостинг?
Для апача он прописывается также как и любой другой SSL сертификат. Насчет остальных вопросов — я бегло изучал их доку. Насколько я помню — такая возможность есть, но для этого вам придется изучить протокол взаимодействия с их сервером самостоятельно. В общем, подытожу, можно, но с большим геморроем.
Дмитрий, здравствуйте, у меня несколько поддоменов лежит в 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:
Я уже подробностей не помню, но если не ошибаюсь это делается симлинками. Т.е. в корне сайта создается симлинк .well-known на какой то общий каталог, и этот каталог указывается в кач-ве вебрута для всех доменов. Могу ошибаться.
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
Вам действительно нужно завести общий каталог какой-то.
Здравствуйте. Подружил с десяток сайтов с LetsEncrypt, но вот завести Postfix с TLS шифрованием и сертификатами от LetsEncrypt кардинально не получилось. :( Пишет что неизвестный CA сертификат и хоть тресни. Postfix c сертификатами от StartSSL работает все четко, даже с самоподписанными проблем нет. Может кто что посоветует?
можете по-подробнее лог ошибки показать?
Вроде подробно все описано а где это прописать все эти коды и в каких файлах сайта непонятно. Толку от такого урока.
Так это и не урок) Обзор в общих чертах, если можно сказать.
Запускаю ./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.
Что делать?
Дмитрий , добрый вечер! Подскажите пожалуйста. Как раз несколько дней пытаюсь решить вопрос с 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 был недостоверным. Немного запутался с этим