June 22nd, 2020

Book

Получение сертификата через SSH-туннель

Пришлось мне тут отлаживать проект, который требует приёма входящих веб-запросов по https, но выставлять сервер разработки голой жопой в инет низя. Продакшен "в домике", а для разработки, раз поднимать можно только на локальном ноуте, пришлось запилить статический адрес на хостинге.

А затем на ноут это дело пробрасывается через SSH-туннель. Ключевых моментов аж 4:

- на том конце туннеля в sshd_config должна быть прописана магия GatewayPorts clientspecified
- sshd после прописывания рестартовать обязательно (может быть есть опция reload)
- убедиться что порт не прикрыт фаерволом
- ssh -R 0.0.0.0:443:localhost:4834 -N user@host - все компоненты кроме -N обязательны :)

Далее надо получить https-сертификат от letsencrypt. Для чего я заюзал 2 военных компонента: webfsd и dehydrated. Под шапку 8 ни одного из них нет, но к счастью у меня арч.

на всякий случай для dehydrated я создал "домик" в виде useradd -m dehydrated-user. Делаем туда sudo -iu и создаём файлик config:

WELLKNOWN=/home/dehydrated-user/www/.well-known/acme-challenge
IP_VERSION=4
CONTACT_EMAIL=user@domain

И файлик domains.txt c одной строчкой именем домена на который сертификат. Можно более одного.

our.domain.com

И папочку: mkdir -p www/.well-known/acme-challenge

Пускаем наш webfsd: webfsd -Fd -r www -p 4834

dehydrated -f config --register --accept-terms
dehydrated -f config --account
dehydrated -f config -c

И опля, в certs/certs/our.domain.com появляются нужные файлики, с которыми дальше разбираться теперь

Upd: тьфу, certbot же есть. Причём он и в 8 шапке есть если вдруг чо.