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
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user