# Certificates
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** ๐ฌ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** ๐ฆ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## What is a Certificate
**๊ณต๊ฐ ํค ์ธ์ฆ์**๋ ์ํธํ์์ ๋๊ตฐ๊ฐ๊ฐ ๊ณต๊ฐ ํค๋ฅผ ์์ ํ๊ณ ์์์ ์ฆ๋ช
ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋์งํธ ID์
๋๋ค. ์ฌ๊ธฐ์๋ ํค์ ์ธ๋ถ์ ๋ณด, ์์ ์์ ์ ์(์ฃผ์ฒด) ๋ฐ ์ ๋ขฐํ ์ ์๋ ๊ธฐ๊ด(๋ฐ๊ธ์)์ ๋์งํธ ์๋ช
์ด ํฌํจ๋ฉ๋๋ค. ์ํํธ์จ์ด๊ฐ ๋ฐ๊ธ์๋ฅผ ์ ๋ขฐํ๊ณ ์๋ช
์ด ์ ํจํ๋ฉด ํค ์์ ์์์ ์์ ํ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ธ์ฆ์๋ ์ฃผ๋ก [์ธ์ฆ ๊ธฐ๊ด](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์ ์ค๋ช
๋ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์กฐ์ ๋ ์ ์์ต๋๋ค.
## x509 Common Fields
### **x509 ์ธ์ฆ์์ ์ผ๋ฐ ํ๋**
x509 ์ธ์ฆ์์์ ์ฌ๋ฌ **ํ๋**๋ ์ธ์ฆ์์ ์ ํจ์ฑ๊ณผ ๋ณด์์ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฌํ ํ๋์ ์ธ๋ถ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
* **๋ฒ์ ๋ฒํธ**๋ x509 ํ์์ ๋ฒ์ ์ ๋ํ๋
๋๋ค.
* **์ผ๋ จ ๋ฒํธ**๋ ์ธ์ฆ์๋ฅผ ์ธ์ฆ ๊ธฐ๊ด(CA) ์์คํ
๋ด์์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ฉฐ, ์ฃผ๋ก ํ๊ธฐ ์ถ์ ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
* **์ฃผ์ฒด** ํ๋๋ ์ธ์ฆ์์ ์์ ์๋ฅผ ๋ํ๋ด๋ฉฐ, ์ด๋ ๊ธฐ๊ณ, ๊ฐ์ธ ๋๋ ์กฐ์ง์ผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์๊ณผ ๊ฐ์ ์์ธํ ์๋ณ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค:
* **๊ณตํต ์ด๋ฆ(CN)**: ์ธ์ฆ์๊ฐ ์ ์ฉ๋๋ ๋๋ฉ์ธ.
* **๊ตญ๊ฐ(C)**, **์ง์ญ(L)**, **์ฃผ ๋๋ ์ง๋ฐฉ(ST, S ๋๋ P)**, **์กฐ์ง(O)** ๋ฐ **์กฐ์ง ๋จ์(OU)**๋ ์ง๋ฆฌ์ ๋ฐ ์กฐ์ง์ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
* **๊ตฌ๋ณ ์ด๋ฆ(DN)**์ ์ ์ฒด ์ฃผ์ฒด ์๋ณ์ ํฌํจํฉ๋๋ค.
* **๋ฐ๊ธ์**๋ ์ธ์ฆ์๋ฅผ ๊ฒ์ฆํ๊ณ ์๋ช
ํ ์ฌ๋์ ๋ํ๋ด๋ฉฐ, CA์ ๋ํ ์ฃผ์ฒด์ ์ ์ฌํ ํ์ ํ๋๋ฅผ ํฌํจํฉ๋๋ค.
* **์ ํจ ๊ธฐ๊ฐ**์ **Not Before** ๋ฐ **Not After** ํ์์คํฌํ๋ก ํ์๋์ด ์ธ์ฆ์๊ฐ ํน์ ๋ ์ง ์ด์ ์ด๋ ์ดํ์ ์ฌ์ฉ๋์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
* **๊ณต๊ฐ ํค** ์น์
์ ์ธ์ฆ์์ ๋ณด์์ ์ค์ํ ๋ถ๋ถ์ผ๋ก, ๊ณต๊ฐ ํค์ ์๊ณ ๋ฆฌ์ฆ, ํฌ๊ธฐ ๋ฐ ๊ธฐํ ๊ธฐ์ ์ ์ธ๋ถ์ ๋ณด๋ฅผ ์ง์ ํฉ๋๋ค.
* **x509v3 ํ์ฅ**์ ์ธ์ฆ์์ ๊ธฐ๋ฅ์ ํฅ์์ํค๋ฉฐ, **ํค ์ฌ์ฉ**, **ํ์ฅ ํค ์ฌ์ฉ**, **์ฃผ์ฒด ๋์ฒด ์ด๋ฆ** ๋ฐ ์ธ์ฆ์์ ์ ์ฉ์ ์ธ๋ถ ์กฐ์ ํ๋ ๊ธฐํ ์์ฑ์ ์ง์ ํฉ๋๋ค.
#### **ํค ์ฌ์ฉ ๋ฐ ํ์ฅ**
* **ํค ์ฌ์ฉ**์ ๊ณต๊ฐ ํค์ ์ํธํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ณํ๋ฉฐ, ๋์งํธ ์๋ช
๋๋ ํค ์ํธํ์ ๊ฐ์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
* **ํ์ฅ ํค ์ฌ์ฉ**์ ์ธ์ฆ์์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋์ฑ ์ขํ TLS ์๋ฒ ์ธ์ฆ๊ณผ ๊ฐ์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
* **์ฃผ์ฒด ๋์ฒด ์ด๋ฆ** ๋ฐ **๊ธฐ๋ณธ ์ ์ฝ ์กฐ๊ฑด**์ ์ธ์ฆ์๊ฐ ์ ์ฉ๋๋ ์ถ๊ฐ ํธ์คํธ ์ด๋ฆ๊ณผ ์ธ์ฆ์๊ฐ CA์ธ์ง ์ต์ข
์ํฐํฐ ์ธ์ฆ์์ธ์ง๋ฅผ ์ ์ํฉ๋๋ค.
* **์ฃผ์ฒด ํค ์๋ณ์** ๋ฐ **๊ถํ ํค ์๋ณ์**์ ๊ฐ์ ์๋ณ์๋ ํค์ ๊ณ ์ ์ฑ๊ณผ ์ถ์ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
* **๊ถํ ์ ๋ณด ์ ๊ทผ** ๋ฐ **CRL ๋ฐฐํฌ ์ง์ **์ ๋ฐ๊ธ CA๋ฅผ ๊ฒ์ฆํ๊ณ ์ธ์ฆ์ ํ๊ธฐ ์ํ๋ฅผ ํ์ธํ๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค.
* **CT ์ฌ์ ์ธ์ฆ์ SCT**๋ ์ธ์ฆ์์ ๋ํ ๊ณต๊ณต ์ ๋ขฐ๋ฅผ ์ํด ์ค์ํ ํฌ๋ช
์ฑ ๋ก๊ทธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
```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 ๋ฐฐํฌ ์ง์ ์ ์ฐจ์ด**
**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)์์ ํ์ธํ ์ ์์ต๋๋ค.
### **์ธ์ฆ์ ํฌ๋ช
์ฑ์ด๋**
์ธ์ฆ์ ํฌ๋ช
์ฑ์ SSL ์ธ์ฆ์์ ๋ฐ๊ธ ๋ฐ ์กด์ฌ๊ฐ ๋๋ฉ์ธ ์์ ์, CA ๋ฐ ์ฌ์ฉ์์๊ฒ ๊ฐ์ํ๋๋๋ก ํ์ฌ ์ธ์ฆ์ ๊ด๋ จ ์ํ์ ๋์ํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ๊ทธ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
* CA๊ฐ ๋๋ฉ์ธ ์์ ์์ ์ง์ ์์ด ๋๋ฉ์ธ์ ๋ํ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
* ์ค์๋ก ๋๋ ์
์์ ์ผ๋ก ๋ฐ๊ธ๋ ์ธ์ฆ์๋ฅผ ์ถ์ ํ๊ธฐ ์ํ ๊ณต๊ฐ ๊ฐ์ฌ ์์คํ
์ ๊ตฌ์ถํฉ๋๋ค.
* ์ฌ์ฉ์๋ค์ ์ฌ๊ธฐ์ฑ ์ธ์ฆ์๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.
#### **์ธ์ฆ์ ๋ก๊ทธ**
์ธ์ฆ์ ๋ก๊ทธ๋ ๋คํธ์ํฌ ์๋น์ค์ ์ํด ์ ์ง๋๋ ๊ณต๊ฐ ๊ฐ์ฌ ๊ฐ๋ฅํ๊ณ ์ถ๊ฐ ์ ์ฉ ๊ธฐ๋ก์
๋๋ค. ์ด๋ฌํ ๋ก๊ทธ๋ ๊ฐ์ฌ ๋ชฉ์ ์ผ๋ก ์ํธํ์ ์ฆ๊ฑฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๊ธ ๊ธฐ๊ด๊ณผ ๋์ค ๋ชจ๋ ์ด๋ฌํ ๋ก๊ทธ์ ์ธ์ฆ์๋ฅผ ์ ์ถํ๊ฑฐ๋ ๊ฒ์ฆ์ ์ํด ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. ๋ก๊ทธ ์๋ฒ์ ์ ํํ ์๋ ๊ณ ์ ๋์ด ์์ง ์์ง๋ง, ์ ์ธ๊ณ์ ์ผ๋ก ์ฒ ๊ฐ ๋ฏธ๋ง์ผ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ์ด๋ฌํ ์๋ฒ๋ CA, ISP ๋๋ ๊ด์ฌ ์๋ ์ด๋ค ์ฃผ์ฒด์ ์ํด ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋ ์ ์์ต๋๋ค.
#### **์ฟผ๋ฆฌ**
์ด๋ค ๋๋ฉ์ธ์ ๋ํ ์ธ์ฆ์ ํฌ๋ช
์ฑ ๋ก๊ทธ๋ฅผ ํ์ํ๋ ค๋ฉด [https://crt.sh/](https://crt.sh) ๋ฅผ ๋ฐฉ๋ฌธํ์ธ์.
์ธ์ฆ์๋ฅผ ์ ์ฅํ๋ ๋ค์ํ ํ์์ด ์์ผ๋ฉฐ, ๊ฐ ํ์์ ๊ณ ์ ํ ์ฌ์ฉ ์ฌ๋ก์ ํธํ์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ์์ฝ์์๋ ์ฃผ์ ํ์์ ๋ค๋ฃจ๊ณ ์ด๋ค ๊ฐ์ ๋ณํ์ ๋ํ ์ง์นจ์ ์ ๊ณตํฉ๋๋ค.
## **ํ์**
### **PEM ํ์**
* ์ธ์ฆ์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ์์
๋๋ค.
* ์ธ์ฆ์์ ๊ฐ์ธ ํค๋ฅผ ์ํด ๋ณ๋์ ํ์ผ์ด ํ์ํ๋ฉฐ, Base64 ASCII๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
* ์ผ๋ฐ์ ์ธ ํ์ฅ์: .cer, .crt, .pem, .key.
* ์ฃผ๋ก Apache ๋ฐ ์ ์ฌํ ์๋ฒ์์ ์ฌ์ฉ๋ฉ๋๋ค.
### **DER ํ์**
* ์ธ์ฆ์์ ์ด์ง ํ์์
๋๋ค.
* PEM ํ์ผ์์ ๋ฐ๊ฒฌ๋๋ "BEGIN/END CERTIFICATE" ๋ฌธ์ด ์์ต๋๋ค.
* ์ผ๋ฐ์ ์ธ ํ์ฅ์: .cer, .der.
* ์ข
์ข
Java ํ๋ซํผ๊ณผ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
### **P7B/PKCS#7 ํ์**
* Base64 ASCII๋ก ์ ์ฅ๋๋ฉฐ, ํ์ฅ์๋ .p7b ๋๋ .p7c์
๋๋ค.
* ๊ฐ์ธ ํค๋ฅผ ์ ์ธํ๊ณ ์ธ์ฆ์์ ์ฒด์ธ ์ธ์ฆ์๋ง ํฌํจ๋ฉ๋๋ค.
* Microsoft Windows ๋ฐ Java Tomcat์์ ์ง์๋ฉ๋๋ค.
### **PFX/P12/PKCS#12 ํ์**
* ์๋ฒ ์ธ์ฆ์, ์ค๊ฐ ์ธ์ฆ์ ๋ฐ ๊ฐ์ธ ํค๋ฅผ ํ๋์ ํ์ผ์ ์บก์ํํ๋ ์ด์ง ํ์์
๋๋ค.
* ํ์ฅ์: .pfx, .p12.
* ์ฃผ๋ก Windows์์ ์ธ์ฆ์ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ด๋ณด๋ด๊ธฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
### **ํ์ ๋ณํ**
**PEM ๋ณํ**์ ํธํ์ฑ์ ์ํด ํ์์ ์
๋๋ค:
* **x509 to PEM**
```bash
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
```
* **PEM์์ DER๋ก**
```bash
openssl x509 -outform der -in certificatename.pem -out certificatename.der
```
* **DER to PEM**
```bash
openssl x509 -inform der -in certificatename.der -out certificatename.pem
```
* **PEM์์ P7B๋ก**
```bash
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
```
* **PKCS7๋ฅผ PEM์ผ๋ก**
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
```
**PFX ๋ณํ**์ Windows์์ ์ธ์ฆ์๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํฉ๋๋ค:
* **PFX์์ PEM์ผ๋ก**
```bash
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
```
* **PFX to PKCS#8**๋ ๋ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋๋ค:
1. PFX๋ฅผ PEM์ผ๋ก ๋ณํ
```bash
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
```
2. PEM์ PKCS8๋ก ๋ณํํ๊ธฐ
```bash
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
```
* **P7B to PFX** ๋ํ ๋ ๊ฐ์ ๋ช
๋ น์ด ํ์ํฉ๋๋ค:
1. P7B๋ฅผ CER๋ก ๋ณํ
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
```
2. CER ๋ฐ ๊ฐ์ธ ํค๋ฅผ PFX๋ก ๋ณํํ๊ธฐ
```bash
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
```
***
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๊ณ์์ **๊ฐ์ฅ ์ง๋ณด๋** ์ปค๋ฎค๋ํฐ ๋๊ตฌ๋ก ๊ตฌ๋๋๋ **์ํฌํ๋ก์ฐ**๋ฅผ ์ฝ๊ฒ ๊ตฌ์ถํ๊ณ **์๋ํ**ํ์ธ์.\
์ค๋ ๋ฐ๋ก ์ ๊ทผํ์ธ์:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks ์ง์ํ๊ธฐ
* [**๊ตฌ๋
๊ณํ**](https://github.com/sponsors/carlospolop) ํ์ธํ๊ธฐ!
* **๐ฌ [**Discord ๊ทธ๋ฃน**](https://discord.gg/hRep4RUj7f) ๋๋ [**ํ
๋ ๊ทธ๋จ ๊ทธ๋ฃน**](https://t.me/peass)์ ์ฐธ์ฌํ๊ฑฐ๋ **Twitter** ๐ฆ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**๋ฅผ ํ๋ก์ฐํ์ธ์.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) ๋ฐ [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํ์ ๊ณต์ ํ์ธ์.**
{% endhint %}