Служба bj-crypto в интерфейсе — «Проверка ключа подписи» вместо «пробной подписи»/«криптосервиса»
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -151,7 +151,7 @@ func unitFailCause(c release.Component) string {
|
||||
func prepareTitle(c release.Component) string {
|
||||
switch c.Name {
|
||||
case "crypto-service.jar":
|
||||
return "Служба пробной подписи (Валидата)"
|
||||
return "Проверка ключа подписи (Валидата)"
|
||||
}
|
||||
if t := moduleTitles[c.Feature]; t != "" {
|
||||
return t
|
||||
|
||||
@@ -21,7 +21,7 @@ import (
|
||||
"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/release"
|
||||
)
|
||||
|
||||
// cryptoJarPath — модуль службы пробной подписи bj-crypto (компонент crypto-service.jar).
|
||||
// cryptoJarPath — модуль проверки ключа подписи bj-crypto (компонент crypto-service.jar).
|
||||
const cryptoJarPath = "/opt/bj/crypto-service.jar"
|
||||
|
||||
// ruPlural — форма слова для числа: 1 участник, 2 участника, 5 участников.
|
||||
@@ -133,17 +133,17 @@ func readinessChecks(ctx context.Context, rc *RuntimeConfig) []ReadyCheck {
|
||||
return c
|
||||
}
|
||||
c.State, c.Detail = "ok", "Валидата "+ver
|
||||
// Служба bj-crypto — пробная подпись и проверка ключа из bj; пакеты для НРД подписывает шлюз, поэтому
|
||||
// Служба bj-crypto — проверка ключа подписи из bj (работает ли ключ, его сертификат); пакеты для НРД подписывает шлюз, поэтому
|
||||
// её остановка обмену не мешает. Модуль приезжает с обновлениями — до них службы нет, это не ошибка.
|
||||
if _, err := os.Stat(cryptoJarPath); err == nil {
|
||||
if u := unitRunState("bj-crypto"); !(u.State == "active" && u.Up >= 5*time.Second) {
|
||||
c.State, c.Link = "warn", "/admin/setup#sec-crypto"
|
||||
c.Detail += "; служба пробной подписи bj-crypto не работает (" + pickStr(u.State, "нет") + ") — обмену не мешает: пакеты для НРД подписывает шлюз"
|
||||
c.Detail += "; проверка ключа подписи из bj не работает (служба bj-crypto: " + pickStr(u.State, "нет") + ") — обмену не мешает: пакеты для НРД подписывает шлюз"
|
||||
if cc, ok := release.ComponentByName("crypto-service.jar"); ok && (u.Restarts >= 3 || u.State == "failed") {
|
||||
c.Detail += ". Причина: " + unitFailCause(cc)
|
||||
}
|
||||
} else {
|
||||
c.Detail += ", служба пробной подписи bj-crypto работает"
|
||||
c.Detail += ", проверка ключа подписи работает"
|
||||
}
|
||||
}
|
||||
return c
|
||||
|
||||
@@ -2,7 +2,6 @@ package lkgateway
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -447,19 +446,14 @@ func (h *setupHandlers) testSignCrypto(w http.ResponseWriter, r *http.Request) {
|
||||
payload := []byte("<bj-test ts=\"" + time.Now().UTC().Format(time.RFC3339) + "\">Bridge-and-Join-s sign smoke test</bj-test>")
|
||||
sig, err := cli.SignXMLDSig(r.Context(), payload, "", s.Crypto.Profile)
|
||||
if err != nil {
|
||||
setupFlash(w, r, "Пробная подпись не удалась: "+err.Error())
|
||||
setupFlash(w, r, "Ключ не смог подписать проверочный документ: "+err.Error())
|
||||
return
|
||||
}
|
||||
outPath := "/var/lib/bj/.bj/test-sign.p7s"
|
||||
if err := os.MkdirAll(filepath.Dir(outPath), 0o700); err == nil {
|
||||
_ = os.WriteFile(outPath, sig, 0o600)
|
||||
}
|
||||
b64Preview := base64.StdEncoding.EncodeToString(sig)
|
||||
if len(b64Preview) > 80 {
|
||||
b64Preview = b64Preview[:80] + "..."
|
||||
}
|
||||
setupFlash(w, r, fmt.Sprintf("Пробная подпись OK: CMS detached, %d байт. Сохранена в %s. Префикс base64: %s",
|
||||
len(sig), outPath, b64Preview))
|
||||
setupFlash(w, r, fmt.Sprintf("Ключ работает: проверочный документ подписан (подпись %d байт сохранена в %s).", len(sig), outPath))
|
||||
}
|
||||
|
||||
// SetupData — данные для шаблона admin_setup.html.
|
||||
@@ -1799,7 +1793,7 @@ func (h *setupHandlers) restartCrypto(w http.ResponseWriter, r *http.Request) {
|
||||
// Сайдкар мог уже закрыть соединение до отправки — это нормально.
|
||||
log.Printf("restartCrypto: Shutdown: %v (ожидаемо, если уже закрылся)", err)
|
||||
}
|
||||
setupFlash(w, r, "crypto-service остановлен. systemd поднимет его обратно через ~5 секунд. Через 7-10 секунд обновите страницу.")
|
||||
setupFlash(w, r, "Проверка ключа подписи перезапускается — через 10 секунд обновите страницу.")
|
||||
}
|
||||
|
||||
// restartServer — POST /admin/setup/restart-server. Делает os.Exit(2)
|
||||
|
||||
@@ -153,7 +153,7 @@ func versionProbes(rc *RuntimeConfig) []versionProbe {
|
||||
}},
|
||||
{key: "bj-lk", title: "Личный кабинет клиента (bj-lk)", section: "lk", when: comp("bj-lk"),
|
||||
fn: func(ctx context.Context) (string, string, error) { return componentVersion(ctx, "bj-lk") }},
|
||||
{key: "crypto-service.jar", title: "Криптосервис (crypto-service)", section: "crypto",
|
||||
{key: "crypto-service.jar", title: "Проверка ключа подписи (bj-crypto)", section: "crypto",
|
||||
when: func() bool { return s.Crypto.Provider != "" && s.Crypto.Provider != string(cryptocli.ProviderStub) },
|
||||
fn: func(ctx context.Context) (string, string, error) {
|
||||
cli := cryptocli.New(cryptocli.Config{Provider: cryptocli.Provider(s.Crypto.Provider), SocketPath: s.Crypto.SocketPath, ModulePath: s.Crypto.ModulePath})
|
||||
@@ -167,7 +167,7 @@ func versionProbes(rc *RuntimeConfig) []versionProbe {
|
||||
}},
|
||||
{key: "validata", title: "СКЗИ «Валидата Клиент L» (версия производителя, как на moex.com)", section: "crypto", when: func() bool { return fileExists(validataUtil) },
|
||||
fn: validataVersion},
|
||||
{key: "java", title: "Java (для криптосервиса)", section: "crypto",
|
||||
{key: "java", title: "Java (для проверки ключа)", section: "crypto",
|
||||
when: func() bool { _, err := exec.LookPath("java"); return err == nil },
|
||||
fn: javaVersion},
|
||||
{key: "ish", title: "Интеграционный шлюз НРД (ИШ)", section: "nsd", when: func() bool { return fileExists(ishDepsPath) },
|
||||
|
||||
@@ -242,8 +242,8 @@
|
||||
<p class="muted">Активный профиль: <code>{{if .Settings.Crypto.Profile}}{{.Settings.Crypto.Profile}}{{else}}—{{end}}</code> · провайдер {{if and (not devOn) (or (eq .Settings.Crypto.Provider "stub") (eq .Settings.Crypto.Provider ""))}}<code>не настроен</code>{{else}}<code>{{.Settings.Crypto.Provider}}</code>{{end}}. Подробно — <a href="/admin/help/crypto">справка</a>.</p>
|
||||
<div style="display:flex;gap:8px;flex-wrap:wrap;margin-top:12px">
|
||||
<form method="post" action="/admin/setup/crypto/check" style="margin:0"><button type="submit" class="btn btn-ok">✓ Проверить СКЗИ</button></form>
|
||||
<form method="post" action="/admin/setup/crypto/test-sign" style="margin:0"><button type="submit" class="btn">✎ Пробная подпись</button></form>
|
||||
<form method="post" action="/admin/setup/restart-crypto" style="margin:0" onsubmit="return confirm('Перезапустить crypto-service? Поднимется через ~5 сек.');"><button type="submit" class="btn btn-warn">↻ crypto-service</button></form>
|
||||
<form method="post" action="/admin/setup/crypto/test-sign" style="margin:0"><button type="submit" class="btn">✎ Подписать проверочный документ</button></form>
|
||||
<form method="post" action="/admin/setup/restart-crypto" style="margin:0" onsubmit="return confirm('Перезапустить проверку ключа подписи? Займёт около 5 секунд.');"><button type="submit" class="btn btn-warn">↻ Перезапустить проверку ключа</button></form>
|
||||
<form method="post" action="/admin/setup/restart-server" style="margin:0" onsubmit="return confirm('Перезапустить bj-server? Через 5-10 сек страница вернётся.');"><button type="submit" class="btn btn-secondary">↻ bj-server</button></form>
|
||||
</div>
|
||||
<details style="margin-top:14px">
|
||||
|
||||
@@ -38,7 +38,7 @@ var Components = []Component{
|
||||
{Name: "bj-installer", Title: "Установщик и системные файлы (службы, скрипты)", Path: "/usr/local/sbin/bj-installer", Exec: true, Core: true, Feature: "updates"},
|
||||
// Криптосервис нужен любой установке (подпись и проверка через Валидату), но в образ не входит:
|
||||
// ставится с первым обновлением после ввода ключа — как выделенный из ядра модуль.
|
||||
{Name: "crypto-service.jar", Title: "Криптосервис", Path: "/opt/bj/crypto-service.jar", Unit: "bj-crypto", FromCore: true, Feature: "updates"},
|
||||
{Name: "crypto-service.jar", Title: "Проверка ключа подписи", Path: "/opt/bj/crypto-service.jar", Unit: "bj-crypto", FromCore: true, Feature: "updates"},
|
||||
{Name: "bj-lk", Title: "Личный кабинет клиента", Path: "/opt/bj/bj-lk", Unit: "bj-lk", Exec: true, Feature: "web-cabinet"},
|
||||
{Name: "bj-npr", Title: "Риск-монитор НПР / УДС", Path: "/opt/bj/bj-npr", Unit: "bj-npr", Exec: true, FromCore: true, Feature: "npr"},
|
||||
{Name: "bj-quikexport", Title: "Экспорт QUIK", Path: "/opt/bj/bj-quikexport", Unit: "bj-quikexport", Exec: true, FromCore: true, Feature: "quik-export"},
|
||||
|
||||
Reference in New Issue
Block a user