1. Giới thiệu

Khi sử dụng một website, bạn để ý website đó có sử dụng giao thức bảo mật HTTPS hay giao thức không bảo mật HTTP.

Nếu chỉ sử dụng HTTP, mọi dữ liệu truyền trên internet sẽ không được mã hoá, nghĩa là khi bạn submit một form trên trang đó (VD: đăng nhập bằng password, gửi thông tin tài khoản ngân hàng, hay thậm chí các tin nhắn thông thường) thì mọi thông tin bạn nhập và gửi nếu để ai đó trên internet bắt được gói tin, bạn sẽ bị lộ những thông tin đó.

Để khắc phục việc đó, HTTPS giúp cho gói tin gửi tới server được mã hoá khi đi trên internet, ai đó có bắt được gói tin họ cũng không thể đọc được thông tin nằm trong gói tin đó.

Bạn có thể nhìn thấy trên trình duyệt một trang web là bảo mật hay không. Ví dụ trên google chrome, bạn ấn vào biểu tượng ổ khoá để kiểm tra:

kiểm tra trang web bảo mật

trang web không bảo mật

 

HTTPS sử dụng giao thức SSL (còn gọi là TLS) để mã hoá dữ liệu của HTTP. Dưới đây mình sẽ trình bày cách thức hoạt động của SSL/TLS.

 

2. Một số khái niệm

  • Client: Là browser, nơi bạn truy cập trang web và gửi thông tin hay submit một form nào đó lên server
  • Server: Là nơi sẽ nhận request từ client gửi lên.
  • SSL certificate: Là chứng chỉ SSL của server.
  • Certificate Authority (CA): Là nhà cung cấp chứng chỉ SSL cho server sử dụng.
  • Cipher suites: Là tập hợp các thuật toán mã hoá và giải mã mà client và server sẽ sử dụng.

 

3. Cách giao thức SSL hoạt động

Trước khi giao thức SSL được thiết lập, quy trình bắt tay 3 bước TCP phải được thiết lập trước. Bạn xem thêm về quy trình bắt tay 3 bước của TCP tại https://vi.wikipedia.org/wiki/TCP#Thi%E1%BA%BFt_l%E1%BA%ADp_k%E1%BA%BFt_n%E1%BB%91i.

 

Sau khi quy trình bắt tay 3 bước của TCP được thiết lập, SSL thông thường sẽ thiết lập theo trình tự các bước như sau:

  • Bước 1: Client sẽ gửi tin nhắn "hello" lên server, tin nhắn này cũng bao gồm thông tin về TLS version, cipher suites mà client có thể sử dụng, và một chuỗi ký tự ngẫu nhiên gọi là "client random".
  • Bước 2: Khi nhận được tin "hello" từ client, server sẽ gửi lại tin nhắn "server hello", tin nhắn này bao gồm cả SSL certificate, cipher suite mà server sẽ sử dụng, và một chuỗi ký tự ngẫu nhiên gọi là "server random".
  • Bước 3: Khi nhận được tin "server hello" từ server, client sẽ lấy SSL certificate trong tin nhắn đó và gửi yêu cầu tới CA (là nơi cấp SSL certificate cho server) để xác thực xem mình có đang nhận tin từ chính chủ hay không.
  • Bước 4: Client gửi một chuỗi ký tự ngẫu nhiên gọi là "premaster secret", chuỗi ký tự này được mã hoá bằng public key có trong SSL certificate nhận từ server. Chuỗi ký tự này chỉ được giải mã bằng private key mà server đang giữ.
  • Bước 5: Server nhận chuỗi ký tự trên và dùng private key để giãi mã nó.
  • Bước 6: Cả 2 phía client và server sẽ tạo các khoá session key từ "client random", "server random" và "premaster secret". Từ giờ, các tin nhắn gửi và nhận ở 2 phía sẽ được mã hoá và giải mã bằng các session key này.
  • Bước 7: Client gửi tin "finished" đã được mã hoá bằng session key ở trên.
  • Bước 8: Server gửi tin "finished" đã được mã hoá bằng session key ở trên.
  • Bước 9: Từ giờ trở đi, các tin nhắn gửi và nhận ở 2 phía sẽ sử dụng session key để mã hoá và giải mã.

      Cách SSL và HTTPS hoạt động

 

Bạn đế ý ở các bước trên, Bước 3 là client gửi yêu cầu tới CA để xác thực server chính chủ. Để CA có thể xác thực được đúng server mà client đang kết nối tới, trước đó server phải yêu cầu CA cung cấp cho mình một SSL certificate để server cài đặt.

Sau đây mình trình bày qua về SSL certificate của server.

 

4. Cách server tạo SSL certificate

Có một số cách để tạo SSL certificate:

  • Server có thể tự tạo SSL certificate cho chính mình mà không cần request tới certificate authority (CA), cách này được gọi là self-sign certificate. Sử dụng self-sign certificate giúp cho công ty không mất phí SSL certificate do CA cung cấp mà vẫn có thể mã hoá dữ liệu trên internet. Nhược điểm của cách này là browser sẽ không xác thực được với CA là SSL certificate nhận được có phải của chính chủ hay không nên browser sẽ hiển thị tin nhắn cảnh báo cho dù trang web đó là https:

     cảnh báo self-sign certificate từ trình duyệt

  • Server có thể yêu cầu CA cung cấp SSL certificate để mình cài đặt, server phải gửi Certificate Signing Request (CSR) cho CA để CA tạo SSL certificate:

Certificate Signing Request (CSR) là yêu cầu ký chứng chỉ mà server gửi tới CA. CSR bao gồm các thông tin về server như tên domain, tên công ty sở hữu domain, địa điểm, và public key do server cung cấp. 

CSR được tạo ra cùng với cặp private key - public key, public key sẽ được bao gồm trong CSR gửi lên CA, private key được server giữ lấy để xác thực SSL certificate do CA cung cấp.

Sau khi CA nhận được CSR từ server, CA sẽ tạo ra một SSL certificate cho server tải về vài cài đặt, SSL certificate này chỉ hoạt động với private key mà server đang giữ.

 

Link tham khảo:

https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake

https://phoenixnap.com/kb/openssl-tutorial-ssl-certificates-private-keys-csrs

https://en.wikipedia.org/wiki/Self-signed_certificate