Tìm hiểu khái niệm về SNI và vai trò trong trình duyệt web

Fri Dec 30 2022
Tìm hiểu khái niệm về SNI và vai trò trong trình duyệt web

SNI, viết tắt của Server Name Indication, là phần mở rộng của giao thức TLS (giao thức phát triển dựa trên tiêu chuẩn SSL) và được sử dụng phổ biến trong HTTPS. SNI được đưa vào quy trình bắt tay TLS/ SSL (Handshake TLS/ SSL) để đảm bảo rằng các thiết bị khách có thể nhìn thấy chứng chỉ SSL chính xác cho website đang truy cập.

Tiện ích mở rộng SNI cho phép chỉ định tên máy chủ hoặc tên miền của website trong suốt quá trình bắt tay TLS/ SSL, thay vì phải đợi kết nối HTTP mở ra sau quá trình đó. Hay nói theo cách dễ hiểu, SNI giống như việc gửi hàng đến một căn hộ trong toà chung cư, ngoài địa chỉ của chung cư, cần phải có địa chỉ cụ thể của căn hộ đó để đơn hàng đến được đúng người.

SNI giúp ngăn chặn lỗi phổ biến “common name mismatch error” (lỗi tên chứng chỉ SSL không khớp với tên miền website). Đây là lỗi dẫn đến thông báo “your connection is not private" trên trình duyệt của người dùng

Hostname là gì? Virtual hostname là gì?

Hostname hay còn gọi là Tên máy chủ, là nhãn của một thiết bị được kết nối với mạng ví dụ như tên miền hay tên website. Cả hai có đặc điểm chung là đều tách biệt với địa chỉ IP được liên kết với tên miền. Cả hai có đặc điểm chung là đều tách biệt với địa chỉ IP được liên kết với tên miền.

Tên máy chủ ảo (Virtual hostname) là tên máy chủ không có địa chỉ IP riêng và được lưu trữ trên máy chủ cùng với các tên máy chủ khác. Đây là thiết bị ảo vì nó không có máy chủ vật lý chuyên dụng chỉ tồn tại ở dạng kỹ thuật số.

Công dụng phần mở rộng TLS của SNI

Thông thường, máy chủ web bao gồm nhiều hostname hoặc tên miền (là tên các website mà người dùng có thể đọc được). Mỗi hostname sẽ có chứng chỉ SSL riêng nếu website sử dụng giao thức HTTPS.

Tuy nhiên, hầu hết các tên máy chủ đều có cùng địa chỉ IP và nằm trên một máy chủ. Đây không phải là vấn đề đối với giao thức HTTP, vì ngay khi kết nối TCP được mở, máy khách sẽ cho biết website nào đang có người dùng truy cập trong yêu cầu HTTP.

Nhưng trong HTTPS, quá trình bắt tay TLS diễn ra trước khi HTTP bắt đầu. Nếu không có SNI, máy khách không thể cho máy chủ biết tên máy chủ cụ thể là gì. Dẫn đến việc máy chủ có thể tạo sai chứng chỉ SSL cho tên máy chủ. Khi tên trên chứng chỉ SSL không khớp với tên mà máy khách đang truy cập, trình duyệt web sẽ trả về lỗi và bị ngắt kết nối.

Để khắc phục vấn đề này, SNI thêm tên miền vào quy trình bắt tay TLS để quy trình có thể đến đúng tên miền và nhận được chứng chỉ SSL chính xác, đồng thời vẫn đảm bảo quy trình đó diễn ra bình thường.

Điều gì xảy ra nếu trình duyệt của người dùng không hỗ trợ SNI?

Với trường hợp này, người dùng sẽ không thể truy cập một số website nhất định và trình duyệt của họ sẽ trả về thông báo lỗi "Your connection is not private".

Phần lớn các trình duyệt và hệ điều hành hiện nay đều hỗ trợ SNI. Chỉ những phiên bản rất cũ của Internet Explorer, hệ điều hành BlackBerry hay các phần mềm lỗi thời khác mới không hỗ trợ SNI.


Bài viết liên quan

News All