Комментарии 96
А зачем пересоздавать CSR при обновлении скртификата ?!?!!!
плюньте вы на этот certbot (хотя наверняка в нем это настраивается).
в acme-tiny путь к csr и сертификату — параметры командной строки. засунули в cron и все.
Конфигурационные файлы для renew
сертификата лежат в директории (актуально для Ubuntu, возможно в других дистрибутивах путь может быть другой) /etc/letsencrypt/renewal
в них есть все параметры, которые указываются ключами для certbot
( и которые описаны в man'е)
Используйте шифры, дающие perfect forward secrecy, и не переживайте о ключах. От них никакого толка для желающих почитать трафик в случае использования DHE и ECDHE.
imho certbot слишком перегружен, рекомендую acme-tiny.
или acme-client
Даже если указывать домен в Punycode?
В certbot#3614 пишут что вот-вот всё это будет.
https://github.com/jwilder/nginx-proxy и
https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion
только указать имена хостов и мейл для регистрации сертификатов.
А в чем проблема-то? Http используется только для подтверждения владения доменом, где вы дальше используете полученный сертификат — ваше дело.
Мы mx'ы все letsencrypt'ом оtlsили, обновляется автоматом ессно.
Для интРАнет сервисов логичнее свой CA поднять
Плюс всякие железки, вроде ASA с AnyConnect или контроллера Wi-Fi с captive-порталом, где тоже нужен нормальный сертификат, но нет встроенного клиента.
LE отличная штука для публичных сайтов, а для всего остального мне проще купить сертификат у GGSSL за $10 и забыть про это на 3 года.
Правда что ли? А как можно скрыть от меня адреса с которых к моему веб-серверу обращаются?
Вы глупости говорите.
Интересно вам этот ггссл заплатил за рекламу или вы добровольно и бесплатно рекламируете какую-то сомнительную шарашку у которой и не факт, что ЦА в доверенных основных систем?
А как можно скрыть от меня адреса с которых к моему веб-серверу обращаются?
Вот только знать его надо перед подключением и не обязательно следующая попытка будет с того же адреса.
Интересно вам этот ггссл заплатил за рекламу или вы добровольно и бесплатно рекламируете какую-то сомнительную шарашку у которой и не факт, что ЦА в доверенных основных систем?
У них брендированные сертификаты от Comodo по самым низкий ценам. Ещё они рассказывают всякое интересное тут.
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
Сгенерировать ключ можно так:
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
Заодно можно включить http2 (добавив опцию в директиву listen):
listen 443 ssl http2;
Ну и ещё можем добавить
ssl_stapling on;
Этим мы позволяем серверу прикреплять OCSP-ответы, тем самым уменьшая время загрузки страниц у пользователей.
Что бы не прописывать это каждый раз, можно поменять шаблон certbot'a в файле
/etc/letsencrypt/options-ssl-nginx.conf
Затем для каждого домена и поддомена, для которых нужно получить сертификаты, в блоке server перед всеми блоками location укажем
А что в случае, если используются автоподдомены, например языковые?
Они же указываются в директиве server_name
, ведь так?
у вас много языков на уровне автоподдоменов?
Не выдает, но почему вам это мешает? Так как одним сертификатом не обойтись (у Google Translate больше 100 языков), лучше, из соображений размера сертификата, сразу получить отдельные под каждый код языка.
for langcode in $(cat ISO_639-1.txt); do
certbot certonly -d $langcode.example.ru
done
Другой вопрос если вам нужно чтобы без SNI все работало. Только только $300 в год на *.example.ru
или уход от идеи поддоменов решат вопрос.
P. S. Кто бы мог подумать, что тема неожиданно превратится в настоящий Тостер) В таких ситуациях я нахожу весьма нужным возможность заносить комменты в избранное.
Тоже подумайте: может вам вообще не стоит так делать. Вдруг вам когда-нибудь захочется различать en_US
и en_GB
и en_AU
.
тогда настройте hook, который при запросе "нового" языка будет расширять сертификат, добавляя в него поддомен и потом уже осуществлять обычный ответ с сертификатом. Не думаю, что это будет слишком большой оверхед
И генерируйте на лету, при обращении к домену :)
Влепившему минус Вашему комменту я бы порекомендовал бы попытаться высказать Вам его претензии лично при встрече. Уверен, он даже из дома побоиться выйти, куда уж там что-либо высказывать…
Ну собственно можете взять оттуда исходники пакета и собрать для Jessie себе, все будет попроще. Просто почему-то OpenResty не пакетят в дистрах, вот пришлось самому это сделать, пока было нужно.
А на минусы я внимания не обращаю, по моим комментам есть какой-то анонимный фанат, ходит и минусит, фиг бы с ним. Мои комментарии полезны коллегам, а остальное меня не волнует.
А так да, и сам иногда попадаю под раздачу. Тут имеется большое количество таких людей, и очень жаль на самом деле, что так получилось, что самая большая концентрация во всем интернете находится как раз на Хабре/Гиктаймсе. Возможно, всему виной возможность отрицательного голосования за комментарии. Ни на каком другом ресурсе нет такой возможности по подленькому показать свое отношение к человеку, не показывая своего лица. Поэтому имеем что имеем. Я сам программист, и в таких ситуациях думаю только об одном: «Хоть бы этот человек не был программистом, дабы не очернять эту светлую профессию»)
1) есть nginx фронт на публичном IP
2) есть nginx back на публичном IP
3) есть amazon route53
4) основной трафик идет на 1 и с него проксируется на 2
5) если 1 упал, то route53 обновляет DNS и запросы идут уже на 2
Вопрос в том как правильно запрашивать сертификаты ведь нужно их иметь и на 1 и на 2.
Допустимо ли иметь разные сертификаты (и позволит ли LE) для одних и тех же доменов, причем если в нормальном режиме, то оба запроса будут проходить через 1 (с точки зрения LE).
Пока что обдумываю вариант с редиректами на hostname 1 и 2 чтобы гарантированно направлять ACME на них, но это не отвечает на вопрос позволит ли LE два (а если три?!) сертификата для одного и того же домена и не отзовет ли он предыдущий сразу после выдачи/обновления последнего…
Емнип, при выпуске нового сертификата старый автоматически НЕ отзывается.
У меня есть несколько фронтов с nginx'ами(RR DNS) на которых я таки на каждом получал сертификат отдельно, плюс на бэке с nginx'ом же свой сертификат для того же домена. Все прекрасно работает. При получении нового старый никто не отзывает автоматом, можете не беспокоится.
но «единая точка отказа» напрягает.
1) браузеры в 2017 году начинают считать небезопасным сайты без шифрования (это уже запланировано);
2) все, у кого нет возможности купить сертификат, соскакивают на letsencrypt;
3) через годик он меняет условия выдачи бесплатных сертификатов (срок действия, либо платность, либо вообще пропадает);
4) у продавцов сертификатов — profit
https://letsencrypt.org/sponsors/
Но это не отменяет вышесказанное.
Вот когда появится 2-3 таких CA, будет заметно интереснее.
IMHO целью стоит внедрить повсеместное шифрование, 1) чтобы не все спецслужбы заглядывали в трафик, 2) чтобы запустить http2.
Безусловно целью был повсеместный переход на http/2 и соответственно https(как мы помним http/2 без ssl'а несуществует), такой переход лично я поддерживаю двумя руками и с момента, как LE вышел из беты я по умолчанию всем клиентам делаю https с сертификатом от LE.
Единственное что, я считаю, что certbot странен и неудобен, использую https://github.com/hlandau/acme и очень доволен.
Чтобы спецслужбы не заглядывали вот так просто в ваш трафик, используйте DHE и ECDHE. Эта рекомендация верна для любых центров выдачи сертификатов.
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install --upgrade letsencrypt
letsencrypt --version
Запустить можно, но ACME сервер все равно пойдет смотреть на 80-й.
Не нужно. Используйте webroot и так:
Alias /.well-known/acme-challenge /var/www/html/.well-known/acme-challenge
<Directory "/var/www/html/.well-known/acme-challenge">
Options None
AllowOverride None
Require all granted
AddDefaultCharset off
</Directory>
В остальном все то же самое что в инструкциях в посте.
Хотя фраза «Переадресация возможна даже на нестандартные порты, без ограничений по конечному протоколу HTTP или HTTPS.» очень обнадёжила.
P.S. Использую certbot 0.9.3 на Debian.
Может в 0.10.х можно переопределить порт, на который должен стучаться ACME?
С какой ошибкой не выходит?
Failed authorization procedure. ***.*** (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Could not connect to validation-server.***.***:81
Если вешаю редирект на 80-й, всё ОК.
Думаю, что если порыбачить tcpdump'ом, то я увижу запросу от ACME-сервера на 80-м.
ACME-сервер всегда сначала спрашивает на 80 порту. Куда вы его потом редиректите — ваше дело.
Использовал два идентичных варианта:
rewrite ^/.well-known/acme-challenge/(.*)$ http://validation-server.***.***:81$request_uri? permanent;
location ^~ /.well-known/acme-challenge/ {
return 301 http://validation-server.***.***:81$request_uri;
}
Через curl запросы успешно доходят до validation-server, а от ACME болт.
Перевешиваю nginx на validation-server на 80-й (или standalone-режим на 80-й порт) и убираю ':81' из редиректа — всё работает.
Возможно, надо не редиректить, а проксировать запросы.
А нет ли возмоности параметризировать эти строки?
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
…
Чтобы вместо example.com подставлялся соответствующий домен?
Если вы хотите чтобы это происходило динамически, для любых доменов, то нет — так не получится сделать в nginx.
На самом деле очень не хватает такой возможности, но насколько я понимаю ее добавление утяжелит жизнь nginx'а(хотя лично на своих проектах я бы nginx с патчем дающим такую возможность поставил бы, это изрядно упростило бы жизнь).
Если вы читаете этот текст из будущего, когда Certbot уже есть в Debian stable и Ubuntu без обиняков и оговорок, то всё просто
Похоже что debian 9 и есть то будущее которого мы ждали.
Спасибо за отличную статью!
Что бы Вы порекомендовали делать в 2023 году ?
Сильно процесс поменялся?
Let's Encrypt и nginx: настройка в Debian и Ubuntu