Токен и расшифровки разговоров ходили по сети открытым текстом. Теперь в пакете лежит Caddy: он держит сертификаты Let's Encrypt и продлевает их сам, а сервис уходит на localhost. Отдельно решён вопрос подмены адреса: за прокси все запросы приходят с localhost, и список разрешённых адресов пускал бы кого угодно. Заголовку с настоящим адресом сервис верит только от доверенного прокси - на это восемь тестов. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
72 lines
3.4 KiB
Markdown
72 lines
3.4 KiB
Markdown
# 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
|
||
```
|