Khái niệm
SSL (Secure Sockets Layer) là một giao thức bảo mật dùng để bảo vệ việc truyền tải thông tin giữa máy khách và máy chủ trên mạng. SSL được sử dụng để tạo một kết nối an toàn và mã hóa dữ liệu trên Internet, đảm bảo rằng thông tin được truyền tải qua mạng một cách bảo mật và không bị đánh cắp hay chỉnh sửa.
SSL sử dụng mã hóa để mã hóa dữ liệu trước khi gửi đi và giải mã nó khi nhận được, đảm bảo rằng chỉ người nhận có khóa riêng có thể giải mã thông tin. Nó cũng sử dụng chứng chỉ số để xác thực danh tính của máy chủ, đảm bảo rằng người dùng kết nối với máy chủ đích đúng.
SSL đã được tiếp tục phát triển và tiếp nối bởi giao thức TLS (Transport Layer Security), và phiên bản mới nhất hiện nay là TLS 1.3. Tuy nhiên, thuật ngữ "SSL" vẫn được sử dụng phổ biến để chỉ cả SSL và TLS.
Các bước trao đổi SSL giữa client và server
-
Kết nối: Client và server kết nối với nhau.
-
Gửi yêu cầu chứng chỉ: Client gửi yêu cầu chứng chỉ SSL đến server.
-
Phản hồi yêu cầu chứng chỉ: Server gửi lại chứng chỉ SSL của mình cho client. Chứng chỉ này chứa thông tin về khóa công khai của server và được ký bởi CA.
-
Xác thực chứng chỉ: Client kiểm tra tính hợp lệ của chứng chỉ SSL bằng cách xác thực chữ ký số của CA. Điều này đảm bảo rằng chứng chỉ được phát hành bởi một tổ chức tin cậy.
-
Tạo khóa phiên: Client tạo một khóa bí mật (khóa phiên) để sử dụng cho phiên truyền tải dữ liệu. Khóa phiên này sẽ được mã hóa và gửi đến server.
-
Mã hóa thông tin: Client sử dụng khóa công khai của server để mã hóa khóa phiên và gửi nó đến server. Điều này đảm bảo rằng chỉ server có thể giải mã khóa phiên.
-
Xác thực máy chủ: Server sử dụng khóa riêng (khóa bí mật) để giải mã khóa phiên và xác thực tính hợp lệ của nó.
-
Bảo mật kết nối: Client và server sử dụng khóa phiên để mã hóa và giải mã dữ liệu truyền tải giữa hai bên trong suốt quá trình trao đổi.
-
Thiết lập kết nối SSL: Khi các bước trên được hoàn tất, kết nối SSL an toàn được thiết lập giữa client và server, và dữ liệu được truyền tải một cách bảo mật.
Chứng chỉ SSL của server
Server gửi lại chứng chỉ SSL cho client dưới dạng một tập tin chứa thông tin chứng chỉ X.509. Thông thường, định dạng tập tin chứng chỉ SSL phổ biến nhất là PEM (Privacy Enhanced Mail) hoặc DER (Distinguished Encoding Rules).
-
Định dạng PEM: Chứng chỉ SSL được mã hóa bằng Base64 và được lưu trong tập tin có phần mở rộng .pem hoặc .crt. Tập tin PEM thường bao gồm cả chứng chỉ công cộng và khóa riêng (nếu có). Đây là định dạng thông dụng được sử dụng rộng rãi.
-
Định dạng DER: Chứng chỉ SSL được lưu trữ dưới dạng binary và được mã hóa theo chuẩn DER. Tập tin có phần mở rộng .der hoặc .cer.
Server sẽ chọn định dạng tập tin chứng chỉ SSL phù hợp và gửi nó lại cho client trong quá trình trao đổi SSL. Client sau đó sẽ sử dụng chứng chỉ này để xác thực và thiết lập kết nối bảo mật với server.
Chứng chỉ X.509
Chứng chỉ X.509 là một chuẩn định dạng chứng chỉ công cộng được sử dụng trong hệ thống mật mã học công khai. Chứng chỉ X.509 chứa thông tin về thực thể (như người dùng hoặc tổ chức) và khóa công khai của thực thể đó. Nó được sử dụng rộng rãi trong các hệ thống mạng và bảo mật để xác thực và bảo vệ thông tin.
Chứng chỉ X.509 chứa các trường thông tin như:
-
Tên chủ thể (Subject): Thông tin về người dùng hoặc tổ chức mà chứng chỉ đại diện cho.
-
Tên phát hành (Issuer): Thông tin về tổ chức hoặc cá nhân đã phát hành chứng chỉ.
-
Khóa công khai (Public Key): Khóa công khai của người dùng hoặc tổ chức được chứng chỉ đại diện cho.
-
Số seri (Serial Number): Một số duy nhất được gán cho chứng chỉ để xác định nó.
-
Thời gian hiệu lực (Validity Period): Thời gian chứng chỉ được xem là hợp lệ.
-
Tiện ích (Extensions): Các trường mở rộng cho phép thêm thông tin bổ sung vào chứng chỉ.
Chứng chỉ X.509 thường được sử dụng trong các hệ thống mật mã học công khai như SSL/TLS để xác thực máy chủ và thiết lập kênh an toàn giữa máy khách và máy chủ.
Để tạo chứng chỉ X.509, bạn cần sử dụng một công cụ hoặc thư viện hỗ trợ mã hóa chứng chỉ như OpenSSL hoặc các thư viện mã hóa khác trong ngôn ngữ lập trình Java như Bouncy Castle. Quá trình tạo chứng chỉ X.509 bao gồm các bước như tạo cặp khóa (khoá riêng và khóa công khai), tạo yêu cầu chứng chỉ (Certificate Signing Request - CSR) và gửi yêu cầu này đến một CA để ký và phát hành chứng chỉ.
Các tổ chức CA
Dưới đây là một số ví dụ về các Tổ chức Cấp chứng chỉ (Certificate Authorities - CAs) nổi tiếng và phổ biến:
-
Let's Encrypt: Đây là một dự án miễn phí cung cấp chứng chỉ SSL/TLS. Trang web: Let's Encrypt
-
Digicert: Digicert là một CA hàng đầu với dịch vụ cung cấp chứng chỉ SSL/TLS và quản lý khóa. Trang web: SSL Digital Certificate Authority | Encryption & Authentication | DigiCert.com
-
Comodo: Comodo cung cấp các giải pháp bảo mật thông tin, bao gồm cả chứng chỉ SSL/TLS và chứng chỉ số kỹ thuật số. Trang web: 100% Ransomware Protection
-
GlobalSign: GlobalSign là một CA quốc tế, chuyên cung cấp các dịch vụ bảo mật mạng, bao gồm chứng chỉ SSL/TLS và chứng chỉ số kỹ thuật số. Trang web: Digital Certificates - PKI - SSL/TLS GlobalSign
-
Symantec: Symantec là một trong những nhà cung cấp hàng đầu về bảo mật và cung cấp các dịch vụ chứng chỉ SSL/TLS. Trang web: Symantec Enterprise Cloud
Các bước tạo chứng chỉ
-
Tạo và lưu giữ cặp khoá bí mật/công khai, xem thêm: ví dụ viết bằng java.
-
Tạo và lưu giữ chứng chỉ X.509, chứng chỉ này sẽ bao gồm khoá công khai vài được ký bởi khoá bí mật, xem thêm: ví dụ viết bằng java.
-
Tạo yêu cầu chứng thực chứng chỉ, xem thêm: ví dụ viết bằng java.
-
Gửi yêu cầu chứng thực đến CA, xem thêm: ví dụ viết bằng java.