Сертификаты: срок действия — по сроку закрытого ключа (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:
@@ -95,6 +95,25 @@ certs_list_json(){
|
||||
python3 - "$PROFDIR/local.pse" "$PROFDIR/local.gdbm" <<'PY2'
|
||||
import sys,subprocess,json,re
|
||||
out=[]; seen=set()
|
||||
MON=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
|
||||
def key_not_after(b):
|
||||
# срок закрытого ключа — расширение PrivateKeyUsagePeriod (2.5.29.16), [1] notAfter GeneralizedTime;
|
||||
# у ГОСТ-сертификатов он короче срока самого сертификата (ключ подписи — год, сертификат — до 15 лет)
|
||||
k=b.find(b'\x06\x03\x55\x1d\x10')
|
||||
if k<0: return ''
|
||||
j=k+5
|
||||
try:
|
||||
if b[j]==0x01: j+=3 # critical BOOLEAN
|
||||
if b[j]!=0x04: return ''
|
||||
j+=2 if b[j+1]<0x80 else 2+(b[j+1]&0x7f) # OCTET STRING
|
||||
if b[j]!=0x30: return ''
|
||||
end=j+2+b[j+1]; j+=2
|
||||
while j<end:
|
||||
t,n=b[j],b[j+1]; v=b[j+2:j+2+n].decode('ascii','replace'); j+=2+n
|
||||
if t==0x81 and len(v)>=14:
|
||||
return '%s %d %s:%s:%s %s GMT'%(MON[int(v[4:6])-1],int(v[6:8]),v[8:10],v[10:12],v[12:14],v[0:4])
|
||||
except Exception: pass
|
||||
return ''
|
||||
for p in sys.argv[1:]:
|
||||
store=p.rsplit('.',1)[-1]
|
||||
try: d=open(p,'rb').read()
|
||||
@@ -112,7 +131,7 @@ for p in sys.argv[1:]:
|
||||
sn=g('serial').upper()
|
||||
if sn in seen: i+=4; continue
|
||||
seen.add(sn)
|
||||
out.append({'kind':'x509','store':store,'subject':g('subject'),'subject_cn':cn(g('subject')),'issuer_cn':cn(g('issuer')),'serial':sn,'not_before':g('notBefore'),'not_after':g('notAfter'),'self_signed':g('subject')==g('issuer')})
|
||||
out.append({'kind':'x509','store':store,'subject':g('subject'),'subject_cn':cn(g('subject')),'issuer_cn':cn(g('issuer')),'serial':sn,'not_before':g('notBefore'),'not_after':g('notAfter'),'key_not_after':key_not_after(b),'self_signed':g('subject')==g('issuer')})
|
||||
else:
|
||||
r=subprocess.run(['openssl','crl','-inform','DER','-noout','-issuer','-nextupdate','-nameopt','utf8,sep_comma_plus'],input=b,stdout=subprocess.PIPE,stderr=subprocess.DEVNULL)
|
||||
if r.returncode==0:
|
||||
|
||||
Reference in New Issue
Block a user