HTTP là gì?
HTTP là viết tắt của Hypertext Transfer Protocol, và đó là một giao thức – hoặc một cú pháp và trình tự được quy định để trình bày thông tin – được sử dụng để truyền dữ liệu qua mạng. Hầu hết thông tin được gửi qua Internet, bao gồm nội dung trang web và các cuộc gọi API, đều sử dụng giao thức HTTP. Có hai loại thông điệp HTTP chính: yêu cầu (requests) và phản hồi (responses).
Yêu cầu HTTP là gì? Phản hồi HTTP là gì?
HTTP requests được tạo ra bởi trình duyệt của người dùng khi họ tương tác với các trang web. Ví dụ, nếu người dùng nhấp vào một liên kết, trình duyệt sẽ gửi một loạt các yêu cầu “HTTP GET” cho nội dung xuất hiện trên trang đó. Nếu ai đó tìm kiếm trên Google câu hỏi “HTTP là gì?” và bài viết này xuất hiện trong kết quả tìm kiếm, khi họ nhấp vào liên kết, trình duyệt của họ sẽ tạo và gửi một loạt các yêu cầu HTTP để lấy thông tin cần thiết để hiển thị trang.
Các yêu cầu HTTP này đều được gửi đến một máy chủ gốc (origin server) hoặc một máy chủ lưu trữ proxy (proxy caching server), và máy chủ đó sẽ tạo ra một phản hồi HTTP. Phản hồi HTTP là câu trả lời cho các yêu cầu HTTP.
Một yêu cầu HTTP trông như thế nào?
Điều quan trọng cần lưu ý là một yêu cầu HTTP chỉ là một chuỗi các dòng văn bản tuân theo giao thức HTTP. Một yêu cầu GET có thể có dạng như sau:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en
Đoạn văn bản này được tạo ra bởi trình duyệt của người dùng và được gửi qua Internet.
Khi một máy chủ gốc nhận được một yêu cầu HTTP, nó sẽ gửi một phản hồi HTTP, tương tự như sau:
HTTP/1.1 200 OK
Date: Wed, 30 Jan 2019 12:14:39 GMT
Server: Apache
Last-Modified: Mon, 28 Jan 2019 11:17:01 GMT
Accept-Ranges: bytes
Content-Length: 12
Vary: Accept-Encoding
Content-Type: text/plain
Hello World!
HTTPS là gì?
Điều đặc biệt về HTTPS là chữ “S” trong HTTPS viết tắt của từ “secure” (an toàn). HTTPS sử dụng TLS (hoặc SSL) để mã hóa các yêu cầu và phản hồi của HTTP, vì vậy trong ví dụ trên, thay vì văn bản, một kẻ tấn công sẽ thấy một loạt các ký tự ngẫu nhiên.
Thay vì thấy:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en
Kẻ tấn công sẽ thấy:
Các yêu cầu và phản hồi được mã hóa bằng cách sử dụng một chìa khóa mã hóa, giúp ngăn chặn các kẻ tấn công đọc và hiểu được thông tin bên trong chúng. Điều này đảm bảo rằng dữ liệu nhạy cảm của người dùng được bảo vệ khi được gửi qua mạng. Một trang web sử dụng HTTPS có thể được nhận dạng bởi việc hiển thị một biểu tượng khóa xanh trên thanh địa chỉ của trình duyệt.
Trong HTTPS, TLS/SSL mã hóa các yêu cầu và phản hồi HTTP như thế nào?
TLS sử dụng công nghệ mã hóa khóa công khai (public key cryptography): có hai khóa, một khóa công khai (public key) và một khóa riêng tư (private key), và khóa công khai được chia sẻ với các thiết bị khách qua chứng chỉ SSL của máy chủ. Khi một thiết bị khách mở một kết nối với máy chủ, hai thiết bị sử dụng khóa công khai và khóa riêng tư để thống nhất về các khóa mới, được gọi là khóa phiên (session keys), để mã hóa các truyền thông tiếp theo giữa chúng.
Tất cả các yêu cầu và phản hồi của HTTP sau đó được mã hóa bằng các khóa phiên này, để bất kỳ ai nghe trộm chỉ có thể thấy một chuỗi các ký tự ngẫu nhiên, không thể đọc được văn bản.
HTTPS giúp xác thực máy chủ web như thế nào?
HTTPS giúp xác thực máy chủ web bằng cách sử dụng chứng chỉ SSL. Trong khi HTTP dựa trên nguyên tắc tin tưởng mà không cần xác thực danh tính, HTTPS đảm bảo rằng máy chủ web được xác thực là đúng người sở hữu trang web.
Một khóa riêng tư trong chứng chỉ SSL của trang web xác nhận danh tính của máy chủ, tương tự như một thẻ ID xác nhận danh tính của một người. Khi máy khách truy cập trang web, nó sẽ so sánh khóa riêng tư của trang web với khóa công khai trong chứng chỉ SSL, nếu khớp nhau, nó sẽ xác nhận rằng máy chủ thực sự là chủ sở hữu hợp pháp của trang web đó. Việc xác thực này giúp ngăn chặn nhiều loại tấn công, bao gồm:
- Cuộc tấn công On-path;
- Tấn công DNS hijacking;
- Tấn công BGP hijacking;
- Giả mạo tên miền.
Ngoài ra, khi một trang web yêu cầu một chứng chỉ SSL từ một cơ quan chứng thực, cơ quan chứng thực sẽ kiểm tra danh tính của chủ sở hữu trang web và sau đó ký số chứng chỉ SSL của trang web đó bằng một chữ ký số riêng của cơ quan chứng thực. Chữ ký số này xác nhận rằng chứng chỉ SSL được cấp cho máy chủ web được xác thực bởi cơ quan chứng thực đó.
HTTP có an toàn không?
HTTP có an toàn không? Câu trả lời là HTTP không an toàn. Vấn đề đối với HTTP là các yêu cầu được gửi dưới dạng văn bản thuần túy, bất kỳ ai đang theo dõi kết nối đều có thể đọc được nó. Điều này đặc biệt là một vấn đề nghiêm trọng khi người dùng gửi dữ liệu nhạy cảm thông qua một trang web hoặc ứng dụng web, có thể là mật khẩu, số thẻ tín dụng hoặc bất kỳ dữ liệu nào được nhập vào một biểu mẫu và trong HTTP, tất cả các dữ liệu này đều được gửi dưới dạng văn bản thuần túy để cho bất kỳ ai có thể đọc được. (Khi người dùng gửi một biểu mẫu, trình duyệt sẽ chuyển đổi nó thành một yêu cầu HTTP POST thay vì yêu cầu HTTP GET.)
Nếu một trang web sử dụng HTTP thay vì HTTPS, tất cả các yêu cầu và phản hồi đều có thể được đọc bởi bất kỳ ai đang theo dõi phiên làm việc. Một kẻ tấn công có thể đơn giản chỉ cần đọc văn bản trong yêu cầu hoặc phản hồi và biết chính xác thông tin mà người dùng đang yêu cầu, gửi hoặc nhận.
Sự khác biệt giữa HTTP với HTTPS
Dưới đây là một số khác biệt chính giữa các giao thức HTTP so với HTTPS:
- URL HTTP trong thanh địa chỉ trình duyệt của bạn là http://, trong khi URL HTTPS là https://.
- HTTPS được bảo mật và HTTP không được bảo mật.
- HTTPS gửi dữ liệu qua cổng 443, trong khi HTTP sử dụng cổng 80.
- HTTP hoạt động ở application layer, trong khi HTTPS hoạt động ở transport layer.
- Không yêu cầu chứng chỉ SSL cho HTTP; với HTTPS, yêu cầu bạn có một chứng chỉ SSL và được cơ quan chứng thực kí để xác thực.
- HTTP không yêu cầu xác thực tên miền, trong khi HTTPS yêu cầu ít nhất xác thực tên miền và một số chứng chỉ yêu cầu xác thực tài liệu pháp lý.
- Không có mã hóa trong HTTP; với HTTPS, dữ liệu được mã hóa trước khi gửi đi.
Nên sử dụng giao thức HTTP hay HTTPS cho website?
Giữa giao thức HTTP so với HTTPS, thì chúng ta nên sử dụng giao thức HTTPS cho website.
Điều quan trọng là bảo vệ thông tin cá nhân của người dùng và đảm bảo an toàn cho trang web của bạn. HTTPS cung cấp một số lợi ích về bảo mật và bảo vệ trang web của bạn khỏi các cuộc tấn công trên đường truyền, bao gồm mã hoá dữ liệu, xác thực danh tính máy chủ và xác thực tên miền.
Ngoài ra, Google đã thông báo rằng HTTPS là một trong những yếu tố quan trọng để xếp hạng trang web của bạn trên kết quả tìm kiếm của họ. Việc sử dụng HTTPS có thể giúp tăng độ tin cậy và uy tín của trang web của bạn.
Các bước nâng cấp từ HTTP lên HTTPS chi tiết
Nâng cấp từ HTTP lên HTTPS là một quá trình đơn giản nhưng đòi hỏi kiến thức kỹ thuật. Sau đây là các bước cơ bản để nâng cấp từ HTTP lên HTTPS:
- Mua chứng chỉ SSL: Bạn cần mua một chứng chỉ SSL từ một nhà cung cấp dịch vụ chứng thực. Chứng chỉ này sẽ được sử dụng để mã hóa dữ liệu giữa máy khách và máy chủ.
- Cài đặt chứng chỉ SSL: Sau khi mua chứng chỉ SSL, bạn cần cài đặt nó trên máy chủ web. Quá trình cài đặt cụ thể sẽ phụ thuộc vào loại máy chủ web mà bạn đang sử dụng.
- Thiết lập chuyển hướng: Bạn cần thiết lập chuyển hướng từ HTTP sang HTTPS. Điều này sẽ đảm bảo rằng các liên kết trên trang web của bạn được chuyển hướng sang HTTPS để đảm bảo rằng người dùng không bị đưa đến các trang không an toàn.
- Kiểm tra chứng chỉ SSL có hợp lệ không: Điều này để đảm bảo rằng trang web của bạn được bảo vệ bằng HTTPS một cách đầy đủ.
- Cập nhật các liên kết và tài nguyên: Bạn cần cập nhật tất cả các liên kết và tài nguyên trên trang web của bạn để đảm bảo rằng chúng đều sử dụng HTTPS.
- Cập nhật các công cụ tìm kiếm: Nếu trang web của bạn đã được liệt kê trên các công cụ tìm kiếm, bạn cần cập nhật các công cụ này để đảm bảo rằng chúng hiểu rằng trang web của bạn đã được nâng cấp lên HTTPS.
Kết luận
Như vậy, chúng ta đã tìm hiểu về sự khác biệt giữa HTTP và HTTPS. Trong khi HTTP là giao thức không được bảo mật và không đảm bảo an toàn cho người dùng, HTTPS cung cấp các tính năng bảo mật cần thiết để đảm bảo rằng thông tin của người dùng được bảo vệ. Vì vậy, nếu bạn đang xây dựng hoặc quản lý một trang web, hãy sử dụng HTTPS để đảm bảo an toàn và bảo mật cho người dùng của bạn.
Đừng quên áp dụng các bước cần thiết để nâng cấp từ HTTP lên HTTPS và kiểm tra tính hợp lệ của chứng chỉ SSL để đảm bảo rằng trang web của bạn được bảo vệ tốt nhất. Chúc bạn thành công!