Secure Socket Layer – SSL (Phần 2): Các giao thức bảo mật SSL

SSL Record Protocol

SSL Record Protocol nhận dữ liệu từ các giao thức con SSL lớp cao hơn và xử lý việc phân đoạn, nén, xác thực và mã hóa dữ liệu. Chính xác hơn, giao thức này lấy một khối dữ liệu có kích cỡ tùy ý làm dữ liệu nhập và tọa một loạt các đoạn dữ liệu SSL làm dữ liệu xuất (hoặc còn được gọi là các bản ghi) nhỏ hơn hoặc bằng 16,383 byte.

Hình 1.1: Các bước SSL Record Protocol
Hình 1.1: Các bước SSL Record Protocol
Hình 1.2: Cấu trúc mẩu tin SSL Record Protocol.
Hình 1.2: Cấu trúc mẩu tin SSL Record Protocol.

Các bước khác nhau của SSL Record Protocol vốn đi từ một đoạn dữ liệu thô đến một bản ghi SSL Plaintext (bước phân đoạn), SSL Compressed (bước nén) và SSL Ciphertext (bước mã hóa) được minh họa trong hình 1.1. Sau cùng, mỗi bản ghi SSL chứa các trường thông tin sau đây:

  • Loại nội dung.
  • Số phiên bản của giao thức.
  • Chiều dài.
  • Tải trọng dữ liệu (được nén và được mã hóa tùy ý).
  • MAC.

Loại nội dung xác định giao thức lớp cao hơn vốn phải được sử dụng để sau đó xử lý tải trọng dữ liệu bản ghi SSL (sau khi giải nén và giải mã hóa thích hợp).

Số phiên bản của giao thức xác định phiên bản SSL đang sử dụng (thường là version 3.0)

Mỗi tải trọng dữ liệu bản ghi SSL được nén và được mã hóa theo phương thức nén hiện hành và thông số mật mã được xác định cho session SSL.

Lúc bắt đầu mỗi session SSL, phương pháp nén và thông số mật mã thường được xác định là rỗng. Cả hai được xác lập trong suốt quá trình thực thi ban đầu SSL Handshake Protocol. Sau cùng, MAC được thêm vào mỗi bản ghi SSL. Nó cung cấp các dịch vụ xác thực nguồn gốc thông báo và tính toàn vẹn dữ liệu. Tương tự như thuật toán mã hóa, thuật toán vốn được sử dụng để tính và xác nhận MAC được xác định trong thông số mật mã của trạng thái session hiện hành. Theo mặc định, SSL Record Protocol sử dụng một cấu trúc MAC vốn tương tự nhưng vẫn khác với cấu trúc HMAC hơn. Có ba điểm khác biệt chính giữa cấu trúc SSL MAC và cấu trúc HMAC:

  1. Cấu trúc SSL MAC có một số chuỗi trong thông báo trước khi hash để ngăn các hình thức tấn công xem lại riêng biệt.
  2. Cấu trúc SSL MAC có chiều dài bản ghi.
  3. Cấu trúc SSL MAC sử dụng các toán tử ghép, trong khi cấu trúc MAC sử dụng moduloe cộng 2.

Tất cả những điểm khác biệt này hiện hữu chủ yếu vì cấu trúc SSL MAC được sử dụng trước cấu trúc HMAC trong hầu như tất cả thông số kỹ thuật giao thức bảo mật Internet. Cấu trúc HMAC cũng được sử dụng cho thông số kỹ thuật giao thức TLS gần đây hơn.

Như được minh họa trong hình 1.1, một số giao thức con SSL được xếp lớp trên SSL Record Protocol. Mỗi giao thức con có thể tham chiếu đến các loại thông báo cụ thể vốn được gửi bằng cách sử dụng SSL Record Protocol. Thông số kỹ thuật SSL 3.0 xác định ba giao thức SSL sau đây:

  • Alert Protocol.
  • Handshake Protocol.
  • ChangeCipherSpec Protocol.

Tóm lại, SSL Alert Protocol được sử dụng để chuyển các cảnh báo thông qua SSL Record Protocol. Mỗi cảnh báo gồm 2 phần, một mức cảnh báo và một mô tả cảnh báo.

SSL Handshake Protocol là giao thức con SSL chính được sử dụng để hỗ trợ xác thực client và server và để trao đổi một khóa session. Do đó SSL Handshake Protocol trình bày tổng quan và được thảo luận trong phần tiếp theo.

Sau cùng, SSL ChangeCipherSpec Protocol được sử dụng để thay đổi giữa một thông số mật mã này và một thông số mật mã khác. Mặc dù thông số mật mã thường được thay đổi ở cuối một sự thiết lập quan hệ SSL, nhưng nó cũng có thể được thay đổi vào bất kỳ thời điểm sau đó.

Ngoài những giao thức con SSL này, một SSL Application Data Protocol được sử dụng để chuyển trực tiếp dữ liệu ứng dụng đến SSL Record Protocol.

SSL Handshake Protocol

SSL Handshake Protocol là giao thức con SSL chính được xếp lớp trên SSL Record Protocol. Kết quả, các thông báo thiết lập quan hệ SSL được cung cấp cho lớp bản ghi SSL nơi chúng được bao bọc trong một hoặc nhiều bản ghi SSL vốn được xử lý và được chuyển như được xác định bởi phương pháp nén và thông số mật mã của session SSL hiện hành và các khóa mật mã của nối kết SSL tương ứng. Mục đích của SSL Handshake Protocol là yêu cầu một client và server thiết lập và duy trì thông tin trạng thái vốn được sử dụng để bảo vệ các cuộc liên lạc. Cụ thể hơn, giao thức phải yêu cầu client và server chấp thuận một phiên bản giao thức SSL chung, chọn phương thức nén và thông số mật mã, tùy ý xác thực nhau và tạo một khóa mật chính mà từ đó các khóa session khác nhau dành cho việc xác thực và mã hóa thông báo có thể được dẫn xuất từ đó.
Tóm lại, việc thực thi SSL Handshake Protocol giữa một Client và một Server có thể được tóm tắt như sau:

Secure Socket Layer SSL Phần 2 Các giao thức bảo mật SSL

Khi Client muốn kết nối với Server, nó thiết lập một nối kết TCP với cổng HTTPS (vốn không được đưa vào phần mô tả giao thức) và gởi một thông báo Client Hello đến server ở bước 1 của sự thực thi SSL Handshake Protocol. Client cũng có thể gởi một thông báo Client Hello nhằm phản hồi lại một thông báo Hello Request hoặc chủ động thương lượng lại các tham số bảo mật của một nối kết hiện có. Thông báo Client Hello bao gồm các trường sau đây:

  • Số của phiên bản SSL cao nhất được biểu hiện bởi client (thường là 3.0).
  • Một cấu trúc ngẫu nhiên do client tạo ra gồm một tem thời gian 32 bit có dạng UNIX chuẩn và một giá trị 28 byte được tạo ra bởi một bộ tạo số giả ngẫu nhiên.
  • Một định danh session mà client muốn sử dụng cho nối kết này.
  • Một danh sách các bộ mật mã client hỗ trợ.
  • Một danh sách các phương pháp nén mà client hỗ trợ.

Chú ý rằng trường session identity (định danh session) nên rỗng nếu session SSL hiện không tồn tại hoặc nếu client muốn tạo các tham số bảo mật mới. Ở một trong hai trường hợp, một trường session Identity không rỗng là xác định một session SSL hiện có giữa client và server (nghĩa là một session có các tham số bảo mật mà client muốn sử dụng lại.). Định danh session có thể bắt nguồn từ một nối kết trước đó, nối kết này hoặc một nối kết đang hoạt động. Cũng chú ý rằng danh sách các bộ mật mã được hỗ trợ, được chuyển từ client đến server trong thông báo Client Hello, chứa các tổ hợp thuật toán mật mã được hỗ trợ bởi client theo thứ tự ưu tiêm. Mỗi bộ mật mã xác định một thuật toán trao đổi khóa và một thông báo mật mã. Server sẽ chọn một bộ mật mã hoặc nếu các lựa chọn có thể chấp nhận được không được trình bầy, trả về một thông báo lỗi và đóng nối kết một cách phù hợp. Sau khi đã gởi thông báo Client Hello, client đợi một thông báo Server Hello. Bất kỳ thông báo khác được trả về bởi server ngoại trừ một thông báo Hello Request được xem như là một lỗi vào thời điểm này.

Ở bước 2, server xử lý thông báo Client Hello và đáp ứng bằng một thông báo lỗi hoặc thông báo Server Hello. Tương tự như thông báo Client Hello, thông báo Server Hello có các trường sau đây:

  • Một số phiên bản server chứa phiên bản thấp hơn của phiên bản được đề nghị bởi client trong thông báo Client Hello và được hỗ trợ cao nhất bởi Server.
  • Một cấu trúc ngẫu nhiên do server tạo ra cũng gồm một tem thời gian 32bit có dạng UNIX chuẩn và một giá trị 28bit được tạo ra bởi một bộ tạo số ngẫu nhiên.
  • Một định danh session tương ứng với nối kết này.
  • Một bộ mật mã được chọn từ bởi server từ danh sách các bộ mật mã được hỗ trợ bởi client.
  • Một phương pháp nén được chọn bởi server từ danh sách các thuật toán nén được hỗ trợ bởi client.

Nếu định danh session trong thông báo Client Hello không rỗng, server tìm trong cache session của nó nhằm tìm ra một mục tương hợp. Nếu mục tương hợp được tìm thấy và server muốn thiết lập nối kết mới bằng cách sử dụng trạng thái session tương ứng, server đáp ứng bằng cùng một giá trị như được cung cấp bởi client. Chỉ địn này là một session được tiếp tục lại và xác định rằng cả hai phía phải tiến hành trực tiếp với các thông báo Change CipherSpec và Finished được trình bày thêm bên dưới. Nếu không, trường này chứa một giá trị khác nhận biết một session mới. Server cũng có thể trả về một trường định danh session rỗng để biểu thị rằng session sẽ không được lưu trữ và do đó không thể được tiếp tục sau đó. Cũng chú ý rằng trong thông báo Server Hello, server chọn một bộ mật mã và một phương pháp nén từ các danh sách được cung cấp bởi client trong thông báo Client Hello. Các thuật toán trao đổi khóa, xác thực, mã hóa và xác thực thông báo được xác định bởi bộ mã được chọn bởi server và được làm lộ ra trong thông báo Server Hello. Các bộ mật mã vốn đã được xác định trong giao thức SSL về cơ bản giống như bộ mật mã đã xác định cho TLS (như được tóm tắt ở các bản 1.4 đến 1.7 trong những bài viết trước).

Ngoài thông báo Server Hello, server cũng phải gởi các thông báo khác đến client. Ví dụ, nếu server sử dụng sự xác thức dựa vào chứng nhân, server gởi chứng nhận site của nó đến client trong một thông báo Certificate tương ứng. Chứng nhận phải thích hợp cho thuật toán trao đổi khóa của bộ mật mã được chọn và thường là một chứng nhận X.509v3. Cùng loại thông báo sẽ được sử dụng sau đó cho sự đáp ứng của client đối với thông báo sẽ được sử dụng sau đó cho sự đáp ứng của client đối với thông báo CertificateRequest của server. Trong trường hợp của các chứng nhận X.509v3, một chứng nhận có thể thực sự tham chiếu đến toàn bộ một chuỗi các chứng nhận, được sắp xếp theo thứ tự với chứng nhận của đối tượng gởi trước tiên theo sau là bất kỳ chứng nhận CA tiến hành theo trình tự hướng đến một CA gốc (vốn sẽ được chấp nhận bởi client).

Tiếp theo, server có thể gởi một thông báo Server Key Exchange đến client nếu nó không có chứng nhận, một chứng nhận vốn có thể được sử dụng chỉ để xác nhận các chữ ký kỹ thuật số hoặc sử dụng thuật toán trao đổi khóa dựa vào token Foritezza (KEA). Rõ ràng, thông báo này không được yêu cầu nếu chứng nhận site gồm một khóa chung RSA vốn có thể được sử dụng trong việc mã hóa. Ngoài ra, một server không nặc danh có thể tùy ý yêu cầu một chứng nhận cá nhân để xác thực client. Do đó, nó gởi một thông báo CertificateRequest đến client. Thông báo này chứa một danh sách các loại chứng nhận được yêu cầu, được phân loại theo thứ tự ưu tiên của server cũng như một danh sách các tên được phân biệt cho các CA có thể chấp nhận. Ở cuối bước 2, server gởi một thông báo Server HelloDone đến client để chỉ định sự kết thúc Server Hello và các thông báo đi kèm.

Sau khi nhận Server Hello và các thông báo đi kèm, client xác nhận rằng chứng nhận site server (nếu được cung cấp) là hợp lệ và kiểm tra nhằm bảo đảm rằng các thông số bảo mật được cung cấp trong thông báo Server Hello có thể được chấp nhận. Nếu server yêu cầu sự xác thực client, client gởi một thông báo Certificate vốn chứa một chứng nhận cá nhân cho khóa chung của người dùng đến server ở bước 3. Tiếp theo, client gởi một thông báo Client Key Exchange có dạng phụ thuộc vào thuật toán cho mỗi khóa được chọn bởi server:

  • Nếu RSA được sử dụng cho việc xác thực server và trao đổi khóa, client tạo một khóa mật tiền chính 48 byte, mã hóa nó bằng khóa chung được tìm thấy trong chứng nhận site hoặc khóa RSA tạm thời từ thông báo Server Key Exchange và gởi kết quả trở về server trong thông báo Client Key Exchange. Lần lượt server sử dụng khóa riêng tương ứng để giải mã khóa mật chính.
  • Nếu các token Foritezza được sử dụng để trao đổi khóa, client dẫn xuất một khóa mã hóa token (TEK) bằng cách sử dụng KEA. Phép tình KEA cảu client sử dụng khóa chung từ chứng nhận server cùng với một số tham số riêng trong token của client. Client gởi các tham số chung cần thiết cho server để cũng tạo TEK, sử dụng các tham sô riêng của nó. Nó tạo một khóa mật chính, bao bọc nó bằng cách sử dụng TEK và gởi kết quả cùng với một số vector khởi tạo đến server như là một phần của thông báo Client Key Exchange. Lần lượt, server có thể giải mã khóa mật chính một cách thích hợp. Thuật toán trao đổi khóa này không được sử dụng rộng rãi.

Nếu sự xác thực client được yêu cầu, client cũng gởi một thông báo Certificate Verify đến server. Thông báo này được sử dụng để cung cấp sự xác thực rõ ràng định danh của người dùng dựa vào chứng nhận các nhân. Nó chỉ được gởi theo sau một chứng chỉ client vốn có khả năng tạo chữ ký (tất cả chứng nhận ngoại trừ các chứng nhận chứa các tham số DiffeHallman cố định). Sau cùng, client hoàn tất bước 3 bằng cách gởi một thông báo Change CipherSpec và một thông báo Finished tương ứng đến server. Thông báo Finished luôn được gởi ngay lập tức sau thông báo Change CipherSpec để xác nhận rằng các tiến trình trao đổi khóa và xác thực đã thành công. Thực tế, thông báo Finished là thông báo đầu tiên vốn được bảo vệ bằng các thuật toán mới được thương lượng và các khóa session. Nó chỉ có thể được tạo và được xác nhận nếu những khóa này được cài đặt một cách phù hợp ở cả hai phía. Không đòi hỏi sự báo nhận thông báo Finished; các phía có thể bắt đầu gởi dữ liệu được mã hóa ngay lập tức sau khi đã gởi thông báo Finished. Việc thực thi SSL Handshake Protocol hoàn tất bằng việc cũng yêu cầu server gởi một thông báo Change CipherSpec và một thông báo Finished tương ứng đến client ở bước 4.

Sau khi sự thiết lập SSL hoàn tất, một nối kết an toàn được thiết lập giữa client và server. Nối kết này bây giờ có thể được sử dụng để gởi dữ liệu ứng dụng vốn được bao bọc bởi SSL Record Protocol. Chính xác hơn, dữ liệu ứng dụng có thể được phân đoạn, được nén, hoặc được mã hóa và đước xác thực theo SSL Record Protocol cũng như thông tin trạng thái session và nối kết vốn bây giờ được thiết lập (tùy thuộc việc thực thi SSL Handshake Protocol).

SSL Handshake Protocol có thể được rút ngắn nếu client và server quyết định tiếp tục lại một session SSL được thiết lập trước đó (và vẫn được lưu trữ) hoặc lặp lại một session SSL hiện có. Trong trường hợp này, chỉ ba dòng thông báo và tổng cộng sáu thông báo được yêu cầu. Các dòng thông báo tương ứng có thể được tóm tắt như sau:

Secure Socket Layer SSL Phần 2 Các giao thức bảo mật SSL

Ở bước 1, client gởi một thông báo Client Hello đến server vốn có một định danh session cần được tiếp tục lại. Lần lượt server kiểm tra cache session của nó để tìm một mục tương hợp. Nếu một mục tương hợp được tìm thấy, server muốn tiếp tục lại nối kết bên dưới trạng thái session đã xác định, nó trả về một thông báo Server Hello với cùng một định danh session ở bước 2. Vào thời điểm này, cả client lẫn server phải gởi các thông báo Change CipherSpec và Finished đến nhau ở bước 2 và 3. Một khi việc tái thiết lập session hoàn tất, client và server có thể bắt đầu trao đổi dữ liệu ứng dụng.

Những bổ sung SSL Client (SSL Client Implementations)

Một nguyên nhân chính mà những người quản trị mạng yêu cầu đưa ra những giao thức SSL VPNs mà không yêu cầu bất cứ loại phần mềm đặc biệt của VPN Client nào để được cài đặt trước trên những máy tính để bàn của người sử dụng. Tất nhiên, người sử dụng cần biết một vài phần mềm cần thiết, giống như một trình duyệt web hỗ trợ SSL, đặc thù với cả Java và ActiveX cũng được hổ trợ, và hầu như những tính năng này đã được cài sẵn trên máy tính (trừ một vài trường hợp đặc biệt).

Có 3 loại SSL Client Implementation tổng quát:

  • Clientless.
  • Thin client.
  • Network client.

Bởi vì chỉ một trình duyệt web được yêu cầu trên máy tính người sử dụng, SSL client thông thường được xem như là “Clientless” hoặc “Webified”. Vì thế SSL VPN thỉnh thoảng được gọi là Clientless VPN. Điều trở ngại chính của một Clientless VPN là chỉ giao thông dạng web có thể được bảo vệ.

Đặc thù của một Thin client là phần mềm java hoặc ActiveX đã tải xuống thông qua SSL VPN đến máy tính người sử dụng. Nó cho phép một tập hợp nhỏ những ứng dụng không phải là web được vận chuyển thông qua SSL VPN. Trong việc truy cập dựa vào mạng, một SSL client được cài đặt trên máy tính của người sử dụng; tuy nhiên, đặc tính này được tải xuống máy tính của người sử dụng.

SSL Protection

SSL VPN không cần thiết cung cấp việc bảo vệ của dữ liệu ở tầng network, chẳng hạn như IPSec, PPTP, và L2TP. Client SSL VPN cung cấp việc bảo vệ cho những ứng dụng web ở tầng Session (tầng thứ 5) mà chúng sử dụng trình duyệt web. Vì thế, nó sử dụng việc bảo vệ giao thông ở một vài thứ được giới hạn, cho ứng dụng giao thông được bảo vệ, một vài cách sự truy cập của người sử dụng đến ứng dụng phải thông qua một trình duyệt web. Tất nhiên, bất kỳ một cách kết nối kiểu HTTP có thể dễ dàng được bảo vệ bởi vì người sử dụng sử dụng trình duyệt web cho kiểu chức năng này, nhưng điều này có thể xuất hiện những vấn đề cho những kiểu ứng dụng khác, chẳng hạn như Telnet, POP3, SMTP, SNMP, ping, traceroute, FTP, IP telephony, Citrix, Oracle’s SQL*net, tập tin và việc chia sẽ máy in thông qua Windows hoặc Unix và nhiều thứ khác.

Sự khác nhau giữa IPSec và SSL VPNs:

  • IPSec cung cấp sự bảo vệ cho những gói IP và những giao thức đã vận chuyển hai mạng hoặc giữa hai máy.
  • SSL VPNs cung cấp việc bảo vệ cho sự truy cập của người sử dụng đến những dịch vụ và những ứng dụng trên mạng.

Kiến trúc mạng:

Secure Socket Layer SSL Phần 2 Các giao thức bảo mật SSL

SSL được cấu hình trên Router:

  • Chuẩn độc lập.
  • Giải quyết ECT và kết nối với một hub server DMVPN.

Hoạt động:

  • Dùng một trình duyệt web được enable SSL,người dùng thiết lập một kết nối đến SSL VPN.
  • Phiên SSL VPN được thiết lập.
  • Người dùng truy cập trong cùng một mạng.

Chú ý: SSL VPN cung cấp một lối đi vào mạng. Nó luôn được thiết lập sau tường lửa.

Đặc điểm:

  • Dùng IE để thiết lập một kết nối đến cổng SSL VPN.
  • Cổng SSL VPN sẽ đáp ứng với người dùng đăng nhập vào trang HTML.
  • Usename và password sẽ được xác nhận đến cổng cho việc chứng thực với máy chủ RADIUS.
  • Nếu một phiên được thiết lập, cổng sẽ được duy trì băng cách gửi một phiên ”cookies”.
  • Cookies này phải ghi nhớ tất cả các ngừời dùng HTTP tiếp theo để yêu cầu cho việc chứng thực tại cổng SSL VPN.
  • Nếu cookies này bị lỗi hay bị hỏng, phiên này sẽ bị ngưng và người dùng sẽ không truy cập trong cùng mạng được nữa.
  • Việc dùng phiên để ghi nhớ mãi cho đến khi người dùng log out, phiên này sẽ ngưng hay bị xoá sạch bởi cổng SSL VPN.
  • Trang SSL VPN và các toolbar sẽ được trình bày trên trình duyệt web của người dùng.
  • Từ trang này người dùng có thể truy cập đến các trang HTTP có sẵn bằng cách nhấn vào ” Start Application Access” link, người dùng có thể truy cập lại đến các server bên trong được cấu hình thông qua cổng chuyển tiếp TCP.

TCP port forwarding:

  • Người dùng download một java applet để bắt đầu một yêu cầu HTTP đến cổng SSL VPN từ client.
  • Cổng SSL VPN sẽ tạo một kết nối TCP đến server.
  • Sau khi cài đặt, kết nối giữa client và server sẽ được xử lí như là một đường nối SSL với những gói tin TCP đang được chuyển từ một hướng khác.

argron