Tìm hiểu về SNI là gì cũng như cách thức hoạt động của SNI

SNI là viết tắt của Server Name Indication và là một phần mở rộng của giao thức TLS. Nó cho biết tên máy chủ nào đang được trình duyệt liên lạc khi bắt đầu quá trình ‘handshake’. Công nghệ này cho phép một máy chủ kết nối nhiều chứng chỉ SSL với một địa chỉ IP và cổng.

Cách hoạt động trước khi triển khai SNI

 

Khi ai đó truy cập trang web của bạn, trình duyệt web / ứng dụng khách của họ kết nối với máy chủ web và gửi tên và tên miền của trang web đó. Khi thực hiện kết nối SSL / TLS, quá trình này trở nên phức tạp hơn một chút. Trình duyệt sẽ yêu cầu chứng chỉ kỹ thuật số từ máy chủ, trước khi nó thậm chí còn biết trang nào trình duyệt muốn truy cập. Sau đó, nó sẽ so sánh tên trên chứng chỉ từ máy chủ với tên của trang mà nó đang cố tạo kết nối.

Nếu tên phù hợp, kết nối sẽ được thực hiện theo cách thông thường.

Khi tên không khớp, khách truy cập sẽ không nhìn thấy trang web của bạn mà là một thông báo cảnh báo, có thể bị ngắt kết nối khỏi trang web vì kết nối không thành công có thể cho biết một cuộc tấn công giữa người.

Để ngăn chặn điều này, các trang web sử dụng SSL bắt buộc phải có địa chỉ IP của riêng chúng. Điều này cho phép máy chủ web sử dụng địa chỉ IP để kiểm tra trang web mà khách truy cập muốn kết nối và gửi chứng chỉ phù hợp cho trình duyệt hoặc ứng dụng khách.

SNI như một giải pháp

Vì số lượng địa chỉ IP bị giới hạn, yêu cầu mỗi trang web có địa chỉ IP riêng của mình có thể gây ra sự cố trong thời gian dài. Server Name Indication (SNI) là giải pháp cho vấn đề này. Các trình duyệt hỗ trợ SNI sẽ ngay lập tức liên lạc tên của trang web mà khách truy cập muốn kết nối, trong quá trình khởi tạo kết nối bảo mật, để máy chủ biết được chứng chỉ nào cần gửi lại. Điều này cho phép các trình duyệt / máy khách và máy chủ hỗ trợ SNI kết nối nhiều chứng chỉ cho nhiều tên miền đến một địa chỉ IP. Vì vậy, khách truy cập trang web của bạn sẽ không nhận thấy bất kỳ sự khác biệt nào.

Công nghệ SNI khá mới. Việc triển khai của nó diễn ra từ năm 2004 đến năm 2007.

Để thực hiện công nghệ này, thư viện TLS của ứng dụng phải bao gồm SNI và ứng dụng này sẽ chuyển tên máy chủ đến thư viện TLS.

Hơn nữa, thư viện TLS có thể được bao gồm trong chương trình ứng dụng hoặc là một thành phần của hệ điều hành được đề cập. Do vấn đề này, một số trình duyệt triển khai SNI khi chạy trên bất kỳ hệ điều hành nào, trong khi các trình duyệt khác chỉ thực hiện nó khi chạy trên một số hệ điều hành nhất định.

Nếu bạn muốn có đầy đủ chi tiết kỹ thuật về SNI, bạn có thể đọc RFC liên quan.

Danh sách khách hàng và ứng dụng hỗ trợ SNI (danh sách này không phải là cuối cùng và dựa trên điều tra của chúng tôi):

Trình duyệt web
  • Internet Explorer 7 trở lên, trên Windows Vista trở lên.
  • Mozilla Firefox 2.0 trở lên
  • Opera 8.0 (2005) trở lên (giao thức TLS 1.1 phải được bật)
  • Opera Mobile, ít nhất là phiên bản 10.1 beta trên Android
  • Google Chrome (Vista trở lên. XP trên Chrome 6 trở lên OS X 10.5.7 trở lên trên Chrome 5.0.342.1 trở lên)
  • Safari 3.0 trở lên (Mac OS X 10.5.6 trở lên và Windows Vista trở lên)
  • Konqueror / KDE 4.7 hoặc mới hơn
  • MobileSafari trong Apple iOS 4.0 trở lên
  • Trình duyệt mặc định của Android trên Honeycomb (v3.x) hoặc mới hơn
  • Trình duyệt mặc định BlackBerry 10 và BlackBerry Tablet OS
  • Windows Phone 7 trở lên
  • MicroB trên Maemo
  • Odyssey trên MorphOS
Máy chủ
  • Apache 2.2.12 hoặc mới hơn bằng cách sử dụng mod_ssl, hoặc cách khác với mod_gnutls
  • Microsoft Internet Information Server IIS 8 hoặc mới hơn.
  • Nginx với OpenSSL đi kèm được xây dựng với khả năng SNI
  • Apache Traffic Server 3.2.0 hoặc mới hơn.
  • Radware Alteon ADC
  • A10 Networks Thunder ADC 2.7.2 hoặc mới hơn
  • Cherokee nếu được biên dịch với khả năng TLS
  • Phiên bản lighttpd 1.4.x và 1.5.x có bản vá hoặc 1.4.24+ không có bản vá
  • F5 Networks Local Traffic Manager đang chạy phiên bản 11.1 trở lên
  • Ping Access 3.0 hoặc mới hơn
  • Hiawatha (máy chủ web) 8.6 hoặc mới hơn
  • LiteSpeed ​​4.1 trở lên
  • Bảng 2.6 trở lên
  • Proxy ngược đường hầm PageKite
  • Saetta Web Server thông qua OpenSSL
  • LBL®LoadBalancer 9.1 hoặc mới hơn
  • Citrix NetScaler 9.2 hoặc mới hơn (9.3 Tăng cường)
  • Radware Alteon ADC chạy AlteonOS 28.1 hoặc mới hơn
  • HAProxy 1.5 hoặc mới hơn
  • Máy chủ thư EVO
  • Fortinet FortiWeb WAF 5.3 hoặc mới hơn
  • Bảng điều khiển Parallels Plesk (SNI được bật khi Panel được cài đặt trên các hệ điều hành sau:
    • OpenSuSE Linux 11.3 hoặc mới hơn.
    • Ubuntu Linux 10.4 trở lên.
    • Debian Linux 6.0 trở lên.
    • RedHat Linux 6.0 trở lên.
    • CentOS 5.0 hoặc mới hơn (chỉ với Apache, PHP và OpenSSL được cung cấp cùng với Panel).
Thư viện
  • Chỉ dành cho phía máy khách Mozilla NSS 3.11.1
  • OpenSSL
    • 0.9.8f (phát hành ngày 11 tháng 10 năm 2007) – không được biên dịch theo mặc định, có thể được biên dịch bằng tùy chọn cấu hình ‘–enable-tlsext’.
    • 0.9.8j (phát hành ngày 7 tháng 1 năm 2009) qua 1.0.0 (phát hành ngày 29 tháng 3 năm 2010) – được biên dịch theo mặc định
  • GnuTLS
  • wolfSSL (trước đây là CyaSSL) – không được biên dịch theo mặc định, có thể được biên dịch bằng tùy chọn cấu hình ‘–enable-sni’ hoặc ‘–enable-tlsx’.
  • mbed TLS (trước đây là PolarSSL) từ 1.2.0 – được biên dịch theo mặc định
  • libcurl / cURL từ 7.18.1 (phát hành ngày 30 tháng 3 năm 2008) khi được biên soạn dựa trên bộ công cụ SSL / TLS với SNI
  • Python 2.7.9, 3.2 trở lên (mô-đun ssl, urllib [2] và httplib)
  • Qt 4.8
  • Oracle Java 7 JSSE
  • Apache HttpComponents 4.3.2
  • wget 1,14
  • Android 2.3 (Gingerbread) có hỗ trợ một phần nếu ứng dụng sử dụng lớp HttpsURLConnection.
  • Android 4.2 (Jellybean MR1) cho thấy hỗ trợ SNI trên ổ cắm thô thông qua lớp SSLCertificateSocketFactory của nó.
  • IO :: Socket :: SSL (mô-đun Perl / CPAN, hỗ trợ máy khách kể từ phiên bản 1.56, [42] hỗ trợ máy chủ từ 1.83)
  • Pike 7.9.5 (mô-đun SSL)
  • MatrixSSL (máy khách và máy chủ)
  • stunnel (máy khách và máy chủ)
  • Go (máy khách và máy chủ)

Mong rằng qua bài viết bạn sẽ hiểu rõ hơn về công nghệ SNI và những ứng dụng của nó. Nếu như có bất cứ thắc mắc gì, bạn có thể comment bên dưới để được giải đáp một cách nhanh chóng.

bình luận

Leave a Comment