1952f020a1
Порт 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
46 lines
1.3 KiB
Go
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()
|
|
}
|