Files
Bridge-and-Join-s/internal/lkgateway/tlsserve_sniff_test.go
T
fontvielle 1952f020a1 HTTPS: http:// перебрасывается на https://; имя сервера — с проверкой DNS; скрипты DEPO при обновлении
Порт HTTPS принимает и http://: 308 на https:// того же имени и порта
(было «Client sent an HTTP request to an HTTPS server»).

Доменное имя сервера сохраняется, только если оно есть в DNS и указывает
на этот сервер; иначе — что добавить/исправить (запись A → IP сервера).
Сообщение об успехе — с адресом https://имя:порт/ и честно про
самоподписанный сертификат.

Обновление bj с новыми процедурами DEPO: отпечаток установленного набора
(depo_procs_applied) не совпадает со встроенным — на главной и в
настройках плашка «требуются повышенные права на базу данных» с вводом
логина/пароля администратора SQL (не сохраняются) и «Применить скрипты».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 13:22:34 +03:00

46 lines
1.3 KiB
Go

package lkgateway
import (
"bufio"
"net"
"net/http"
"strings"
"testing"
)
// http:// на порт HTTPS — 308 на https:// того же имени и порта; первый байт TLS проходит дальше.
func TestHTTPSSniffRedirect(t *testing.T) {
raw, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatal(err)
}
ln := newHTTPSSniffListener(raw, 8443)
defer ln.Close()
go func() { // TLS-соединения отдаются Accept
c, err := ln.Accept()
if err == nil {
b := make([]byte, 1)
_, _ = c.Read(b)
_, _ = c.Write(b)
c.Close()
}
}()
c, err := net.Dial("tcp", raw.Addr().String())
if err != nil {
t.Fatal(err)
}
_, _ = c.Write([]byte("GET /admin/setup?x=1 HTTP/1.1\r\nHost: m2m.corp.fontvielle.ru:8443\r\n\r\n"))
resp, err := http.ReadResponse(bufio.NewReader(c), nil)
c.Close()
if err != nil || resp.StatusCode != 308 || resp.Header.Get("Location") != "https://m2m.corp.fontvielle.ru:8443/admin/setup?x=1" {
t.Fatalf("ответ: %v %v %q", err, resp, resp.Header.Get("Location"))
}
c2, _ := net.Dial("tcp", raw.Addr().String())
_, _ = c2.Write([]byte{0x16})
b := make([]byte, 1)
if _, err := c2.Read(b); err != nil || b[0] != 0x16 || !strings.Contains(raw.Addr().String(), "127.0.0.1") {
t.Fatalf("TLS-байт не прошёл: %v %x", err, b)
}
c2.Close()
}