Update tsl_1.md

This commit is contained in:
Dmitry 2025-12-17 17:07:59 +03:00 committed by GitHub
parent b18b54eb31
commit 21e01fe34d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -194,7 +194,7 @@ TSL.xml — ключевой элемент инфраструктуры эле
- Программа должна проверять **подлинность** TSL (например, по электронной подписи самого TSL), а не только его структуру.
- Схема XSD может обновляться; программа должна учитывать версии и поддерживать актуальные форматы.
### ## 6 Напиши алгоритм как программа проверки подписи использует файл tsl.xml по адресу https://e-trust.gosuslugi.ru/app/scc/portal/api/v1/portal/ca/getxml
## 6 Напиши алгоритм как программа проверки подписи использует файл tsl.xml по адресу https://e-trust.gosuslugi.ru/app/scc/portal/api/v1/portal/ca/getxml
https://e-trust.gosuslugi.ru/check/sign#/portal/sig-check
## Алгоритм использования TSL.xml при проверке электронной подписи
@ -318,3 +318,135 @@ GET https://e-trust.gosuslugi.ru/app/scc/portal/api/v1/portal/ca/getxml
* алгоритм должен соответствовать требованиям ФЗ63 «Об электронной подписи»;
* формат TSL должен соответствовать ETSI EN 319 1621.
## 7 Покажи, что все корневые сертификаты - самоподписные
**Да, вы абсолютно правы.** Все корневые сертификаты Удостоверяющих Центров (УЦ) являются **самоподписными** (self-signed). Это фундаментальный принцип архитектуры PKI (Public Key Infrastructure).
## 🔐 **Почему корневые сертификаты самоподписные?**
### **1. Причина: "Курица и яйцо"**
- Чтобы проверить подпись сертификата, нужен сертификат вышестоящего УЦ
- У корневого УЦ **нет вышестоящего** центра
- Поэтому он **подписывает сам себя**, создавая точку доверия
### **2. Технические характеристики:**
```
Root Certificate {
Version: 3
Serial Number: Уникальный
Signature Algorithm: ГОСТ Р 34.10-2012
Issuer: CN=Минцифры России, O=...
Validity: Длительный срок (15-20 лет)
Subject: CN=Минцифры России, O=... (совпадает с Issuer)
Subject Public Key Info: Публичный ключ
Basic Constraints: CA=TRUE, pathlen=не ограничен
Key Usage: keyCertSign, cRLSign
Subject Key Identifier: [хеш]
Authority Key Identifier: [тот же хеш] ← САМОподпись!
Signature: Подписано собственным приватным ключом
}
```
## 🌳 **Пример из анализируемой подписи:**
### **Корневой сертификат Минцифры России:**
- **Issuer:** `CN=Минцифры России, O=Министерство цифрового развития..., C=RU`
- **Subject:** `CN=Минцифры России, O=Министерство цифрового развития..., C=RU`
- **Поля совпадают** - это самоподписанный сертификат
- **Подпись** создана приватным ключом Минцифры
## 🔄 **Иерархия доверия:**
```
┌─────────────────────────────┐
│ Самоподписной Корневой УЦ │ ← Доверенный якорь
│ (Минцифры России) │ (предустановлен в ОС)
└──────────────┬──────────────┘
↓ (подписывает)
┌─────────────────────────────┐
│ Промежуточный УЦ │ ← Аккредитованный УЦ
│ (АО "СКБ Контур") │ (проверяется через OCSP/CRL)
└──────────────┬──────────────┘
↓ (подписывает)
┌─────────────────────────────┐
│ Сертификат конечного │ ← Сертификат пользователя
│ пользователя │ (проверяется через OCSP/CRL)
│ (Иванова Л.А.) │
└─────────────────────────────┘
```
## 🎯 **Ключевые отличия самоподписных сертификатов:**
| Параметр | Самоподписной (Корневой) | Промежуточный/Конечный |
|----------|--------------------------|------------------------|
| **Issuer** | = Subject | ≠ Subject |
| **Проверка подписи** | Не проверяется | Проверяется цепочкой |
| **Доверие** | Предустановлено | Наследуется от корня |
| **Статус** | Не проверяется OCSP/CRL | Проверяется обязательно |
| **Срок** | 15-20+ лет | 1-3 года |
## ⚠️ **Важные нюансы:**
### **1. "Доверенность" корневого сертификата:**
- **Технически:** любой может создать самоподписной сертификат
- **Юридически:** доверенным считается только сертификат, включенный в:
- Реестр Минцифры РФ (для России)
- Trust Store операционной системы
- Список доверенных УЦ браузера
### **2. Отличие от "self-signed certificate" в вебе:**
В контексте веб-серверов:
- **Self-signed** = недоверенный, вызывает ошибки браузера
- **Root CA** = доверенный, предустановлен в ОС
В контексте ЭП в РФ:
- **Самоподписной УЦ** = доверенный корень (Минцифры)
### **3. Проверка корневого сертификата:**
Хотя подпись не проверяется, есть другие проверки:
```
1. Хеш сертификата должен совпадать с предустановленным
2. Срок действия должен быть действителен
3. OID и политики должны соответствовать требованиям
4. Ключевое использование: keyCertSign = TRUE
```
## 📋 **Как это работает на практике:**
### **В вашей подписи:**
1. **Корень:** Минцифры России (самоподписной, доверенный)
2. **Промежуточный:** АО "СКБ Контур" (подписан корнем)
3. **Конечный:** Иванова Л.А. (подписан промежуточным)
### **Проверка цепочки:**
```python
# Псевдокод проверки
def verify_chain(cert, chain):
root = get_trusted_root() # Предустановленный корень
# Проверяем снизу вверх
for cert in reversed(chain):
if cert.is_self_signed(): # Дошли до корня
if cert == root: # Совпадает с доверенным?
return True
else:
return False # Неизвестный корень!
# Проверяем подпись сертификата
issuer_cert = find_issuer(cert, chain)
if not verify_signature(cert, issuer_cert):
return False
return True
```
## 🎓 **Ответ на ваш вопрос:**
**Да, верно.** Все корневые сертификаты являются самоподписными. Но критически важно понимать:
1. **Не каждый самоподписной сертификат** является доверенным корнем
2. **Доверие возникает** только при включении в реестры/хранилища
3. **В PKI России** доверенным корнем является сертификат Минцифры
4. **Статус корня** не проверяется через OCSP/CRL, но проверяется его соответствие предустановленному
Это создает иерархическую систему доверия, где **корень — это якорь**, от которого распространяется доверие ко всем нижестоящим сертификатам через механизмы подписания и проверки.