Проверка цепочки: без отдельного звена подписи — пакеты НРД подписывает шлюз (ИШ — единственный владелец ключа), подпись проверяется звеном НРД; образ: дистрибутив ИШ в составе (IGATE=…), установка с образа без интернета
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -5,14 +5,13 @@ package lkgateway
|
||||
// - учёт DEPO: проверочное событие BJ_PING обработано процедурами обмена;
|
||||
// - QUIK МНП: объекты, инструменты, справочник получателей (только чтение);
|
||||
// - QUIK МНП, по желанию: пробная блокировка 1 шт. бумаги клиента («Вывод ЦБ (M2M)») и сразу снятие;
|
||||
// - подпись ключом организации (Валидата);
|
||||
// - НРД: запрос справочника участников уходит через шлюз и подписывается, ответ приходит во входящие.
|
||||
// - НРД: запрос справочника участников уходит через шлюз — шлюз подписывает его ключом организации (ИШ —
|
||||
// единственный владелец ключа для НРД), НРД принимает и отвечает, ответ приходит во входящие.
|
||||
// Звенья идут по очереди; упавшее не останавливает остальные — видно всю картину.
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"sort"
|
||||
@@ -20,8 +19,6 @@ import (
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/cryptocli"
|
||||
)
|
||||
|
||||
// ChainStep — звено проверки.
|
||||
@@ -69,7 +66,7 @@ func chainRun(rc *RuntimeConfig, nsdReal bool, blk *chainQuikBlock) {
|
||||
steps = append(steps, ChainStep{Key: "quik-block", Title: "QUIK МНП: пробная блокировка 1 бумаги и снятие"})
|
||||
}
|
||||
}
|
||||
steps = append(steps, ChainStep{Key: "sign", Title: "Подпись ключом организации"}, ChainStep{Key: "nsd", Title: "НРД: запрос через шлюз — ответ получен"})
|
||||
steps = append(steps, ChainStep{Key: "nsd", Title: "НРД: запрос через шлюз подписан ключом, доставлен, ответ получен"})
|
||||
for i := range steps {
|
||||
steps[i].State = "wait"
|
||||
}
|
||||
@@ -126,20 +123,6 @@ func chainStepRun(rc *RuntimeConfig, s Settings, key string, nsdReal bool, blk *
|
||||
return "ok", "подключение, объекты M2M, инструменты и справочник получателей на месте"
|
||||
case "quik-block":
|
||||
return chainQuikBlockRun(s, blk)
|
||||
case "sign":
|
||||
if s.Crypto.Provider == "" || s.Crypto.Provider == "stub" {
|
||||
return "err", "средство подписи не настроено"
|
||||
}
|
||||
cli := cryptocli.New(cryptocli.Config{Provider: cryptocli.Provider(s.Crypto.Provider), SocketPath: s.Crypto.SocketPath, ModulePath: s.Crypto.ModulePath})
|
||||
defer cli.Close()
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
|
||||
defer cancel()
|
||||
payload := []byte("<bj-chain-test ts=\"" + time.Now().UTC().Format(time.RFC3339) + "\"/>")
|
||||
sig, err := cli.SignXMLDSig(ctx, payload, "", s.Crypto.Profile)
|
||||
if err != nil {
|
||||
return "err", "подпись не получилась: " + err.Error()
|
||||
}
|
||||
return "ok", fmt.Sprintf("подпись получена (%d байт)", len(sig))
|
||||
case "nsd":
|
||||
if !nsdReal {
|
||||
return "err", "шлюз НРД не настроен — bj работает в режиме имитации (раздел «Шлюз НРД»)"
|
||||
@@ -159,7 +142,7 @@ func chainStepRun(rc *RuntimeConfig, s Settings, key string, nsdReal bool, blk *
|
||||
return "err", "шлюз не доставил пакет в НРД: " + delErr
|
||||
}
|
||||
if reply.After(start) {
|
||||
d := "НРД ответил за " + humanDur(reply.Sub(sent)) + " — подпись, шлюз, доставка и входящие работают"
|
||||
d := "НРД ответил за " + humanDur(reply.Sub(sent)) + " — ключ организации, шлюз, доставка и входящие работают"
|
||||
if deliv.After(start) {
|
||||
d = "пакет доставлен в НРД, " + d
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
{{define "chainTest"}}
|
||||
<div class="card" id="chain">
|
||||
<h2><span class="dot" id="ch-dot"></span>Проверить всю цепочку</h2>
|
||||
<p class="muted" style="margin:0 0 8px">Сквозная проверка без настоящего перевода: bj по очереди проходит каждое звено и показывает, какое работает, а какое нет.{{if .DepoLicensed}} Учёт DEPO — проверочное событие, QUIK — только чтение (пробная блокировка — по желанию, ниже).{{end}} Подпись — ключом организации. НРД — запрос справочника участников через шлюз с ответом НРД.</p>
|
||||
<p class="muted" style="margin:0 0 8px">Сквозная проверка без настоящего перевода: bj по очереди проходит каждое звено и показывает, какое работает, а какое нет.{{if .DepoLicensed}} Учёт DEPO — проверочное событие, QUIK — только чтение (пробная блокировка — по желанию, ниже).{{end}} НРД — запрос справочника участников через шлюз: шлюз подписывает его ключом организации, НРД отвечает.</p>
|
||||
{{if .DepoLicensed}}
|
||||
<details style="margin:6px 0 10px">
|
||||
<summary style="cursor:pointer;color:var(--accent);font-size:13px">Добавить пробную блокировку в QUIK (1 бумага клиента — заблокировать и сразу снять)</summary>
|
||||
|
||||
Reference in New Issue
Block a user