# 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_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
## What is a Certificate
A **public key certificate**๋ ์ํธํ์์ ๋๊ตฐ๊ฐ๊ฐ ๊ณต๊ฐ ํค๋ฅผ ์์ ํ๊ณ ์์์ ์ฆ๋ช
ํ๋ ๋์งํธ ID์
๋๋ค. ์ฌ๊ธฐ์๋ ํค์ ์ธ๋ถ์ ๋ณด, ์์ ์์ ์ ์(์ฃผ์ฒด), ๊ทธ๋ฆฌ๊ณ ์ ๋ขฐํ ์ ์๋ ๊ธฐ๊ด(๋ฐ๊ธ์)์ ๋์งํธ ์๋ช
์ด ํฌํจ๋ฉ๋๋ค. ์ํํธ์จ์ด๊ฐ ๋ฐ๊ธ์๋ฅผ ์ ๋ขฐํ๊ณ ์๋ช
์ด ์ ํจํ๋ฉด ํค ์์ ์์์ ์์ ํ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ธ์ฆ์๋ ์ฃผ๋ก [์ธ์ฆ ๊ธฐ๊ด](https://en.wikipedia.org/wiki/Certificate\_authority) (CAs)์ ์ํด [๊ณต๊ฐ ํค ์ธํ๋ผ](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
### **Common Fields in x509 Certificates**
x509 ์ธ์ฆ์์์ ์ฌ๋ฌ **ํ๋**๋ ์ธ์ฆ์์ ์ ํจ์ฑ๊ณผ ๋ณด์์ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋ค์์ ์ด๋ฌํ ํ๋์ ๋ถ๋ฅ์
๋๋ค:
* **Version Number**๋ x509 ํ์์ ๋ฒ์ ์ ๋ํ๋
๋๋ค.
* **Serial Number**๋ ์ธ์ฆ์๋ฅผ ์ธ์ฆ ๊ธฐ๊ด(CA) ์์คํ
๋ด์์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ฉฐ, ์ฃผ๋ก ํ๊ธฐ ์ถ์ ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
* **Subject** ํ๋๋ ์ธ์ฆ์์ ์์ ์๋ฅผ ๋ํ๋ด๋ฉฐ, ์ด๋ ๊ธฐ๊ณ, ๊ฐ์ธ ๋๋ ์กฐ์ง์ผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์๊ณผ ๊ฐ์ ์ธ๋ถ ์๋ณ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค:
* **Common Name (CN)**: ์ธ์ฆ์๊ฐ ์ ์ฉ๋๋ ๋๋ฉ์ธ.
* **Country (C)**, **Locality (L)**, **State or Province (ST, S, ๋๋ P)**, **Organization (O)**, ๋ฐ **Organizational Unit (OU)**๋ ์ง๋ฆฌ์ ๋ฐ ์กฐ์ง์ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
* **Distinguished Name (DN)**๋ ์ ์ฒด ์ฃผ์ฒด ์๋ณ์ ์์ฝํฉ๋๋ค.
* **Issuer**๋ ์ธ์ฆ์๋ฅผ ๊ฒ์ฆํ๊ณ ์๋ช
ํ ์ฌ๋์ ๋ํ๋ด๋ฉฐ, CA์ ๋ํ ์ฃผ์ฒด์ ์ ์ฌํ ํ์ ํ๋๋ฅผ ํฌํจํฉ๋๋ค.
* **Validity Period**๋ **Not Before** ๋ฐ **Not After** ํ์์คํฌํ๋ก ํ์๋์ด ์ธ์ฆ์๊ฐ ํน์ ๋ ์ง ์ด์ ์ด๋ ์ดํ์ ์ฌ์ฉ๋์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
* **Public Key** ์น์
์ ์ธ์ฆ์์ ๋ณด์์ ์ค์ํ ๋ถ๋ถ์ผ๋ก, ๊ณต๊ฐ ํค์ ์๊ณ ๋ฆฌ์ฆ, ํฌ๊ธฐ ๋ฐ ๊ธฐํ ๊ธฐ์ ์ ์ธ๋ถ์ ๋ณด๋ฅผ ์ง์ ํฉ๋๋ค.
* **x509v3 extensions**๋ ์ธ์ฆ์์ ๊ธฐ๋ฅ์ ํฅ์์ํค๋ฉฐ, **Key Usage**, **Extended Key Usage**, **Subject Alternative Name** ๋ฐ ๊ธฐํ ์์ฑ์ ์ง์ ํ์ฌ ์ธ์ฆ์์ ์ ์ฉ์ ์ธ๋ฐํ๊ฒ ์กฐ์ ํฉ๋๋ค.
#### **Key Usage and Extensions**
* **Key Usage**๋ ๊ณต๊ฐ ํค์ ์ํธํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ณํ๋ฉฐ, ๋์งํธ ์๋ช
๋๋ ํค ์ํธํ์ ๊ฐ์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
* **Extended Key Usage**๋ ์ธ์ฆ์์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋์ฑ ์ขํ๋ฉฐ, ์๋ฅผ ๋ค์ด TLS ์๋ฒ ์ธ์ฆ์ ์ํ ๊ฒ์
๋๋ค.
* **Subject Alternative Name** ๋ฐ **Basic Constraint**๋ ์ธ์ฆ์๊ฐ ์ ์ฉ๋๋ ์ถ๊ฐ ํธ์คํธ ์ด๋ฆ๊ณผ ์ธ์ฆ์๊ฐ CA์ธ์ง ์ต์ข
์ํฐํฐ ์ธ์ฆ์์ธ์ง๋ฅผ ์ ์ํฉ๋๋ค.
* **Subject Key Identifier** ๋ฐ **Authority Key Identifier**์ ๊ฐ์ ์๋ณ์๋ ํค์ ๊ณ ์ ์ฑ๊ณผ ์ถ์ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
* **Authority Information Access** ๋ฐ **CRL Distribution Points**๋ ๋ฐ๊ธ CA๋ฅผ ๊ฒ์ฆํ๊ณ ์ธ์ฆ์ ํ๊ธฐ ์ํ๋ฅผ ํ์ธํ๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค.
* **CT Precertificate SCTs**๋ ์ธ์ฆ์์ ๋ํ ๊ณต๊ณต ์ ๋ขฐ๋ฅผ ์ํด ์ค์ํ ํฌ๋ช
์ฑ ๋ก๊ทธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
```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_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates)๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๊ณ์์ **๊ฐ์ฅ ์ง๋ณด๋** ์ปค๋ฎค๋ํฐ ๋๊ตฌ๋ก ๊ตฌ๋๋๋ **์ํฌํ๋ก์ฐ**๋ฅผ ์ฝ๊ฒ ๊ตฌ์ถํ๊ณ **์๋ํ**ํ์ธ์.\
์ง๊ธ ๋ฐ๋ก ์ก์ธ์คํ์ธ์:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
{% 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 %}