Первичная настройка, повторная проверка: копии без ключевых носителей СКЗИ (--one-file-system, без keymedia), без отпечатка железа и списка компонентов; восстановление на новый сервер — пароль базы bj из копии, база и пользователь ИШ; ключ для контура без канала запоминается и подключается при настройке канала; первый настроенный канал становится рабочим контуром; справочник сертификатов перечитывается после ключа и смены контура; шлюз НРД — шаг 7, ключ — шаг 8 (ключ ставится в профиль ИШ); подсказка контура ключа по сертификату; ИШ: параметры работающего шлюза не перезаписываются; без чужого кода отправителя и получателя по умолчанию; прокси для выхода в интернет; установка с образа без интернета; HTTPS — новый сертификат при смене адреса; bj-network — без cloud-init; проверка готовности: справочник участников, сетевые доступы, учётные записи, последний обмен с НРД

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-10-05 17:33:10 +03:00
parent 765d7b5994
commit 10305a095e
25 changed files with 634 additions and 95 deletions
+38
View File
@@ -166,8 +166,46 @@ func httpsRedirect(rc *RuntimeConfig, next http.Handler) http.Handler {
})
}
// selfSignedStale — самоподписанный сертификат выписан не на все нынешние адреса сервера (адрес сменили,
// копию восстановили на другой машине): браузер ругался бы ещё и на имя — выпускаем заново.
func selfSignedStale() bool {
raw, err := os.ReadFile(tlsCertPath())
if err != nil {
return false
}
b, _ := pem.Decode(raw)
if b == nil {
return false
}
c, err := x509.ParseCertificate(b.Bytes)
if err != nil {
return false
}
_, ips := localAddrs()
for _, ip := range ips {
if ip.IsLoopback() || ip.To4() == nil {
continue
}
found := false
for _, have := range c.IPAddresses {
if have.Equal(ip) {
found = true
break
}
}
if !found {
return true
}
}
return false
}
// startHTTPS — слушатель HTTPS рядом с основным HTTP. Ошибка не роняет bj: интерфейс остаётся по HTTP.
func startHTTPS(rc *RuntimeConfig, handler http.Handler) *http.Server {
if !rc.Snapshot().HTTPS.Custom && selfSignedStale() {
log.Printf("https: адреса сервера изменились — новый самоподписанный сертификат")
_ = ensureSelfSigned(true)
}
if err := ensureSelfSigned(false); err != nil {
log.Printf("https: сертификат не создан: %v — HTTPS выключен", err)
return nil