Сертификаты: срок действия — по сроку закрытого ключа (PrivateKeyUsagePeriod)

В ГОСТ-сертификатах ключ подписи действует год–15 месяцев, а сам сертификат — до 15 лет;
bj показывал и проверял срок сертификата (например, 06.10.2036 вместо 2027). Теперь
справочник профиля ИШ и сертификаты с флешки берут срок ключа (2.5.29.16), если он раньше;
срок сертификата показывается рядом. У УЦ — по-прежнему срок сертификата.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-21 23:27:28 +03:00
parent 219ed656a2
commit 29e19c78a9
4 changed files with 56 additions and 3 deletions
+12 -1
View File
@@ -233,8 +233,12 @@ type NSDStoreCert struct {
IssuerCN string `json:"issuer_cn"`
Serial string `json:"serial"`
NotBefore string `json:"not_before"`
NotAfter string `json:"not_after"`
NotAfter string `json:"not_after"` // до какой даты действует: срок ключа подписи, если он раньше срока сертификата
SelfSigned bool `json:"self_signed"`
// KeyNotAfter — срок закрытого ключа (PrivateKeyUsagePeriod); CertNotAfter — срок самого сертификата,
// если он позже ключа (в ГОСТ-сертификате ключ подписи действует год, сертификат — до 15 лет)
KeyNotAfter string `json:"key_not_after,omitempty"`
CertNotAfter string `json:"cert_not_after,omitempty"`
}
func nsdStoreFromResult(res map[string]any) []NSDStoreCert {
@@ -244,6 +248,13 @@ func nsdStoreFromResult(res map[string]any) []NSDStoreCert {
for i := range st {
st[i].NotBefore = nsdPrettyDate(st[i].NotBefore)
st[i].NotAfter = nsdPrettyDate(st[i].NotAfter)
st[i].KeyNotAfter = nsdPrettyDate(st[i].KeyNotAfter)
k, kerr := time.Parse("02.01.2006", st[i].KeyNotAfter)
c, cerr := time.Parse("02.01.2006", st[i].NotAfter)
// у УЦ срок ключа — только для выпуска новых сертификатов; проверять им можно весь срок сертификата
if kerr == nil && !st[i].SelfSigned && (cerr != nil || k.Before(c)) {
st[i].CertNotAfter, st[i].NotAfter = st[i].NotAfter, st[i].KeyNotAfter
}
}
return st
}