Токен и расшифровки разговоров ходили по сети открытым текстом. Теперь в пакете лежит Caddy: он держит сертификаты Let's Encrypt и продлевает их сам, а сервис уходит на localhost. Отдельно решён вопрос подмены адреса: за прокси все запросы приходят с localhost, и список разрешённых адресов пускал бы кого угодно. Заголовку с настоящим адресом сервис верит только от доверенного прокси - на это восемь тестов. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.4 KiB
HTTPS для сервиса
Без него токен и расшифровки разговоров идут по сети открытым текстом. Схема простая: Caddy держит сертификаты и HTTPS, сервис сидит на localhost и наружу напрямую не смотрит.
Что нужно от вас
- Открыть порты 80 и 443 на роутере и в брандмауэре Windows. Порт 80 нужен Let's Encrypt для проверки владения доменом, 443 - для самой работы. Сейчас оба закрыты.
- Проверить домены.
asr.netranking.ruуже указывает на 90.157.58.23.asr.talkscore.ruпока не резолвится - добавьте A-запись на тот же адрес. - Порт 8756 можно закрыть снаружи - после перехода на HTTPS он больше не нужен из интернета.
Настройка
В config.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