Сроки сертификатов — только по нашей организации
В справочнике ИШ — сертификаты всех участников обмена (на 9 — 351: ВТБ, Сбербанк, ТБанк…). «Свой» был любой не НРД/биржа/НКЦ/УЦ, и приходило «Сертификат ключа организации истекает сегодня» по сотруднику Сбербанка. Теперь свой — ИНН в subject равен ИНН нашей организации; уведомления о сроках — только по своим (сертификаты НРД приезжают с обновлением bj); чужие сертификаты не показываются в шаге «Сертификаты». Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -2,11 +2,12 @@ package lkgateway
|
||||
|
||||
// Сроки сертификатов в справочнике ИШ (05.10.2026). Своих сертификатов bj напрямую не видит (ключи — в
|
||||
// Валидате и ИШ), но знает содержимое справочника активного профиля ИШ: его раз в 6 часов читает сверка
|
||||
// сертификатов НРД (nsdcerts.go, NSDCerts.LastStore). Свой сертификат — тот, что не из комплекта НРД,
|
||||
// не самоподписанный (не УЦ) и выдан не НРД, бирже или НКЦ. По нему же отмечается шаг «Сертификаты».
|
||||
// сертификатов НРД (nsdcerts.go, NSDCerts.LastStore). В справочнике — сертификаты всех участников
|
||||
// обмена (на 9 — 351: ВТБ, Сбербанк, ТБанк…). Свой — ИНН в subject равен ИНН нашей организации (22.10.2026;
|
||||
// раньше «своим» был любой не НРД/биржа/НКЦ/УЦ). По нему же отмечается шаг «Сертификаты».
|
||||
//
|
||||
// Уведомления: за 30, 14, 7, 3 и 1 день до окончания и в день окончания — для своего сертификата и для
|
||||
// сертификатов НРД, если им нет замены с более поздним сроком.
|
||||
// Уведомления: за 30, 14, 7, 3 и 1 день до окончания и в день окончания — только по сертификатам нашей
|
||||
// организации (сертификаты НРД приезжают с обновлением bj).
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
@@ -65,26 +66,35 @@ func bundleSerials() map[string]bool {
|
||||
return out
|
||||
}
|
||||
|
||||
// storeCertKind — own (свой), counterpart (НРД/биржа/НКЦ), ca (УЦ) или "" (не сертификат).
|
||||
func storeCertKind(c NSDStoreCert, bundle map[string]bool) string {
|
||||
// storeCertKind — own (нашей организации), counterpart (НРД/биржа/НКЦ), other (другие участники обмена),
|
||||
// ca (УЦ) или "" (не сертификат). ourINN — ИНН нашей организации; пусто (ещё не задан) — своим
|
||||
// считается любой, кроме НРД/биржи/НКЦ/УЦ, как до 22.10.2026.
|
||||
func storeCertKind(c NSDStoreCert, bundle map[string]bool, ourINN string) string {
|
||||
if c.Kind != "x509" {
|
||||
return ""
|
||||
}
|
||||
if c.SelfSigned || strings.Contains(c.SubjectCN, "УЦ") {
|
||||
return "ca"
|
||||
}
|
||||
if bundle[normSerial(c.Serial)] || counterpartINN[subjectINN(c.Subject)] != "" {
|
||||
inn := subjectINN(c.Subject)
|
||||
if bundle[normSerial(c.Serial)] || counterpartINN[inn] != "" {
|
||||
return "counterpart"
|
||||
}
|
||||
if ourINN = strings.TrimLeft(strings.TrimSpace(ourINN), "0"); ourINN != "" && inn != ourINN {
|
||||
return "other"
|
||||
}
|
||||
return "own"
|
||||
}
|
||||
|
||||
// ourOrgINN — ИНН нашей организации для отбора своих сертификатов.
|
||||
func ourOrgINN(s Settings) string { return orgINN(s) }
|
||||
|
||||
// ownStoreCerts — свои сертификаты в справочнике ИШ.
|
||||
func ownStoreCerts(s Settings) []NSDStoreCert {
|
||||
bundle := bundleSerials()
|
||||
bundle, our := bundleSerials(), ourOrgINN(s)
|
||||
var out []NSDStoreCert
|
||||
for _, c := range s.NSDCerts.LastStore {
|
||||
if storeCertKind(c, bundle) == "own" {
|
||||
if storeCertKind(c, bundle, our) == "own" {
|
||||
out = append(out, c)
|
||||
}
|
||||
}
|
||||
@@ -93,12 +103,12 @@ func ownStoreCerts(s Settings) []NSDStoreCert {
|
||||
|
||||
// storeCertsForUI — сертификаты справочника ИШ (кроме УЦ) для шага «Сертификаты»: свой — с отметкой «ключ есть».
|
||||
func storeCertsForUI(s Settings) []cryptocli.Certificate {
|
||||
bundle := bundleSerials()
|
||||
bundle, our := bundleSerials(), ourOrgINN(s)
|
||||
var out []cryptocli.Certificate
|
||||
seen := map[string]bool{}
|
||||
for _, c := range s.NSDCerts.LastStore {
|
||||
k := storeCertKind(c, bundle)
|
||||
if k == "" || k == "ca" || seen[c.Serial] {
|
||||
k := storeCertKind(c, bundle, our)
|
||||
if k == "" || k == "ca" || k == "other" || seen[c.Serial] { // чужие сертификаты участников — не наши
|
||||
continue
|
||||
}
|
||||
seen[c.Serial] = true
|
||||
@@ -136,9 +146,10 @@ func certExpiryTick(rc *RuntimeConfig) {
|
||||
}
|
||||
}
|
||||
changed := false
|
||||
our := ourOrgINN(s)
|
||||
for _, c := range s.NSDCerts.LastStore {
|
||||
kind := storeCertKind(c, bundle)
|
||||
if kind != "own" && kind != "counterpart" {
|
||||
kind := storeCertKind(c, bundle, our)
|
||||
if kind != "own" { // только сертификаты нашей организации
|
||||
continue
|
||||
}
|
||||
until := storeNotAfter(c)
|
||||
|
||||
Reference in New Issue
Block a user