Первичная настройка, повторная проверка: копии без ключевых носителей СКЗИ (--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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user