Đây là hệ thống gửi CV an toàn, sử dụng kết nối TLS, mã hóa AES-RSA, chữ ký số RSA, và đặc biệt là kiểm tra IP whitelist để đảm bảo rằng chỉ những địa chỉ IP hợp lệ mới có thể giao tiếp với server.
| Tính năng | Mô tả |
|---|---|
| 📤 Gửi CV | Người dùng tải lên file .pdf và gửi qua kết nối bảo mật TLS |
| 🔐 Mã hóa & Chữ ký số | Nội dung file được mã hóa bằng AES-CBC, chữ ký số bằng RSA |
| 🔏 Kiểm tra toàn vẹn | Hash SHA-512 kiểm tra tính toàn vẹn dữ liệu |
| 🛡️ Kiểm tra IP | Server kiểm tra IP gửi đến phải nằm trong danh sách cho phép (allowed_ips.json) |
| 🧾 Ghi log truy cập | Mỗi lượt gửi file được ghi log với IP, thời gian và trạng thái |
| 📄 Kiểm tra định dạng | Chỉ cho phép file đúng định dạng .pdf |
| ✅ Phản hồi kết quả gửi | Server gửi ACK nếu kiểm tra thành công, NACK nếu có lỗi |
Client (Flask app) <----TLS----> Server (Python + SSL socket)
| |
Upload PDF Kiểm tra IP
Gửi metadata Giải mã AES
Gửi file mã hóa <-----→ Xác thực chữ ký số
Kiểm tra hash
Lưu file PDF
// allowed_ips.json
{
"allowed_ips": [
"127.0.0.1",
"192.168.1.0/24",
"10.0.0.0/8"
]
}📁 project/
│
├── app.py # Flask App (Client gửi CV)
├── server.py # TLS Server xử lý và xác thực file
├── allowed_ips.json # Danh sách IP được phép
├── upload.html # Giao diện người dùng
├── server.crt / .key # Chứng chỉ TLS
├── access_log.db # Log SQLite
└── received_cv_*.pdf # File đã giải mã và lưu
pip install flask pycryptodome PyPDF2python server.pypython app.py| Mã Test | Mô tả kiểm thử | Kết quả mong đợi |
|---|---|---|
1 |
Gửi file PDF đúng định dạng từ IP hợp lệ | Server phản hồi ACK |
2a |
Gửi file không đúng định dạng PDF | Server từ chối (NACK) |
3a |
IP nằm ngoài danh sách allowed_ips.json |
Kết nối bị từ chối ngay lập tức |
| Thành phần | Công nghệ | Vai trò |
|---|---|---|
| Mã hóa | AES-CBC (256-bit) | Mã hóa nội dung file PDF |
| Chữ ký số | RSA 2048-bit + SHA-512 | Xác thực và chống giả mạo |
| TLS | TLS 1.2 (server.crt) | Bảo vệ kênh truyền client ↔ server |
| IP kiểm soát | allowed_ips.json |
Giới hạn truy cập từ IP được phép |
| Hash | SHA-512 | Kiểm tra tính toàn vẹn file |
- Hệ thống không sử dụng email thực — đây là mô phỏng quá trình gửi CV an toàn.
- Nếu cần gửi thực qua email, có thể kết hợp thêm SMTP sau bước mã hóa.