hacktricks/crypto-and-stego/certificates.md

200 lines
16 KiB
Markdown
Raw Normal View History

2024-04-06 19:41:21 +00:00
# Сертифікати
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2024-04-06 19:41:21 +00:00
<details>
2024-04-06 19:41:21 +00:00
<summary>Підтримати HackTricks</summary>
2024-04-06 19:41:21 +00:00
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
2024-04-06 19:41:21 +00:00
</details>
{% endhint %}
2024-04-06 19:41:21 +00:00
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2024-04-06 19:41:21 +00:00
\
Використовуйте [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates) для легкого створення та **автоматизації робочих процесів**, підтримуваних найсучаснішими інструментами спільноти.\
2024-04-06 19:41:21 +00:00
Отримайте доступ сьогодні:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
2024-04-06 19:41:21 +00:00
## Що таке сертифікат
**Публічний ключовий сертифікат** — це цифровий ID, що використовується в криптографії для підтвердження того, що хтось володіє публічним ключем. Він містить деталі ключа, ідентичність власника (суб'єкт) та цифровий підпис від довіреного органу (видавця). Якщо програмне забезпечення довіряє видавцю, а підпис дійсний, можливе безпечне спілкування з власником ключа.
2024-04-06 19:41:21 +00:00
Сертифікати в основному видаються [сертифікаційними центрами](https://en.wikipedia.org/wiki/Certificate\_authority) (CA) в рамках [інфраструктури відкритих ключів](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Інший метод — це [мережа довіри](https://en.wikipedia.org/wiki/Web\_of\_trust), де користувачі безпосередньо перевіряють ключі один одного. Загальний формат для сертифікатів — [X.509](https://en.wikipedia.org/wiki/X.509), який може бути адаптований для специфічних потреб, як зазначено в RFC 5280.
2024-04-06 19:41:21 +00:00
## Загальні поля x509
### **Загальні поля в сертифікатах x509**
У сертифікатах x509 кілька **полів** відіграють критичну роль у забезпеченні дійсності та безпеки сертифіката. Ось розподіл цих полів:
2024-04-06 19:41:21 +00:00
* **Номер версії** позначає версію формату x509.
* **Серійний номер** унікально ідентифікує сертифікат у системі сертифікаційного центру (CA), головним чином для відстеження анулювання.
* Поле **Суб'єкт** представляє власника сертифіката, яким може бути машина, особа або організація. Воно містить детальну ідентифікацію, таку як:
* **Загальна назва (CN)**: домени, охоплені сертифікатом.
* **Країна (C)**, **Місцевість (L)**, **Штат або провінція (ST, S або P)**, **Організація (O)** та **Організаційна одиниця (OU)** надають географічні та організаційні деталі.
* **Виділене ім'я (DN)** охоплює повну ідентифікацію суб'єкта.
* **Видавець** вказує, хто перевірив і підписав сертифікат, включаючи подібні підполя, як у Суб'єкта для CA.
* **Період дійсності** позначається часовими мітками **Не раніше** та **Не пізніше**, що забезпечує, щоб сертифікат не використовувався до або після певної дати.
* Розділ **Публічний ключ**, критично важливий для безпеки сертифіката, вказує алгоритм, розмір та інші технічні деталі публічного ключа.
* **Розширення x509v3** покращують функціональність сертифіката, вказуючи **Використання ключа**, **Розширене використання ключа**, **Альтернативне ім'я суб'єкта** та інші властивості для точного налаштування застосування сертифіката.
2024-04-06 19:41:21 +00:00
#### **Використання ключа та розширення**
* **Використання ключа** ідентифікує криптографічні застосування публічного ключа, такі як цифровий підпис або шифрування ключа.
* **Розширене використання ключа** ще більше звужує випадки використання сертифіката, наприклад, для аутентифікації сервера TLS.
* **Альтернативне ім'я суб'єкта** та **Основна обмеження** визначають додаткові імена хостів, охоплені сертифікатом, та чи є це сертифікатом CA або кінцевого суб'єкта відповідно.
2024-04-06 19:41:21 +00:00
* Ідентифікатори, такі як **Ідентифікатор ключа суб'єкта** та **Ідентифікатор ключа авторитету**, забезпечують унікальність та відстежуваність ключів.
* **Доступ до інформації про авторитет** та **Точки розподілу CRL** надають шляхи для перевірки видавця CA та перевірки статусу анулювання сертифіката.
* **SCT сертифікатів CT** пропонують журнали прозорості, критично важливі для публічної довіри до сертифіката.
2024-04-06 19:41:21 +00:00
```python
# Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509
from cryptography.hazmat.backends import default_backend
# Load an x509 certificate (assuming cert.pem is a certificate file)
with open("cert.pem", "rb") as file:
cert_data = file.read()
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())
# Accessing fields
serial_number = certificate.serial_number
issuer = certificate.issuer
subject = certificate.subject
public_key = certificate.public_key()
print(f"Serial Number: {serial_number}")
print(f"Issuer: {issuer}")
print(f"Subject: {subject}")
print(f"Public Key: {public_key}")
```
### **Різниця між OCSP та CRL Distribution Points**
2024-04-06 19:41:21 +00:00
**OCSP** (**RFC 2560**) передбачає співпрацю клієнта та респондента для перевірки, чи був відкликаний цифровий сертифікат з публічним ключем, без необхідності завантажувати повний **CRL**. Цей метод є більш ефективним, ніж традиційний **CRL**, який надає список серійних номерів відкликаних сертифікатів, але вимагає завантаження потенційно великого файлу. CRL можуть містити до 512 записів. Більше деталей доступно [тут](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm).
2024-04-06 19:41:21 +00:00
### **Що таке Прозорість Сертифікатів**
2024-04-06 19:41:21 +00:00
Прозорість сертифікатів допомагає боротися з загрозами, пов'язаними з сертифікатами, забезпечуючи видимість видачі та існування SSL сертифікатів для власників доменів, ЦС та користувачів. Її цілі:
2024-04-06 19:41:21 +00:00
* Запобігання видачі ЦС SSL сертифікатів для домену без відома власника домену.
* Встановлення відкритої системи аудиту для відстеження помилково або зловмисно виданих сертифікатів.
2024-04-06 19:41:21 +00:00
* Захист користувачів від шахрайських сертифікатів.
#### **Журнали Сертифікатів**
2024-04-06 19:41:21 +00:00
Журнали сертифікатів є публічно доступними, підлягають аудиту, записами сертифікатів, які ведуться мережевими службами. Ці журнали надають криптографічні докази для цілей аудиту. Як органи видачі, так і громадськість можуть подавати сертифікати до цих журналів або запитувати їх для перевірки. Хоча точна кількість серверів журналів не є фіксованою, очікується, що їх буде менше тисячі в усьому світі. Ці сервери можуть незалежно управлятися ЦС, ISP або будь-якою зацікавленою стороною.
2024-04-06 19:41:21 +00:00
#### **Запит**
Щоб дослідити журнали Прозорості Сертифікатів для будь-якого домену, відвідайте [https://crt.sh/](https://crt.sh).
Існують різні формати для зберігання сертифікатів, кожен з яких має свої випадки використання та сумісність. Це резюме охоплює основні формати та надає рекомендації щодо конвертації між ними.
2024-04-06 19:41:21 +00:00
## **Формати**
### **PEM Формат**
2024-04-06 19:41:21 +00:00
* Найбільш поширений формат для сертифікатів.
* Вимагає окремих файлів для сертифікатів та приватних ключів, закодованих у Base64 ASCII.
* Загальні розширення: .cer, .crt, .pem, .key.
* Переважно використовується Apache та подібними серверами.
2024-04-06 19:41:21 +00:00
### **DER Формат**
2024-04-06 19:41:21 +00:00
* Бінарний формат сертифікатів.
* Не містить "BEGIN/END CERTIFICATE" заяв, які є у PEM файлах.
2024-04-06 19:41:21 +00:00
* Загальні розширення: .cer, .der.
* Часто використовується з платформами Java.
### **P7B/PKCS#7 Формат**
2024-04-06 19:41:21 +00:00
* Зберігається у Base64 ASCII, з розширеннями .p7b або .p7c.
* Містить лише сертифікати та ланцюгові сертифікати, виключаючи приватний ключ.
2024-04-06 19:41:21 +00:00
* Підтримується Microsoft Windows та Java Tomcat.
### **PFX/P12/PKCS#12 Формат**
2024-04-06 19:41:21 +00:00
* Бінарний формат, який інкапсулює серверні сертифікати, проміжні сертифікати та приватні ключі в одному файлі.
2024-04-06 19:41:21 +00:00
* Розширення: .pfx, .p12.
* Переважно використовується на Windows для імпорту та експорту сертифікатів.
2024-04-06 19:41:21 +00:00
### **Конвертація Форматів**
2024-04-06 19:41:21 +00:00
**Конверсії PEM** є важливими для сумісності:
2024-04-06 19:41:21 +00:00
* **x509 до PEM**
```bash
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
```
* **PEM до DER**
2024-04-06 19:41:21 +00:00
```bash
openssl x509 -outform der -in certificatename.pem -out certificatename.der
```
* **DER до PEM**
2024-04-06 19:41:21 +00:00
```bash
openssl x509 -inform der -in certificatename.der -out certificatename.pem
```
* **PEM до P7B**
2024-04-06 19:41:21 +00:00
```bash
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
```
* **PKCS7 до PEM**
2024-04-06 19:41:21 +00:00
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
```
**PFX конверсії** є критично важливими для управління сертифікатами на Windows:
2024-04-06 19:41:21 +00:00
* **PFX до PEM**
2024-04-06 19:41:21 +00:00
```bash
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
```
* **PFX до PKCS#8** включає два етапи:
1. Конвертувати PFX в PEM
2024-04-06 19:41:21 +00:00
```bash
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
```
2. Перетворення PEM в PKCS8
2024-04-06 19:41:21 +00:00
```bash
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
```
* **P7B до PFX** також вимагає двох команд:
2024-04-06 19:41:21 +00:00
1. Конвертувати P7B в CER
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
```
2. Перетворення CER та приватного ключа в PFX
2024-04-06 19:41:21 +00:00
```bash
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
```
***
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2024-04-06 19:41:21 +00:00
\
Використовуйте [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates), щоб легко створювати та **автоматизувати робочі процеси**, які підтримуються **найсучаснішими** інструментами спільноти.\
2024-04-06 19:41:21 +00:00
Отримайте доступ сьогодні:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
2024-04-06 19:41:21 +00:00
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2024-04-06 19:41:21 +00:00
<details>
2024-04-06 19:41:21 +00:00
<summary>Підтримайте HackTricks</summary>
2024-04-06 19:41:21 +00:00
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
2024-04-06 19:41:21 +00:00
</details>
{% endhint %}