1. Giao thức HTTPS là gì?
HTTPS (Hypertext Transfer Protocol Secure) là giao thức truyền tải siêu văn bản an toàn. Thực chất, đây chính là giao thức HTTP nhưng tích hợp thêm Chứng chỉ bảo mật SSL/TLS nhằm mã hóa các thông điệp giao tiếp để tăng tính bảo mật. Có thể hiểu, HTTPS là phiên bản HTTP an toàn, bảo mật hơn.
HTTPS hoạt động tương tự như HTTP, tuy nhiên được bổ sung thêm chứng chỉ SSL (Secure Sockets Layer – tầng ổ bảo mật) hoặc TLS (Transport Layer Security – bảo mật tầng truyền tải). Hiện tại, đây là các tiêu chuẩn bảo mật hàng đầu cho hàng triệu website trên toàn thế giới.
Cả SSL và TLS đều sử dụng hệ thống PKI (Public Key Infrastructure -hạ tầng khóa công khai) không đối xứng. Hệ thống này sử dụng hai “khóa” để mã hóa thông tin liên lạc, “khóa công khai” (public key) và “khóa riêng” (private key).
Bất cứ thứ gì được mã hóa bằng khóa công khai chỉ có thể được giải mã bởi khóa riêng và ngược lại. Các tiêu chuẩn này đảm bảo các nội dung sẽ được mã hóa trước khi truyền đi, và giải mã khi nhận. Điều này khiến hacker dù có chen ngang lấy được thông tin cũng không thể “hiểu” được thông tin đó.
2. Cấu trúc
2.1 HTTP- Requests
HTTP Request Method: Là phương thức để chỉ ra hành động mong muốn được thực hiện trên tài nguyên đã xác định.
Cấu trúc của một HTTP Request:
- Một Request-line = Phương thức + URI–Request + Phiên bản HTTP . Giao thức HTTP định nghĩa một tập các giao thức GET, POST, HEAD, PUT … Client có thể sử dụng một trong các phương thức đó để gửi request lên server.
- Có thể có hoặc không các trường header
- Một dòng trống để đánh dấu sự kết thúc của các trường Header.
Request Header Fields: Các trường header cho phép client truyền thông tin bổ sung về yêu cầu, và về chính client, đến server. Một số trường: Accept-Charset, Accept-Encoding, Accept-Language, Authorization, Expect, From, Host, … - Tùy chọn một thông điệp
Khi request đến server, server thực hiện một trong 3 hành động sau:
Server phân tích request nhận được, maps yêu cầu với tập tin trong tập tài liệu của server, và trả lại tập tin yêu cầu cho client.
Server phân tích request nhận được, maps yêu cầu vào một chương trình trên server, thực thi chương trình và trả lại kết quả của chương trình đó.
Request từ client không thể đáp ứng, server trả lại thông báo lỗi
Giao thức HTTP định nghĩa một tập các phương thức request, client có thể sử dụng một trong các phương thức này để tạo request tới HTTP server, dưới đây liệt kê một số phương thức phổ biến.
Một số HTTP Request method thường dùng:
2.2 HTTP – Responses
Cấu trúc của một HTTP response:
- Một Status-line = Phiên bản HTTP + Mã trạng thái + Trạng thái
- Có thể có hoặc không có các trường header
- Một dòng trống để đánh dấu sự kết thúc của các trường header
- Tùy chọn một thông điệp
Mã trạng thái: Thông báo về kết quả khi nhận được yêu cầu và xử lí bên server cho client.
Các kiểu mã trạng thái:
1xx: Thông tin (100 -> 101)
- VD: 100 (Continue), ….
2xx: Thành công (200 -> 206)
- VD: 200 (OK) , 201 (CREATED), …
3xx: Sự điều hướng lại (300 -> 307)
- VD: 305 (USE PROXY), …
4xx: Lỗi phía Client (400 -> 417)
- VD: 403 (FORBIDDEN), 404 (NOT FOUND), …
5xx: Lỗi phía Server (500 -> 505)
- VD: 500 (INTERNAL SERVER ERROR)
3. Cách thức hoạt động
HTTPS hoạt động tương tự như HTTP nhưng được bổ sung thêm SSL và giao thức TLS. Các giao thức này đảm bảo rằng không ai khác ngoài các máy khách và máy chủ có thể hack thông tin, dữ liệu ra ngoài.
Cho dù bạn sử dụng máy tính cá nhân hay công cộng đi chăng nữa, các chứng chỉ SSL vẫn đảm bảo thông tin liên lạc của máy khách với máy chủ luôn được an toàn và chống bị dòm ngó.
3.1 Cách giao thức SSL hoạt động
Sau khi quy trình bắt tay 3 bước của TCP được thiết lập, SSL thông thường sẽ thiết lập theo trình tự các bước như sau:
- Client sẽ gửi tin nhắn “hello” lên server, tin nhắn này cũng bao gồm thông tin về TLS version, cipher suites mà client có thể sử dụng, và một chuỗi ký tự ngẫu nhiên gọi là “client random”.
- Khi nhận được tin “hello” từ client, server sẽ gửi lại tin nhắn “server hello”, tin nhắn này bao gồm cả SSL certificate, cipher suite mà server sẽ sử dụng, và một chuỗi ký tự ngẫu nhiên gọi là “server random”.
- Khi nhận được tin “server hello” từ server, client sẽ lấy SSL certificate trong tin nhắn đó và gửi yêu cầu tới CA (là nơi cấp SSL certificate cho server) để xác thực xem mình có đang nhận tin từ chính chủ hay không.
- Client gửi một chuỗi ký tự ngẫu nhiên gọi là “premaster secret”, chuỗi ký tự này được mã hóa bằng public key có trong SSL certificate nhận từ server. Chuỗi ký tự này chỉ được giải mã bằng private key mà server đang giữ.
- Server nhận chuỗi ký tự trên và dùng private key để giải mã nó.
- Cả 2 phía client và server sẽ tạo các khóa session key từ “client random”, “server random” và “premaster secret”. Từ giờ, các tin nhắn gửi và nhận ở 2 phía sẽ được mã hoá và giải mã bằng các session key này.
- Client gửi tin “finished” đã được mã hoá bằng session key ở trên.
- Server gửi tin “finished” đã được mã hoá bằng session key ở trên.
- Từ giờ trở đi, các tin nhắn gửi và nhận ở 2 phía sẽ sử dụng session key để mã hoá và giải mã.
3.2 Cách server tạo SSL certificate
Có một số cách để tạo SSL certificate:
- Server có thể tự tạo SSL certificate cho chính mình mà không cần request tới certificate authority (CA), cách này được gọi là self-sign certificate. Sử dụng self-sign certificate giúp cho công ty không mất phí SSL certificate do CA cung cấp mà vẫn có thể mã hoá dữ liệu trên internet. Nhược điểm của cách này là browser sẽ không xác thực được với CA là SSL certificate nhận được có phải của chính chủ hay không nên browser sẽ hiển thị tin nhắn cảnh báo cho dù trang web đó là https:
- Server có thể yêu cầu CA cung cấp SSL certificate để mình cài đặt, server phải gửi Certificate Signing Request (CSR) cho CA để CA tạo SSL certificate: Certificate Signing Request (CSR) là yêu cầu ký chứng chỉ mà server gửi tới CA. CSR bao gồm các thông tin về server như tên domain, tên công ty sở hữu domain, địa điểm, và public key do server cung cấp. CSR được tạo ra cùng với cặp private key – public key, public key sẽ được bao gồm trong CSR gửi lên CA, private key được server giữ lấy để xác thực SSL certificate do CA cung cấp. Sau khi CA nhận được CSR từ server, CA sẽ tạo ra một SSL certificate cho server tải về và cài đặt, SSL certificate này chỉ hoạt động với private key mà server đang giữ.
4. Ưu điểm nhược điểm
4.1 Ưu điểm
- HTTPS bảo mật thông tin người dùng:
Giao thức HTTPS sử dụng phương thức mã hóa (encryption) để đảm bảo các thông điệp trao đổi giữa máy khách và máy chủ không bị kẻ thứ ba (hackers) đọc được.
- Tránh lừa đảo bằng website giả mạo:
Với giao thức HTTPS, trước khi dữ liệu giữa máy khách và máy chủ được mã hóa để tiếp tục trao đổi, trình duyệt trên máy khách sẽ yêu cầu kiểm tra chứng chỉ SSL từ máy chủ, đảm bảo rằng rằng người dùng đang giao tiếp với đúng đối tượng mà họ muốn. Chứng chỉ SSL/TLS của HTTPS sẽ giúp xác minh đó là website chính thức của doanh nghiệp chứ không phải là website giả mạo.
- Giao thức HTTPS tăng uy tín website đối với người dùng:
Một số trình duyệt web phổ biến như Google Chrome, Mozilla Firefox, Microsoft Edge, hay Apple Safari đều có những cảnh báo người dùng về những website “không bảo mật” sử dụng HTTP. Động thái này giúp bảo vệ thông tin của người dùng khi lướt web, bao gồm thông tin cá nhân, thẻ ngân hàng và dữ liệu nhạy cảm khác.
Làm SEO rất nên sử dụng HTTPS: Kể từ 2014, Google đã thông báo sẽ đẩy xếp hạng tìm kiếm cho các website sử dụng giao thức HTTPS, nhằm khuyến khích các website chuyển đổi sang HTTPS. Điều này cũng có nghĩa các website chưa chuyển đổi sẽ bị giảm lợi thế cạnh tranh so với các website HTTPS.
4.2 Nhược điểm
HTTPS chậm hơn HTTP, nhưng không đáng kể. Nhược điểm duy nhất của HTTPS so với HTTP là sử dụng HTTPS khiến tốc độ giao tiếp (duyệt web, tải trang đích) giữa Client và Server chậm hơn HTTP. Tuy nhiên nhờ công nghệ phát triển, sự khác biệt đã đạt tới giới hạn tiệm cận bằng 0.