Secure Sockets Layer sử dụng giao thức bản ghi (Record Protocol) để đóng gói tất cả các thông điệp. Hình vẽ mô tả vị trí của Record Layer trong kiến trúc SSL. Nó cung cấp một định dạng chung cho các thông điệp Alert, ChangeCipherSpec, Handshake hay thông điệp của các giao thức ứng dụng như HTTP, Telnet….
Vị trí giao thức bản ghi trong giao thức SSL
Giao thức bản ghi là một tầng giao thức. Đối với mỗi tầng giao thức nói chung, một gói dữ liệu sẽ bao gồm các trường độ dài, mô tả và nội dung dữ liệu. Giao thức bản ghi nhận dữ liệu cần gửi từ tầng trên phân nhỏ thành từng block (khối), nén dữ liệu, bổ sung dữ liệu kiểm tra, mã hoá và gửi.
Khi nhận dữ liệu về, tiến trình được thực hiện ngược lại: giải mã, kiểm tra, giải nén và sắp xếp lại rồi gửi lên tầng trên. Các giai đoạn trong giao thức này được minh hoạ trong hình vẽ. Dữ liệu tầng ứng dụng có thể là dữ liệu của giao thức SSL handshake, giao thức SSL ChangeCipherSpec, giao thức SSL Alert hoặc dữ liệu của các ứng dụng khác như HTTP, Telnet…
Để phân biệt được từng loại dữ liệu đó trong mỗi frame dữ liệu của SSL record đều có phần header (phần nội dung thêm vào đầu thông điệp) để phân biệt.
66
Các giai đoạn thi hành của giao thức bản ghi
Bước đầu tiên là fragmentation (phân mảnh). Mỗi thông điệp tầng trên được phân nhỏ thành các khối 214 byte (16384) hoặc nhỏ hơn. Tiếp theo là compression
(nén), điều này là tuỳ chọn. Nén phải không làm mất dữ liệu và không thể gia tăng kích thước dữ liệu hơn 1024 byte. Trong SSLv3, không có thuật toán nén nào được chỉ định, thì thuật toán nén mặc định là null.
Bước tiếp theo trong quá trình xử lý là tính toán MAC (Message Authentication Code) - mã xác thực thông điệp qua dữ liệu đã được nén, biến đổi cấu trúc SSLCompressed thành cấu trúc SSLCiphertext.
67 Bước cuối cùng của tiến trình SSL Record Protocol là thêm vào phần đầu một header bao gồm các trường :
Protocol (1 byte) :Thể hiện giao thức tầng cao hơn được sử dụng trong thông điệp SSL Record Layer
Version (2 byte) :Phiên bản chính và phụ của đặc tả SSL mà thông điệp tuân theo. Phiên bản hiện tại của SSL là 3.0.
Length (2 byte) :Số 16 bít thể hiện độ dài của giao thức tầng cao hơn. Đặc tả SSL quy định số này không được vượt quá 214
Protocol Message (n byte) : Thông điệp của giao thức tầng cao hơn, có thể dài đến 214 (16384) byte kể cả mã xác thực. SSL Record Layer có thể nối nhiều thông điệp tầng cao hơn trong một thông điệp SSL Record Layer đơn (phải có cùng giao thức tầng cao hơn).
Cấu trúc một thông điệp SSL Record
SSL định nghĩa bốn giao thức tầng cao khác nhau mà Record Layer có thể hỗ trợ là : ChangeCipherSpec protocol (20), Alert protocol (21), Handshake protocol (22), Application protocol data (23).
68
1/. Giao thức ChangeCipherSpec
Giao thức ChangeCipherSpec gồm các quá trình chuyển tiếp các tín hiệu trong chiến lược mật mã. Giao thức này bao gồm một thông điệp, được mã hoá và được nén theo CipherSpec hiện tại.
Thông điệp ChangeCipherSpec
Phần sẫm màu là Record Layer header, với giá trị protocol là 20, version 3.0, và chiều dài 1. Bản thân thông điệp ChangeCipherSpec chỉ gồm 1 byte, giá trị 1.
Client và server sẽ gửi thông điệp ChangeCipherSpec để báo tin cho bên kia biết được các bản ghi sau này sẽ được bảo vệ dưới CipherSpec với các khoá mà hai bên đã thoả thuận. Khi nhận được thông điệp này, bên nhận sẽ chuyển trạng thái chuẩn bị đọc thành trạng thái đọc hiện tại. Sau khi trao đổi khoá (Key Exchange) và chứng chỉ để xác thực thông điệp (CertificateVerify) thì client sẽ gửi thông điệp này, server sẽ gửi lại cho client một thông điệp tương tự sau khi server xử lý xong thông điệp mà client gửi cho. Khi thông điệp ChangeCipherSpec bất thường xuất hiện thì một unexpected_message sẽ được tạo ra. Khi sử dụng lại các phiên trước đây, thông điệp ChangeCipherSpec sẽ được gửi sau các thông điệp hello.
69
2/.Giao thức cảnh báo (Alert Protocol)
Các hệ thống sử dụng giao thức Alert để báo hiệu một lỗi hoặc một cảnh báo xảy ra trong quá trình truyền thông giữa hai bên, và SSL gán cho kiểu giao thức của Alert là 21. Alert Protocol cũng giống như tất cả các giao thức SSL khác, sử dụng Record Layer định dạng thông điệp của nó. Các thông điệp alert truyền tải các thông báo lỗi hay cảnh báo trong quá trình thiết lập cũng như trao đổi dữ liệu của một phiên liên lạc. Cũng như các loại thông điệp khác, thông điệp alert cũng được mã hoá và nén. Mỗi thông điệp trong giao thức này bao gồm hai byte.
Byte đầu tiên lưu giá trị cảnh báo (1) hay lỗi (2). Nếu là lỗi, SSL sẽ ngay lập tức đóng kết nối. Các kết nối khác trên cùng phiên có thể vẫn tiếp tục, nhưng không kết nối mới nào trong phiên này có thể được thiết lập. Byte thứ hai bao gồm một mã thể hiện kiểu cảnh báo cụ thể. Tiếp theo đây là các đặc tả lỗi và cảnh báo cụ thể cùng với giá trị của nó.
Định dạng thông điệp Alert
*Kiểu Closure Alert
Client và server phải biết được khi nào kết nối đang kết thúc để tránh cách tấn công cắt cụt (truncation attack). Hoặc mỗi bên tham gia có đưa ra các thông điệp thông báo đóng kết nối.
close_notify (0) : thông báo cho bên nhận biết được bên gửi sẽ không gửi bất kỳ thông điệp nào nữa trên kết nối. Sau khi nhận được thông báo này thì bất kỳ dữ liệu nào nhận được đều bị loại bỏ.
70
*Kiểu Error Alert
Quá trình xử lý lỗi trong SSL Hanshake Protocol là rất đơn giản. Khi một lỗi được phát hiện thì bên phát hiện ra lỗi sẽ gửi một thông điệp cho bên kia, sau đó cả hai bên đóng kết nối ngay lập tức. Các servers và clients phải bỏ qua bất kỳ số định danh phiên, khoá, các bí mật của kết nối bị hỏng này. Sau đây là một số thông báo lỗi.
unexpected_message (10) : một thông điệp không phù hợp đã được nhận
bad_record_mac (20) : thông báo này được trả lại nếu một bản ghi nhận được có MAC không đúng
decompression_failure (30) : hàm thực hiện giải mã nhận đầu vào không phù hợp (ví dụ dữ liệu mở rộng vượt quá kích thước cho phép).
handshake_failure (40) : thông báo cho biết bên gửi không thể thoả thuận một tập các tham số an toàn được đưa vào trong các tuỳ chọn.
no_certificate (41): thông báo này có thể gửi đi để đáp lại yêu cầu cần xác thực nếu việc xác thực không phù hợp.
bad_certificate (42) : việc xác thực bị ngắt, ví dụ chữ ký dùng cho xác thực không phù hợp.
unsupported_certificate (43) : việc xác thực là kiểu không được hỗ trợ.
certificate_revoked (44) : bên tham gia huỷ bỏ việc xác thực
certificate_expired (45) : việc xác thực đã hết hạn hoặc hiện tại không có giá trị.
certificate_unknown (46) : xuất hiện các vấn đề khác trong quá trình xử lý việc xác thực.
illegal_parameter (47) : một trường trong handshake ngoài giới hạn hoặc không nhất quán với các trường khác.
71