+1

[Linux] Làm thế nào để tạo SSL/TLS miễn phí với OpenSSL và Let’s Encrypt

Mayfest2023

Chào 500 anh em yêu tech. Lại là mình đây!!! Chào mừng các bạn đã quay lại với bài viết của mình. Hôm nay chúng ta cùng nhau tìm hiểu làm thế nào để tạo SSL/TLS miễn phí với OpenSSLLet’s Encrypt các bạn nhé!

Như các bạn đã biết, hiện nay các website đều đã sử dụng giao thức HTTPS thay cho HTTP. HTTPS là phần mở rộng bảo mật của HTTP, nó là giao thức dùng cơ chế bảo mật SSL để mã hóa thông tin.

Các bạn thường thấy hình ổ khoá khi vào một link website nào đó điều đó có nghĩa trang web đang sử dụng HTTPS (Hình trên)

Vậy làm sao để có được có được ổ khoá như vậy chúng ta cùng tìm hiểu nhé.

Mục tiêu:

  • Hiểu rõ SSL/TLS là gì.
  • Hoạt động SSL.
  • Tại sao cần SSL/TLS
  • Các loại chứng chỉ SSL/TLS
  • Cách tạo SSL miễn phí

1. SSL/TLS là gì?

Đầu tiên chúng ta đi tìm hiểu khái niệm SSL/TLS

  • SSL là Secure Sockets Layer (Lớp socket bảo mật), nó là một cơ chế bảo mật bằng cách mã hóa thông tin liên lạc giữa clien và server.

  • TLS (Transport Layer Security), cũng là một cơ chế bảo mật – bảo mật lớp truyền dẫn (trong khái niệm mạng) – nó ra đời để thay thế cho SSL giờ không còn được phát triển.

HTTPS – hoạt động dựa trên việc truyền nội dung text HTTP giữa client và server (giữa trình duyệt và máy chủ web) và HTTP thì không được mã hóa, các gói tin có thể đọc được khi truyền đi. HTTPS là giao thức dùng cơ chế bảo mật SSL/TLS để mã hóa thông tin.

2. SSL hoạt động như thế nào?

Hoạt động SSL

TLS dùng public keyprivate key nó hoạt động qua các bước:

  • Trình duyệt gửi yêu cầu một phiên làm việc an toàn tới máy chủ.

  • Máy trả về một chứng chỉ, chứng chỉ này có chứa public key của server, chứng chỉ này phát sinh bởi server và trên server có chứa private key nữa (private key không được gửi tới trình duyệt).

  • Trình duyệt cần ký nhận chứng chỉ, nó tạo ra yêu cầu tới CA (Certificate Authority) để chứng thực chứng chỉ.

  • Trình duyệt và máy chủ trao đổi một số thông tin để kiểm tra các key.

  • Trình duyệt và Server bắt đầu trao đổi dữ liệu được mã hóa TLS.

Certificate Authority là nhà cung cấp chứng chỉ số (cung cấp public key/private key cho server) – CA phải đảm bảo được danh tính chính xác cụ thể của đối tượng (server, webiste) được cung cấp chứng chỉ – bằng cách xác nhận thông tin của cá nhân, tổ chức.

3.Tại sao cần sử dụng SSL/TLS?

Có 2 lí do chính cần sử dụng SSL/TLS:

  • Bảo mật đường truyền cho website.

Nếu chỉ sử dụng giao thức HTTP thì dữ liệu trao đổi giữa client và server sẽ không được mã hóa và bất kỳ máy tính nào ở giữa có thể bắt gói tin và đọc các thông tin nhạy cảm (username, password, thông tin thẻ tín dụng) từ gói tin đó.

  • Giúp cho website của bạn được xác thực, nâng cao độ tin tưởng cho người dùng.

Ngoài việc mã hóa, một chứng nhận SSL thích hợp cũng cung cấp tính xác thực. Đơn giản là domain của bạn được một bên thứ 3 uy tín xác thực rằng nó thuộc sở hữu của cá nhân hoặc tổ chức của bạn. Điều này có nghĩa là khách hàng có thể chắc chắn rằng mình đang gửi thông tin đến đúng nơi chứ không phải đến một kẻ nào đó đang mạo danh cá nhân, tổ chức của bạn để cố gắng ăn cắp thông tin của khách hàng.

4. Các loại chứng chỉ SSL/TLS

Chứng chỉ SSL được phân chia thành 3 loại chính, sẽ khác về cách xác thực và thông tin chứa trong chứng chỉ, nhưng khả năng bảo mật là như nhau:

  • DV SSL (Domain Validated): Chứng chỉ được xác thực với cấp độ tên miền.
  • OV SSL (Organization Validated): Chứng chỉ được xác thực với cấp độ doanh nghiệp/tổ chức.
  • EV SSL (Extended Validated): Chứng chỉ được xác thực với cấp độ doanh nghiệp/tổ chức mở rộng

5. Tạo SSL miễn phí dùng OpenSSL

OpenSSL là công cụ mã hóa SSL/TLS, sử dụng nó để tạo/quản lý các public key/private key – dùng nó để sinh các chứng chỉ SSL tự xác thực.

Do là chứng chỉ tự xác thực nên bộ chứng chỉ SSL do OpenSSL sinh ra chỉ cung cấp mục đích bảo mật đường truyền chứ không được verify và Google cũng sẽ đánh dấu website sử dụng loại chứng chỉ này là unsafe.

OpenSSL phù hợp cho việc:

  • Thực hành và làm quen với SSL
  • Tạo SSL cho các domain nội bộ trong VLAN không cần xác thực

Các bước tạo chứng chỉ SSL với OpenSSL:

Đầu tiên bạn chạy lệnh sau:

openssl genrsa -out ca.key 2048

Lệnh này openssl sinh ra file tên ca.key chứa RSA PRIVATE KEY.

Tiếp theo chạy lệnh:


openssl req -new -key ca.key -out ca.csr

Bạn nhập các thông tin theo yêu cầu, ví dụ như sau:

Country Name (2 letter code) [XX]:VN

State or Province Name (full name) []:HCM

Locality Name (eg, city) [Default City]:Ho Chi Minh

Organization Name (eg, company) [Default Company Ltd]: domain.com

Organizational Unit Name (eg, section) []:IT

Common Name (eg, your name or your server's hostname) []:domain.com

Nếu hệ thống có hỏi thêm các thông tin: Email, Optional company name, hay Challenge password thì bỏ qua bằng cách nhấn Enter.

Sau lệnh này openssl sinh ra file ca.csr chứa CERTIFICATE REQUEST (đây là file dùng để request chứng chỉ).

Tiếp theo chạy lệnh để tự gen chứng chỉ:


openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Sau lệnh này sinh ra file CERTIFICATE tên: ca.crt

Như vậy ta có được 2 file:

  • Chứng chỉ (public key): ca.crt

  • Private key: ca.key

Bạn có thể sử dụng 2 file này để cấu hình SSL cho website, nhưng vì đây là chứng chỉ tự xác thực nên trình duyệt sẽ xuất hiện cảnh báo dấu X màu đỏ.

Để hết báo X đỏ cần xác thực cần phải từ một CA, bạn có thể mua chứng chỉ SSL/TLS để có public key/private key hoặc lấy cert miễn phía từ CA qua một số cách miễn phí sau:

  • Sử dụng CloudFlare
  • Sử dụng OpenSSL
  • Sử dụng Let’s Encrypt

6. Tạo SSL sử dụng Let’s Encrypt

Let’s Encrypt là chứng nhận (CA) mở, miễn phí và tự động, hoạt động vì lợi ích cộng đồng. Đây là dịch vụ được cung cấp bởi Internet Security Research Group (ISRG).

Để lấy cert SSL từ Let’s Encrypt, đầu tiên bạn cần cài đặt certbot – đây là công cụ lấy chứng chỉ SSL Let’s Encrypt

sudo apt install certbot python3-certbot-nginx

Kiểm tra xem certbot đã được cài đặt thành công hay chưa

certbot --version

Tiếp theo, bạn chạy lệnh phía dưới để gen cert SSL

certbot certonly --standalone -d domain.com --staple-ocsp -m test@domain.com --agree-tos

Lưu ý, vì cert SSL do Let’s Encrypt cung cấp là cert SSL cấp độ DV (chứng chỉ được xác thực với cấp độ tên miền) nên bạn phải đảm bảo tên miền trỏ về đúng về địa chỉ IP Public của server chạy lệnh certbot.

Các bước cài mình có bài viết chi tiết ở đây

7. Lời kết

Các bạn đọc đến đây cũng đã hiểu SSL/TLS là gì rồi phải không. Các biết phải làm gì cho website của mình rồi đó. Chúc các bạn thành công.! Hẹn các bạn ở các bài tiếp tiếp theo nhé!

Follow các kênh mình chia sẻ

Vibo chia sẻ

Youtube

Blog chia sẻ


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.