# Public Key Infrastructure

## 1. Introduction

Khóa học này sẽ tập trung vào **mã hóa bất đối xứng (asymmetric encryption)** và **môi trường Hạ tầng khóa công khai (PKI – Public Key Infrastructure)**.

#### ✅ Các bài học sẽ được đề cập bao gồm:

1. Giới thiệu về **Tổ chức Chứng thực (CA)** và **Chứng chỉ số**
2. Quản lý **Hạ tầng Khóa Công khai (PKI)**
3. Cách triển khai PKI
4. Ôn tập tổng quan về PKI

#### ▶️ Lộ trình học tập:

Chúng ta sẽ bắt đầu với **tổng quan ngắn gọn về mã hóa**, sau đó là phần giới thiệu các nguyên tắc cơ bản của **hạ tầng khóa công khai (PKI)**.

Bạn cũng sẽ được tìm hiểu các **khái niệm quan trọng liên quan đến quản lý PKI**, phục vụ cho việc thiết lập và duy trì hệ thống bảo mật dựa trên khóa công khai trong tổ chức.

## 2. CA and Certificates

Có hai loại mã hóa chính:

* **Mã hóa đối xứng (Symmetric Encryption)**: Sử dụng **một khóa duy nhất** để mã hóa và giải mã.
* **Mã hóa bất đối xứng (Asymmetric Encryption)**: Sử dụng **cặp khóa** gồm **khóa công khai** và **khóa bí mật**.

Trong cặp khóa bất đối xứng:

* **Khóa công khai (Public Key)**: Được chia sẻ rộng rãi trong hệ thống.
* **Khóa bí mật (Private Key)**: Được người sở hữu giữ kín.

**📧 Cách hoạt động:**

* **Mã hóa thông điệp**: Dùng **khóa công khai của người nhận** → Chỉ người nhận mới giải mã bằng khóa bí mật.
* **Ký số**: Dùng **khóa bí mật của người gửi** để ký → Người nhận xác minh bằng khóa công khai → đảm bảo **tính xác thực và không thể chối bỏ (non-repudiation)**.

<figure><img src="/files/MlCep4P2ZL6hB9KIKmpr" alt=""><figcaption></figcaption></figure>

### 🏛️ **Hạ tầng Khóa Công khai (PKI)**

**PKI** là một hệ thống bao gồm nhiều thành phần để quản lý và sử dụng khóa công khai/bí mật. Một trong những thành phần quan trọng nhất chính là **chứng chỉ số (digital certificate)**.

### 🧾 **Chứng chỉ số (Certificate)**

Chứng chỉ là **một tệp điện tử** dùng để **liên kết một thực thể (người dùng, máy chủ, tổ chức)** với **khóa công khai**.

Ví dụ:\
Khi bạn muốn bảo mật một website, bạn sẽ cần:

* Cấu hình máy chủ với **khóa công khai**
* Nhận một **chứng chỉ số** chứa khóa công khai đó từ CA
* Gán chứng chỉ cho máy chủ để **mã hóa phiên giao tiếp**

📄 **Các trường thông tin trong chứng chỉ:**

<table><thead><tr><th width="240.39999389648438">Thuộc tính</th><th>Mô tả</th></tr></thead><tbody><tr><td><strong>Public Key</strong></td><td>Khóa công khai của chủ sở hữu chứng chỉ</td></tr><tr><td><strong>Algorithm</strong></td><td>Thuật toán mã hóa (RSA, ECC,...)</td></tr><tr><td><strong>Serial Number</strong></td><td>Mã số duy nhất của chứng chỉ</td></tr><tr><td><strong>Subject</strong></td><td>Thông tin về thực thể sở hữu chứng chỉ (CN, Tên công ty,...)</td></tr><tr><td><strong>Issuer</strong></td><td>CA phát hành chứng chỉ</td></tr><tr><td><strong>Valid From / To</strong></td><td>Thời gian hiệu lực của chứng chỉ</td></tr><tr><td><strong>Thumbprint Algorithm</strong></td><td>Thuật toán băm dùng để tạo vân tay số (SHA-256, SHA-1,...)</td></tr><tr><td><strong>Thumbprint</strong></td><td>Giá trị băm (hash) đại diện cho nội dung chứng chỉ</td></tr></tbody></table>

<figure><img src="/files/aInWJW5HkAly8RXn31pG" alt=""><figcaption></figcaption></figure>

Chứng chỉ **được CA ký số**, giúp xác minh nguồn gốc chứng chỉ và bảo vệ chống sửa đổi nội dung.

### 🧪 **Các loại chứng chỉ phổ biến**

<table><thead><tr><th width="283.60003662109375">Loại chứng chỉ</th><th>Mục đích sử dụng</th></tr></thead><tbody><tr><td><strong>Wildcard Certificates</strong></td><td>Áp dụng cho tất cả subdomain (ví dụ: <code>*.example.com</code>)</td></tr><tr><td><strong>SAN Certificates</strong></td><td>Hỗ trợ nhiều domain trong 1 chứng chỉ</td></tr><tr><td><strong>Code Signing Certificates</strong></td><td>Ký mã nguồn để chứng minh nguồn gốc và tính toàn vẹn</td></tr><tr><td><strong>Self-Signed Certificates</strong></td><td>Do chính thực thể tự tạo và tự ký, thường dùng cho <strong>Root CA</strong></td></tr><tr><td><strong>Machine/Computer Certificates</strong></td><td>Mã hóa giao tiếp giữa các máy tính nội bộ</td></tr><tr><td><strong>Email Certificates</strong></td><td>Mã hóa email bằng S/MIME</td></tr><tr><td><strong>User Certificates</strong></td><td>Mã hóa file (ví dụ: dùng với EFS của Microsoft)</td></tr><tr><td><strong>Root Certificates</strong></td><td>Chứng chỉ gốc do Root CA tự ký</td></tr><tr><td><strong>Domain Validation</strong></td><td>Xác thực quyền sở hữu tên miền</td></tr><tr><td><strong>Extended Validation (EV)</strong></td><td>Xác thực kỹ lưỡng cả tên miền và tổ chức sở hữu</td></tr></tbody></table>

### 📦 **Định dạng chứng chỉ số**

<table><thead><tr><th width="135.60000610351562">Định dạng</th><th>Mô tả và phần mở rộng tập tin</th></tr></thead><tbody><tr><td><strong>DER/CER</strong></td><td>Định dạng nhị phân, mở rộng <code>.der</code>, <code>.cer</code></td></tr><tr><td><strong>PEM</strong></td><td>Định dạng ASCII (base64), mở rộng <code>.pem</code>, <code>.crt</code>, <code>.cer</code>, <code>.key</code></td></tr><tr><td><strong>PFX/P12</strong></td><td>Bao gồm <strong>khóa riêng + khóa công khai</strong>, định dạng nhị phân, mở rộng <code>.pfx</code>, <code>.p12</code></td></tr><tr><td><strong>P7B/P7C</strong></td><td>Lưu trữ chuỗi chứng chỉ không kèm private key, định dạng ASCII, mở rộng <code>.p7b</code>, <code>.p7c</code></td></tr></tbody></table>

📝 **Ghi nhớ cho kỳ thi Security+**:

* Dùng `.pfx` nếu cần **export cả private key**
* Dùng `.cer` nếu chỉ cần **export public key**

### 🏢 **Tổ chức Chứng thực (CA -** Certificate Authoritie&#x73;**)**

CA là thành phần trung tâm trong PKI, chịu trách nhiệm:

* **Phát hành**
* **Quản lý vòng đời**
* **Thu hồi** chứng chỉ số

#### 📂 **Các loại CA**

<table><thead><tr><th width="149.19998168945312">Loại CA</th><th>Mô tả</th></tr></thead><tbody><tr><td><strong>Public CA</strong></td><td>Ví dụ: Entrust, DigiCert, Verisign, GoDaddy. Được trình duyệt và hệ thống tin tưởng mặc định.</td></tr><tr><td><strong>Private CA</strong></td><td>Do tổ chức tự triển khai nội bộ, không tốn phí cho mỗi chứng chỉ</td></tr></tbody></table>

<figure><img src="/files/jwh6qLBDDpWM37Gxevrk" alt=""><figcaption></figcaption></figure>

#### 🌳 **Cấu trúc CA: Root và Intermediate**

* **Root CA**: Là CA đầu tiên, sở hữu **chứng chỉ tự ký (self-signed)**. CA này được **giữ offline** để tránh bị tấn công.
* **Intermediate/Subordinate CA**: Được Root CA ký, dùng để phát hành chứng chỉ thực tế → **chia nhỏ rủi ro** nếu bị xâm nhập.

### 📑 **Các thành phần bổ trợ trong PKI**

#### 🛂 **Registration Authority (RA)**

Xác minh danh tính người yêu cầu chứng chỉ → Gửi yêu cầu hợp lệ tới CA

#### 🗃️ **Repository**

Lưu trữ chứng chỉ và khóa công khai. Thường sử dụng **thư mục LDAP** hoặc hệ thống cơ sở dữ liệu. Phải được sao lưu định kỳ.

#### ⚙️ **Online CA vs. Offline CA**

| CA Online           | CA Offline            |
| ------------------- | --------------------- |
| Luôn kết nối mạng   | Không kết nối mạng    |
| Phát hành chứng chỉ | Chỉ dùng để ký CA con |
| Dễ bị tấn công      | An toàn hơn           |

🛡️ **Root CA nên luôn được giữ offline** để bảo vệ tối đa. Nếu Root bị lộ, toàn bộ PKI mất giá trị.

### 📌 **Kết luận**

Trong bài học này, bạn đã tìm hiểu:

* Cơ bản về **mã hóa bất đối xứng** và **PKI**
* Các loại **chứng chỉ số** và định dạng phổ biến
* Cấu trúc tổ chức **CA và RA**
* Tầm quan trọng của chứng chỉ trong việc xác thực và bảo mật thông tin

## 3. Public Key Infrastructure Management

Việc quản lý một hệ thống **PKI** đòi hỏi **kế hoạch cẩn trọng và chặt chẽ**. Trong bài học này, chúng ta sẽ tìm hiểu về:

* **Vòng đời của chứng chỉ số**
* **Phương thức thu hồi chứng chỉ**
* Các **thuật ngữ quan trọng trong vận hành PKI**

### 🔄 **Vòng đời của chứng chỉ số (Certificate Life Cycle)**

Chứng chỉ số trải qua các giai đoạn xác định từ khi được tạo đến khi hết hạn:

1. **Yêu cầu chứng chỉ (Certificate Request):**
   * Người dùng gửi yêu cầu tới RA hoặc CA, ví dụ như yêu cầu bảo mật kết nối nội bộ (intranet).
   * RA sẽ xác minh danh tính, thường qua giao diện web hoặc hệ thống tự động.
2. **Cấp phát chứng chỉ (Certificate Issued):**
   * Sau khi được RA phê duyệt, CA sẽ tạo và **ký số** vào chứng chỉ.
   * Chứng chỉ có thời hạn sử dụng nhất định, thường là **1–2 năm**.
3. **Gia hạn (Renewal):**
   * Sau khi hết hạn, chứng chỉ cần được gia hạn để tiếp tục sử dụng.
   * Nếu không gia hạn, chứng chỉ sẽ bị vô hiệu và các ứng dụng sẽ **không chấp nhận**.
4. **Tạm ngưng và Thu hồi (Suspension & Revocation):**
   * Nếu phát hiện dấu hiệu gian lận, CA có thể **tạm ngưng** (có thể phục hồi) hoặc **thu hồi vĩnh viễn** chứng chỉ.
5. **Hết hạn / Hủy (Expiration / Destruction):**
   * Khi chứng chỉ hết hạn, cần **hủy một cách an toàn**, bao gồm việc xử lý khóa bí mật đi kèm.

### ❌ **Thu hồi chứng chỉ – CRL và OCSP**

Khi cần thu hồi chứng chỉ, CA sẽ thực hiện một trong hai cách:

#### 📜 **CRL – Danh sách chứng chỉ bị thu hồi (Certificate Revocation List):**

* Là danh sách các chứng chỉ bị thu hồi trước thời hạn.
* Được **cập nhật định kỳ** và công khai qua website.
* Ứng dụng sẽ **kiểm tra CRL trước khi tin tưởng chứng chỉ**.

#### ⚡ **OCSP – Giao thức kiểm tra trạng thái chứng chỉ trực tuyến (Online Certificate Status Protocol):**

* Giao thức **truy vấn thời gian thực** trạng thái của chứng chỉ.
* Ứng dụng gửi yêu cầu đến **OCSP Responder** để kiểm tra tính hợp lệ.
* **Nhanh và hiệu quả hơn CRL**, không cần tải toàn bộ danh sách.

#### 📌 **OCSP Stapling:**

* **Máy chủ kiểm tra trước với CA** rồi "đính kèm" trạng thái chứng chỉ trong quá trình **SSL/TLS handshake**.
* Giảm tải cho CA và tăng tốc độ xác minh cho người dùng.

### 🗝️ **Các thuật ngữ PKI quan trọng**

#### 🔐 **Key Recovery và Key Archiving**

* **Key Archiving**: Lưu trữ khóa mã hóa một cách an toàn, dùng khi khóa bị mất hoặc người dùng rời tổ chức.
* **Recovery Agents**: Người/tổ chức được ủy quyền để khôi phục khóa.
* **Key Recovery Policy**: Chính sách về quy trình và bảo mật khi phục hồi khóa.
* **M-of-N Control**: Ví dụ: "2-of-3" nghĩa là cần **2 trong số 3 người được chỉ định** để tiến hành phục hồi → đảm bảo kiểm soát an toàn.

#### 🗂️ **Key Escrow – Ủy thác khóa**

* Một bên thứ ba (ví dụ: cơ quan chính phủ) giữ khóa giải mã.
* Dùng trong các tình huống cần **truy cập dữ liệu mã hóa hợp pháp**.
* **Gây tranh cãi** vì rủi ro bảo mật nếu bên thứ ba bị xâm nhập.

### 🔗 **Mô hình Tin cậy & Chuỗi chứng chỉ**

#### ✅ **Certificate Chaining (Chuỗi xác thực chứng chỉ):**

* Khi trình duyệt truy cập website:
  * Xác minh chứng chỉ website → xác minh chứng chỉ CA trung gian → xác minh chứng chỉ CA gốc.
  * Tất cả tạo thành một **chuỗi xác thực tin cậy (trust chain)**.

#### 🔁 **Cross-Certification (Chứng thực chéo):**

* Cho phép tổ chức A và B **tin tưởng chứng chỉ của nhau** thông qua việc CA của họ thiết lập mối quan hệ chéo.

#### 📛 **HTTP Public Key Pinning (HPKP):**

* Website khai báo public key hash → trình duyệt lưu lại → xác minh các lần kết nối sau.
* Giúp chống lại việc CA bị đánh cắp.
* **Ít được dùng hiện nay**, do rủi ro cao nếu quản lý sai → thay bằng **Certificate Transparency**.

### 🎯 Ghi nhớ cho kỳ thi **Security+**

<table><thead><tr><th width="211.60000610351562">Khái niệm</th><th>Ghi nhớ</th></tr></thead><tbody><tr><td><strong>CRL</strong></td><td>Danh sách chứng chỉ bị thu hồi, cập nhật theo thời gian định kỳ</td></tr><tr><td><strong>OCSP</strong></td><td>Truy vấn thời gian thực để xác minh trạng thái chứng chỉ</td></tr><tr><td><strong>OCSP Stapling</strong></td><td>Máy chủ đính kèm thông tin OCSP giúp tăng hiệu năng kiểm tra</td></tr><tr><td><strong>Key Archiving</strong></td><td>Lưu trữ khóa mã hóa</td></tr><tr><td><strong>Recovery Agent</strong></td><td>Người/nhóm được ủy quyền khôi phục khóa</td></tr><tr><td><strong>M-of-N</strong></td><td>Biện pháp an toàn yêu cầu tối thiểu M người trong N người mới được phục hồi khóa</td></tr><tr><td><strong>Key Escrow</strong></td><td>Ủy thác khóa cho bên thứ ba</td></tr><tr><td><strong>Certificate Chaining</strong></td><td>Xác minh chuỗi chứng chỉ từ website → CA trung gian → CA gốc</td></tr></tbody></table>

## 4. How to Implement PKI

Trong phần này, chúng ta sẽ tìm hiểu cách mà **SSL/TLS** và **chữ ký số** vận hành để **bảo mật thông tin liên lạc**, và hướng dẫn **thiết lập một hạ tầng PKI hoàn chỉnh**.

### 🔐 **Cách hoạt động của SSL/TLS**

Khi một website sử dụng SSL/TLS, toàn bộ dữ liệu trao đổi giữa trình duyệt và máy chủ sẽ được **mã hóa bảo mật**.

**📶 Quy trình giao tiếp bảo mật bằng SSL/TLS:**

1. **Yêu cầu ban đầu**: Trình duyệt người dùng truy cập trang web sử dụng giao thức `https://`, kết nối đến **cổng 443** mặc định.
2. **Máy chủ gửi khóa công khai**: Máy chủ phản hồi bằng **chứng chỉ số chứa khóa công khai**.
3. **Xác thực chứng chỉ**: Trình duyệt xác thực chứng chỉ để đảm bảo **chưa hết hạn, không bị thu hồi**.
4. **Tạo khóa phiên (Session Key)**: Trình duyệt tạo một khóa đối xứng ngẫu nhiên để mã hóa dữ liệu → sau đó mã hóa khóa này bằng **khóa công khai của máy chủ**.
5. **Trao đổi khóa và mã hóa dữ liệu**: Máy chủ nhận khóa phiên đã mã hóa, giải mã bằng **khóa bí mật** → Từ đó, cả hai bên dùng **khóa phiên đối xứng** để trao đổi dữ liệu an toàn.

### ✍️ **Cách hoạt động của chữ ký số**

Chữ ký số đảm bảo **tính xác thực và không thể chối bỏ** của người gửi.

**📨 Quy trình Bob gửi thông điệp có ký số cho Sue:**

1. **Tạo hàm băm**: Bob tạo một giá trị băm (hash) từ thông điệp gốc.
2. **Mã hóa hàm băm**: Bob **mã hóa hash bằng khóa bí mật của mình** → tạo chữ ký số.
3. **Gửi thông điệp**: Bob gửi thông điệp + chữ ký đến Sue.
4. **Giải mã hash**: Sue dùng **khóa công khai của Bob** để giải mã chữ ký số → xác thực rằng nó thực sự được ký bởi Bob.
5. **So sánh và xác minh**: Sue tính lại giá trị băm từ thông điệp và so sánh với giá trị giải mã được → nếu trùng khớp, chứng minh thông điệp không bị chỉnh sửa.

### 🛠️ **Thiết lập một Hạ tầng PKI**

Để triển khai thành công PKI, cần nắm rõ **mã hóa bất đối xứng** và **quản lý chứng chỉ số**.

#### 📉 Các sự cố thường gặp khi triển khai chứng chỉ:

<table><thead><tr><th width="251.60003662109375">Vấn đề</th><th>Giải thích</th></tr></thead><tbody><tr><td><strong>Yêu cầu gia hạn</strong></td><td>Chứng chỉ có thời hạn; nếu không gia hạn đúng lúc sẽ gây gián đoạn dịch vụ</td></tr><tr><td><strong>CA không được tin cậy</strong></td><td>Các ứng dụng chỉ tin cậy CA phổ biến (Entrust, GoDaddy...)</td></tr><tr><td><strong>Tên miền không khớp</strong></td><td>Tên CN (Common Name) trong chứng chỉ <strong>phải khớp tuyệt đối</strong> với URL ứng dụng</td></tr></tbody></table>

🔎 Giải pháp: sử dụng **SAN (Subject Alternative Names)** để hợp lệ hóa nhiều tên miền trong cùng một chứng chỉ.

#### 📚 **Ghi nhớ cho kỳ thi Security+**:

* Chứng chỉ cần **gia hạn định kỳ**.
* Ứng dụng phải **tin tưởng CA phát hành** chứng chỉ.
* **Tên trong chứng chỉ phải trùng khớp** với địa chỉ ứng dụng hoặc máy chủ sử dụng.

### ⚙️ **Cấu hình SSL/TLS cho Web Server**

Để áp dụng chứng chỉ vào các ứng dụng (ví dụ: Web Server), ta thực hiện các bước sau:

1. **Tạo yêu cầu ký chứng chỉ (CSR)**:
   * Dùng trình tạo CSR từ CA hoặc ứng dụng như IIS/Exchange.
   * Có thể sử dụng Microsoft Management Console (MMC) → Certificates Snap-in.
2. **Gửi yêu cầu đến CA**:
   * Nộp CSR qua trang web CA (thường copy nội dung tệp CSR dưới dạng văn bản).
3. **Tải chứng chỉ về**:
   * Sau khi CA cấp chứng chỉ, nhận đường dẫn tải về → lưu về máy tính.
4. **Cài đặt chứng chỉ**:
   * Cài chứng chỉ vào ứng dụng để kích hoạt **giao thức SSL/TLS**.

📌 **Lưu ý kỳ thi**: CSR là **bước đầu tiên** để triển khai PKI cho bất kỳ ứng dụng nào.

### 🧑‍💼 **Quản lý PKI**

Vận hành một PKI yêu cầu thực hiện nhiều tác vụ quản trị:

#### 🔄 **Thu hồi chứng chỉ bị lộ (Revocation)**

1. Mở **Server Manager** → `Tools → Certification Authority`
2. Vào thư mục **Issued Certificates**
3. Click chuột phải vào chứng chỉ cần thu hồi → `All Tasks → Revoke Certificate`

<figure><img src="/files/uQas2t1G9laJXGO8wG2g" alt=""><figcaption></figcaption></figure>

#### 📤 **Công bố CRL (Certificate Revocation List)**

Sau khi thu hồi, bạn cần công bố CRL tại nơi mà ứng dụng có thể truy cập:

1. Trong CA Console → click chuột phải **Revoked Certificates** → `All Tasks → Publish`
2. Chọn loại CRL cần công bố:
   * **New CRL**: Danh sách đầy đủ
   * **Delta CRL**: Chỉ chứa bản cập nhật mới

<figure><img src="/files/WUECqZwhqspfcb949p6z" alt=""><figcaption></figcaption></figure>

#### 🧳 **Triển khai Key Escrow (Lưu ký khóa)**

Key Escrow cho phép **bên thứ ba** giữ khóa giải mã trong trường hợp đặc biệt.

* Cần quy định rõ điều kiện truy cập (ví dụ: **có lệnh tòa án** mới được truy xuất).
* Đảm bảo tuân thủ chính sách an ninh và quyền riêng tư của người dùng.

## 5. Recap Of Public Key Infrastructure

#### 🔐 **1. Chứng chỉ số (Certificate)**

* Là **tệp điện tử** liên kết **khóa công khai** với một **thực thể cụ thể** (cá nhân, thiết bị, tổ chức).
* Được **CA (Certificate Authority)** **ký số**, giúp xác minh nguồn gốc và đảm bảo tính toàn vẹn.

#### 👤 **2. Vai trò trong PKI**

<table><thead><tr><th width="251.60003662109375">Thành phần</th><th>Chức năng</th></tr></thead><tbody><tr><td><strong>RA (Registration Authority)</strong></td><td>Xác minh danh tính người yêu cầu chứng chỉ</td></tr><tr><td><strong>CA (Certificate Authority)</strong></td><td>Cấp phát, quản lý, gia hạn và thu hồi chứng chỉ</td></tr></tbody></table>

#### 🗂️ **3. CRL – Danh sách thu hồi chứng chỉ**

* CA duy trì **danh sách các chứng chỉ đã bị thu hồi (CRL)**.
* Ứng dụng kiểm tra CRL để xác minh chứng chỉ **còn hợp lệ hay không**.

#### ✍️ **4. Chữ ký số (Digital Signature)**

* Người gửi tạo **hash (digest)** từ thông điệp → **mã hóa hash bằng khóa bí mật**
* Người nhận giải mã bằng **khóa công khai của người gửi** → xác minh nguồn gốc và tính toàn vẹn.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://viettaliii.gitbook.io/home/soc-and-dfir/ir/public-key-infrastructure.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
