HTTP
HTTP (Hyper Text Transfer Protocol) là giao thức tầng ứng dụng của bộ giao thức TCP/IP. (Đọc thêm về Bộ Giao thức TCP/IP cũng như về HTTP tại #TCP/IP), thường sử dụng port 80 để trao đổi thông tin giữa Web Server và Web Client – thường là các Web Browser. Giao thức này được sử dụng rất phổ biến nên khi nhìn vào thanh địa chỉ của trình duyệt, nếu không ghi rõ giao thức được sử dụng thì mặc định sẽ là HTTP.
Một đặc điểm của HTTP đó là thông tin trao đổi giữa Web Server và Web Browser sẽ được gửi đi ở dạng nguyên bản, kể cả ID và PASSWORD của các tài khoản online, nếu một máy tính trung gian có thể lấy được các gói tin này, thông tin quan trọng có thể bị rò rỉ.
Ví dụ: Lân la trên mạng tôi tìm được một trang Login vẫn đang sử dụng giao thức HTTP http://page.zaloapp.com/manage/login của Zalo:
Nhập ID 123456789 và Password: abcdefghijk và ấn đăng nhập, cùng lúc đó sử dụng Wireshark để bắt gói tin đăng nhập này ta được:
Nếu đây là tài khoản quan trọng thì việc này thực sự rất nguy hiểm. Vì thế một giao thức HTTP an toàn hơn được sử dụng khi cần phải trao đổi thông tin quan trọng, đó là HTTPS.
HTTPS
HTTPS (Hyper Text Transfer Protocol Secure) ngay chữ Secure cũng nói lên giao thức này là phiên bản an toàn hơn của HTTP. HTTPS thường sử dụng port 443 thay vì port 80 của HTTP để giao tiếp các tầng dưới của TCP/IP. Khi giao thức này được sử dụng, URL trên thanh địa chỉ của trình duyệt sẽ bắt đầu bằng https://:
Đặc điểm của HTTP là thông tin được truyền đi ở dạng nguyên bản mà không được mã hóa, HTTPS sẽ khắc phục được điều này bằng cách mã hóa thông tin giữa hai bên thông qua SSL, nhưng thay vào đó, tốc độ sẽ không được như HTTP.
Thông tin được mã hóa khi sử dụng HTTPS.
####SSL
SSL (Secure Socket Layer ) được tạo ra bởi Netscape để đảm bảo an toàn trong việc trao đổi thông tin giữa Web Servers và Browsers. Để có thể tạo kết nối bằng SSL trên Web Server cần phải cung cấp một chứng chỉ SSL (SSL Certificate), để có được chứng chỉ này, Web Server cần phải đăng ký với một Certificate Authority (CA) để xác minh danh tính Web Server đó. Một số CA phổ biến hiện nay như VeriSign, Entrust, Comodo…
Hoạt động của SSL
Khi đã đăng ký một chứng chỉ SSL, Web Server sẽ tạo ra hai key mã hóa: một Private Key và một Public Key. Public Key dùng để mã hóa thông tin gốc thành thông tin đã mã hóa, và bên nhận sử dụng Private Key để giải mã thông tin đã mã hóa này thành thông tin ban đầu.
Khi trình duyệt yêu cầu tới một trang sử dụng HTTPS:
- Web Server sẽ gửi SSL Certificate của mình, và Web Browser sẽ gửi SSL Certificate này đến Certificate Authority và kiểm tra nó có hợp lệ hay không.
- Nếu hợp lệ, Web Browser sẽ thông báo SSL của Web Server đã được chấp nhận và Web Server sẽ gửi lại bộ Key để mã hóa và giải mã trong quá trình truyền tin. Các bộ Key này giữ nguyên trong quá trình trao đổi và sẽ thay đổi trong phiên trao đổi tiếp theo.
- Web Server và Browser trao đổi dữ liệu đã được mã hóa.
Khi SSL Certificate là hợp lệ, thì trên thanh địa chỉ của trình duyệt sẽ xuất hiện thêm biểu tượng ổ khóa, Nếu không hợp lệ, hoặc nghi ngờ bị giả mạo (Tấn công Man in the Middle) thì trình duyệt Web sẽ cảnh báo và chặn không cho truy cập.
#####SSL Extended Validation Extended Validation (EV) là một hình thức xác thực SSL đặc biệt, không chỉ chứng thực cho tên miền của Web Server mà còn chứng thực cho doanh nghiệp, công ty sở hữu. Để có thể có SSL EV, doanh nghiệp phải cung cấp các giấy phép kinh doanh, thông tin cụ thể của doanh nghiệp và sẽ được kiểm tra kỹ càng có đầy đủ tư cách pháp luật, không gặp những vấn đề về tài chính, thuế… Sở hữu SSL EV sẽ tăng mức độ uy tín của doanh nghiệp với khách hàng, vì thế các công ty, tập đoàn, ngân hàng… đều sử dụng SSL EV. Khi Web Server sử dụng SSL EV, thanh địa chỉ của trình duyệt sẽ có thêm phần thông tin của SSL EV này:
#####Public Key – Private Key
Việc mã hóa thông tin trong HTTPS sử dụng một cặp khóa Public Key và Private Key, thông tin được mã hóa bởi một khóa thì chỉ có thể được giải mã bằng khóa còn lại. Vì thế, một khóa sẽ được giữ bí mật (Private Key) và khóa còn lại sẽ được công khai với mọi người(Public Key). Bất kỳ ai cũng có thể gửi thông tin đã được mã hóa, nhưng chỉ ai có Private Key mới có thể giải mã được. Ở chiều ngược lại, nếu dữ liệu được mã hóa bằng Private Key thì nên nhớ, ai cũng có thể sở hữu Public Key và dữ liệu sẽ không được bảo mật:
Cụ thể hơn
Alice sẽ Generate một cặp Public-Private Key
Khi Alice muốn trao đổi với Bob, Alice phải gửi Public Key của mình cho Bob. Khi Bob muốn gửi thông điệp đến Alice, Bob sẽ mã hóa thông điệp bằng Public Key của Alice.
Tuy nhiên, trong trường hợp Alice trả lời cho Bob, nếu Alice sử dụng Private Key của mình để mã hóa thông điệp và gửi cho Bob thì Không chỉ Bob mà bất kì ai có được Public Key của Alice đều có thể giải mã được (Do nó được public).
(Trong Thực tế thì thường 2 bên muốn giao tiếp với nhau đều có Public Key của nhau… ví dụ trong SSH, Khi lần đầu tiên truy cập vào Server, Bạn sẽ được hỏi có muốn tải Public Key của Server về máy tính hay không?)
Do đó có một cách khác để tránh được sự hớ hênh này là sử dụng Combine Keys của cả Alice và Bob (Diffie–Hellman key exchange).
Public Key Infrastructure
Mô hình của HTTPS, Sử dụng Public/Private Key Có chứng thực từ CA.
Mô hình Mã hóa bất đối xứng Public Key / Private Key được sử dụng khá nhiều trong những giao thức đòi hỏi tính bảo mật do an toàn hơn (Dù vẫn có hạn chế).
#####Symmetric Key Ngược lại với Public - Private Key, Symmetric Key sử dụng cùng một khóa cho việc mã hóa lẫn giải mã, nên được gọi là Mã hóa đối xứng. Thuật toán Mã hóa đối xứng nhanh hơn nhiều so với Mã hóa bất đối xứng như Public Key, nhưng sẽ kém an toàn hơn vì nếu để lọt Symmetric Key thì thông tin xem như không còn được bảo vệ nữa. (Vì mã hóa và giải mã cùng một Key nên khi giao tiếp với nhau, bên Request phải gửi Key cho bên nhận để giải mã và có nguy cơ Key này bị lộ nếu gói tin bị chặn lại.)
Một cách để hạn chế tình trạng này là sử dụng kết hợp Symmetric Key và Public Key
- Đóng gói Symmetric Key bên trong một thông điệp được mã hóa bằng Public Key/ Private Key:
- Sau đó dữ liệu sẽ được mã hóa bằng Symmetric Key để trao đổi:
Như vậy là chúng ta đã tìm hiểu những kiến thức cơ bản về HTTP và HTTPS và độ an toàn của chúng, tuy nhiên trong thời đại hiện nay thì không có gì là an toàn tuyệt đối cả. Đặc biệt là với những hệ thống mạng công cộng như WIFI, LAN… ngay cả khi bạn có sử dụng HTTPS thì Hacker vẫn có thể giả mạo chứng chỉ và lấy cắp thông tin của bạn (Man in the Middle Attack).
Bài viết được lấy từ nguồn STDIO.VN. Đã được chỉnh sửa,bổ sung.
Question: Như bạn đã biết trong PKI (Public Key Infrastructure), chúng ta cần Certificate Authority (CA) để xác định A là A, B là B, chứ không bị giả mạo. Vậy sẽ ra sao nếu chính CA mà chúng ta đã gửi yêu cầu xác thực đến bị giả mạo?!?
Tìm hiểu thêm về Root Certification Authority và Digital Signature sẽ giúp bạn trả lời câu hỏi này. - Wikipedia