Files
talkscore-asr/docs/HTTPS.md
T
Vladimir BryzgalovandClaude Opus 5 c992b7907d HTTPS через Caddy с автоматическими сертификатами
Токен и расшифровки разговоров ходили по сети открытым текстом. Теперь в
пакете лежит Caddy: он держит сертификаты Let's Encrypt и продлевает их сам,
а сервис уходит на localhost.

Отдельно решён вопрос подмены адреса: за прокси все запросы приходят с
localhost, и список разрешённых адресов пускал бы кого угодно. Заголовку
с настоящим адресом сервис верит только от доверенного прокси - на это
восемь тестов.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 01:41:34 +05:00

72 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HTTPS для сервиса
Без него токен и расшифровки разговоров идут по сети открытым текстом.
Схема простая: Caddy держит сертификаты и HTTPS, сервис сидит на localhost
и наружу напрямую не смотрит.
## Что нужно от вас
1. **Открыть порты 80 и 443** на роутере и в брандмауэре Windows.
Порт 80 нужен Let's Encrypt для проверки владения доменом, 443 - для самой
работы. Сейчас оба закрыты.
2. **Проверить домены.** `asr.netranking.ru` уже указывает на 90.157.58.23.
`asr.talkscore.ru` пока не резолвится - добавьте A-запись на тот же адрес.
3. **Порт 8756 можно закрыть снаружи** - после перехода на HTTPS он больше
не нужен из интернета.
## Настройка
В `config.toml` поменяйте две строки:
```toml
[server]
# Сервис больше не смотрит наружу: снаружи стоит Caddy
host = "127.0.0.1"
[security]
# Доверяем заголовку с адресом клиента только от своего же прокси
trust_proxy = "127.0.0.1"
```
**Зачем `trust_proxy`.** За прокси все запросы приходят с localhost, и список
разрешённых адресов увидел бы вместо клиента саму машину - то есть пустил бы
кого угодно. Caddy передаёт настоящий адрес в заголовке, и сервис его читает,
но **только когда запрос пришёл от доверенного прокси**. Иначе заголовок
подделал бы любой желающий.
Домены прописаны в файле `Caddyfile` рядом со `start.bat`. Если понадобится
изменить список - правьте его.
## Запуск
Вместо `start.bat` запускайте **`start-https.bat`**: он поднимает сервис на
localhost и Caddy перед ним.
При первом запуске Caddy получит сертификаты - это занимает несколько секунд
и требует, чтобы порт 80 был доступен снаружи. Дальше он продлевает их сам,
напоминаний не нужно.
Проверка:
```
curl https://asr.netranking.ru/health
```
## Если сертификат не выдаётся
Caddy пишет причину в своё окно. Частые случаи:
- **порт 80 закрыт** - Let's Encrypt не может проверить домен;
- **домен не указывает на эту машину** - проверьте A-запись;
- **порт 80 занят** другим приложением (IIS, Skype) - освободите его.
Пока сертификата нет, сервис доступен только по `http://localhost:8756`
с самой машины.
## Автозапуск
```
schtasks /create /tn "talkscore-asr" /tr "C:\talkscore-asr\start-https.bat" ^
/sc onstart /ru SYSTEM /rl HIGHEST
```