LINUX.ORG.RU
ФорумAdmin

Let's encrypt на домены и сабдомены

 


0

2

Здрасти

Есть сервер Debian в облаке. На нем стоит Webmin, на котором есть несколько виртуальных серверов + сабдомены. Насколько я знаю, letsencrypt позволяет взять сертификат на несколько доменов. Но вот с реализацией проблемы..

Такая ситуация. Есть example.org. На него сертификат ставится без проблем. Но понадобился сертификат для почты, соответственно на mail.example.org. В ДНС-е такая запись была, а вот сертификат никак не хотел устанавливаться. Сделал хитрость, поднял алиас(mail.example.org) на example.org и сертификат поставился как надо.

Но есть сабдомен test.example.org, на котором крутится что-то другое. К нему получить сертификат можно, если получать «изнутри», то есть через настройки виртуального сервера, а не всего webmin-а.

Но как мне получить сертификат на example.org mail.example.org test.example.org mail.test.example.org ?

А еще есть и другие домены, для которых тоже было бы желательно получить единый сертификат.

Как я понял, dovecot и postfix не поддерживают несколько сертификатов (sni), и им нужен один сертификат на несколько доменов (san). И letsencrypt это поддерживает. Только как это реализовать? Судя по тому, что он пишет в ошибке, он создает файл в первой папке и пытается его считать по ссылке http://test.example.org/.well-known/acme-challenge/file, но не может до него достучаться. Пытался схитрить, синхронизировал папки /home/example.org/public_html/.well-known/acme-challenge/ и /home/example.org/domains/test.example.org/public_html/.well-known/acme-challenge/. Но не помогает..

Что делать?


SAN прекрасно работает. Для этого правда необходимо, что бы клиент мог решить challenges для этих доменов. И для этого они должны иметь валидные DNS записи. Это к теории.

Теперь к практике. Официальный клиент sucks. Sucks a lot. Он заточен под веб-сервера и имеет другие ограничения. (В частности он слушает только 80/443 или портит конфиги или опять таки нужен веб-сервер отдающий файлы для нужного домена из нужного места.)

Но есть и другие клиенты. В частности можно воспользоваться lego, который умеет слушать на альтернативном порту и перенаправить трафик к нему через iptable/pf/whatever.

Ещё могу предложить свой собственный клиент. Он ещё не совсем готов, but it works for me. Главное отличие от других клиентов, что у меня вместо аргументов к программе просто простой конфиг. Например:

listen: localhost:8080
listentls: localhost:8443
basedir: ~/.acme

desire:
- mail: postmaster@dim13.org
  keyfile: postmaster.key
  domain:
  - altnames:
    - mail.dim13.org
    - smtp.dim13.org
    - imap.dim13.org
    hook: [ dovecot, smtpd ]
- mail: webmaster@dim13.org
  keyfile: webmaster.key
  domain:
  - altnames:
    - www.dim13.org
    - mail.dim13.org
    - git.dim13.org
    hook: [ nginx ]
hook:
  nginx: /etc/rc.d/nginx restart
  smtpd: /etc/rc.d/smtpd restart
  dovecot: /etc/rc.d/dovecot restart

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

PS: hook'и я ещё не доделал. Всё времени нет. :(

PPS: перенаправлять надо запросы от outbound1.letsencrypt.org и outbound2.letsencrypt.org

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)

Вообще вот эти клиенты, которые сами поднимают вебсервер и отвечают на ACME запросы по http --- зло. Правильный способ, настроить алиас на своем Апаче, чтоб редиректил /.well-known/acme-challenge со всех нужных виртуальных хостов в какую-то одну папку, далее сказать агенту Letsencrypt, чтоб в эту же папку скидывал ACME файлики, при общении с удостоверяющим центром.

Вообще я голосую за вот этот агент
https://github.com/lukas2511/letsencrypt.sh

* 2й по популярность на github после официального. Написан на bash
* не портит конфиги веб серверов
* можно писать по образу подобию свой hook
* список доменов в txt файле, причем если строка из многих доменов, то это будет многодоменный сертифика (sans).
* спец. командой , которую можно вставить в крон, обновляет сертификаты, дергая hook после обновления

Bers666 ★★★★★
()
Последнее исправление: Bers666 (всего исправлений: 1)
Ответ на: комментарий от Bers666

P.S. ну и прежде чем дергать letsencrypt, добейся того, чтоб для всех доменов, для которых будешь его дергать, ты мог скачать
http://domain.com/.well-known/acme-challenge/test.txt, предварительно вручную создав этот test.txt в алиасной папке.

Bers666 ★★★★★
()

Спасибо, ребята!

Сделал через алиас. Для всех доменов, кроме «основного», добавил это:

Virtualmin > Server Configuration > Website Redirects > Add a new website redirect

Source URL path: /.well-known/acme-challenge/(.*)$

Destination: URL at other website: http://example.org/.well-known/acme-challenge/$1

И все заработало как по маслу.

Ну и не забудьте предварительно создать алиасы для mail.example.org в Virtualmin > Create Virtual Server > Alias of example.org

Domain name: mail.example.org

Ну и убрать галочку с Enable Features: Accept mail for domain

Datt_
() автор топика
Ответ на: комментарий от onlybugs

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

Bers666 ★★★★★
()
Ответ на: комментарий от Bers666

It is also possible to use the “manual” mode to complete a verification process and obtain a certificate without running the client software as root.

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

onlybugs ★★
()
Ответ на: комментарий от onlybugs

оченьважныхсерверов

Привычку запускать всё подряд под рутом уже потом так просто не изведёшь.
Нужно сразу приучаться работать правильно, а то потом когда ручки того самого запускатора дотянутся до «оченьважныхсерверов» (не дай б-г конечно), то он не задумываясь поназапускает от рута всяких ./run_me.sh

У оратора которого вы цитируете претензии не к сервису, а к клиенту. Благо протокол открыт и есть несколько хороших альтернативных клиентов.

Nao ★★★★★
()
Ответ на: комментарий от Nao

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

Вы там оба в глаза долбитесь? Где я предлагал запускать от рута? конкретно та команда должна замечательно отработать без него и не лезть в конфиги вебсерверов (мне было лень и нет там вообще ничего важного, поэтому запускаю руками обновить, копирую сертификат куда нужно и перезапускаю вебсервер).

У оратора которого вы цитируете претензии не к сервису, а к клиенту. Благо протокол открыт и есть несколько хороших альтернативных клиентов.

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

onlybugs ★★
()
Ответ на: комментарий от onlybugs

мне было лень

Вот именно что тебе было лень, а мне нет. Твоя команда не работает от обычного пользователя (letsencrypt-0.4.1-1~bpo8+1 , Debian jessie), нужно указывать пачку параметров, т.к. по-умолчанию letsencrypt пишет в /var/log /etc и т.д.

где быстрее это обнаружат, в официальном или ещё одном альтернативном клиенте?

Если речь про acme.sh, то встречный вопрос:
Где быстрее обнаружат бекдор: в небольшом шелл-скрипте на 3к строк или в куче питоновского кода на 40к строк?

Nao ★★★★★
()
Ответ на: комментарий от Nao

не работает от обычного пользователя ... нужно указывать пачку параметров, т.к. по-умолчанию letsencrypt пишет в /var/log /etc и т.д.

Вот с этого и нужно было начинать. Я смотрю оно теперь вообще certbot называется, может уже поправили.

в небольшом шелл-скрипте на 3к строк или в куче питоновского кода на 40к строк?

А почему вы отвечаете вопросом на вопрос?) Но я продолжу, где быстрее, в одном официальном клиенте или куче сторонних? Тут ведь не угадать.

onlybugs ★★
()
Ответ на: комментарий от onlybugs

А почему вы отвечаете вопросом на вопрос?)

А поцчему ви спг’ашиваете?

где быстрее, в одном официальном клиенте или куче сторонних?

Но ведь устанавливать одновременно несколько клиентов не предлагалось: поставил один клиент и при каждом обновлении смотришь diff.

Nao ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.