[Security] Phân tích hoạt động của giao thức HTTPS

Để nắm được cơ chế làm việc của giao thức HTTPS được mô tả trong bài viết này, trước hết bạn cần có kiến thức cơ bản về một số khái niệm liên quan sau:
- Symmetric Encryption (hay là Secret Key Encryption) và Asymmetric Encryption (hay Public-key Cryptography).

- Các chức năng của SSL Certificate (một loại digital certificate) cũng như là các thông tin được chứa trong nó.

- Vai trò của Central Authority (CA).

Mẫn Thắng sẽ không đi sâu về các khái niệm trên, các bạn có thể dễ dàng tìm kiếm thông tin về chúng trên Internet.


I. Giới thiệu
Giao thức HTTPS sử dụng port 443, và cung cấp các dịch vụ hay đảm bảo tính chất sau của thông tin:

Confidentiality: sử dụng phương thức encryption để đảm bảo rằng các thông điệp được trao đổi giữa client và server không bị kẻ khác đọc được.
Integrity: sử dụng phương thức hashing để cả client và server đều có thể tin tưởng rằng thông điệp mà chúng nhận được có không bị mất mát hay chỉnh sửa.
Authenticity: sử dụng digital certificate để giúp client có thể tin tưởng rằng server/website mà họ đang truy cập thực sự là server/website mà họ mong muốn vào, chứ không phải bị giả mạo.
Liên quan tới vấn đề này Mẫn có từng viết một bài về Desktop Phishing. Việc nhờ đến bên thứ 3 (CA) để xác thực danh tính (SSL certificate) của website cộng thêm sự chú ý của người dùng rằng website đó có sử dụng HTTPS sẽ giúp loại bỏ hoàn toàn nguy cơ bị Desktop Phishing.

II. Sử dụng HTTPS như thế nào?
Trước hết, muốn áp dụng HTTPS thì trong quá trình cấu hình Webserver, bạn có thể dễ dàng tự tạo ra một SSL certificate dành riêng cho website của mình và nó được gọi là self-signed SSL certificate.

SSL certificate tự cấp này vẫn mang lại tính Confidentiality và Integrity cho quá trình truyền thông giữa server và client. Nhưng rõ ràng là không đạt được tính Authenticity bởi vì không có bên thứ 3 đáng tin cậy nào (hay CA) đứng ra kiểm chứng sự tính xác thực của certificate tự gán này. Điều này cũng giống như việc một người tự làm chứng minh nhân dân (CMND) cho mình rồi tự họ ký tên, đóng dấu luôn vậy!

Vì vậy, đối với các website quan trọng như E-Commerce, Online Payment, Web Mail,… thì họ sẽ mua một SSL certificate từ một Trusted Root CA nổi tiếng như VeriSign, Thawte, và ít tên tuổi hơn thì có GoDaddy, DynDNS… Các CA có 2 nhiệm vụ chính sau:

- Cấp phát và quản lý SSL certificate cho server/website.

- Xác thực sự tồn tại và tính hiệu lực của SSL certificate mà Web client gửi tới cho nó.

Thực chất thì SSL certificate cũng là một loại digitial certificate (một loại file trên máy tính). Vì giao thức HTTPS có dính tới giao thức SSL nên người ta mới đặt tên cho nó là SSL certificate để phân biệt với các loại digital certificate khác như Personal Certificate, Server Certificate, Software Publisher Certificate, Certificate Authority Certificate.

Dưới đây là một số thông tin quan trọng được chứa trong SSL certificate mà bất cứ client nào cũng có thể xem được bằng cách click vào biểu tượng padlock trên thanh Address của Web browser:

- Thông tin về owner của certificate (như tên tổ chức, tên cá nhân hoặc domain của website…).

- Tên và digital signature của CA cấp certificate.

- Khoảng thời gian mà certificate còn hiệu lực sử dụng.

- Public key của server/website. Còn private key được lưu trữ trên chính server (không có trong certificate) và tuyệt đối không thể để lộ cho bất cứ client nào.

- Một số thông tin phụ khác như: loại SSL certificate, các thuật toán dùng để encryption và hashing, chiều dài (tính bằng bit) của key, cơ chế trao đổi key (như RSA, DSA…).
….

Có vài loại SSL certificate khác nhau mà có thời gian Mẫn sẽ đề cập trong các bài viết sau.

III. Quá trình giao tiếp giữa client và server thông qua HTTPS
1. Client gửi request cho một secure page (có URL bắt đầu với https://)

2. Server gửi lại cho client certificate của nó.

3. Client gửi certificate này tới CA (mà được ghi trong certificate) để kiểm chứng.

Giả sử certificate đã được xác thực và còn hạn sử dụng hoặc client vẫn cố tình truy cập mặc dù Web browser đã cảnh báo rằng không thể tin cậy được certificate này (do là dạng self-signed SSL certificate hoặc certificate hết hiệu lực, thông tin trong certificate không đúng…) thì mới xảy ra bước 4 sau.

4. Client tự tạo ra ngẫu nhiên một symmetric encryption key, rồi sử dụng public key (trong certificate) để mã hóa symmetric key này và gửi về cho server.

5. Server sử dụng private key (tương ứng với public key trong certificate ở trên) để giải mã ra symmetric key ở trên.

6. Sau đó, cả server và client đều sử dụng symmetric key đó để mã hóa/giải mã các thông điệp trong suốt phiên truyền thông.

Và tất nhiên, các symmetric key sẽ được tạo ra ngẫu nhiên và có thể khác nhau trong mỗi phiên làm việc với server. Ngoài encryption thì cơ chế hashing sẽ được sử dụng để đảm bảo tính Integrity cho các thông điệp được trao đổi.

IV. Tổng kết
HTTPS là một giao thức phổ biến trên Internet và rất cần thiết để đảm bảo an toàn cho môi trường Web. Tuy nhiên, vẫn có những cách thức mà hacker có thể sử dụng để qua mặt cơ chế bảo vệ của HTTPS.

Để kết thúc bài viết và cũng để các khái niệm liên quan tới HTTPS trở nên gần gũi và dễ hiểu hơn với mọi người, Mẫn sẽ nêu ra một tình huống thực tế sau:



CMND của người A do Công an ở địa phương B cấp. Người A này muốn thực hiện một công việc gì đó rất quan trọng với tổ chức C chẳng hạn. Và giả sử CMND của A là thứ duy nhất mà C có thể dựa vào để tin tưởng được các thông tin về A như khuôn mặt, tên, tuổi, nơi ở… Vì C thấy CMND cũng có thể bị làm giả và để chắc rằng các thông tin về A được ghi trong CMND là thực thì cách tốt nhất là C đem CMND của A đến nhờ bên B xác thực giùm.
Như vậy, có thể coi:
+ Bên A là website
+ Bên B là CA
+ CMND của A chính là SSL Certificate do B cấp
+ Bên C là Web client


Nguồn Tài Liệu
http://manthang.wordpress.com/
SHARE

The Blues

Wellcome to my blog

  • Image
  • Image
  • Image
  • Image
  • Image
    Blogger Comment
    Facebook Comment