Giải Pháp CNTT
Thứ Sáu, 11/06/2021

Chứng chỉ SSL miễn phí với Let's Encrypt

Chứng chỉ SSL miễn phí với Let's Encrypt

Ngoài ra, việc sử dụng SSL certificate (chứng chỉ SSL) là cần thiết bởi hiện tại Google đã ưu tiên xếp hạng website dựa theo giao thức https (HTTP + SSL), những website mà chỉ sử dụng giao thức http sẽ bị coi là "unsafe" (không an toàn).

Có nhiều loại chứng chỉ SSL cung cấp các mức độ bảo mật khác nhau.
Ví dụ chúng ta có thể mua một chứng chỉ SSL tại BizMaC với các mức giá khác nhau tùy từng loại.
Tuy nhiên trong bài viết này chúng ta sẽ chỉ nói đến loại cơ bản nhất và làm thế nào để có được nó một cách miễn phí :kissing:

Một số cách để có chứng chỉ SSL miễn phí

  • Sử dụng Cloudflare: Đây là một website cung cấp dịch vụ tăng tốc và bảo mật website, họ có cung cấp chứng chỉ SSL ở gói Free. Việc đăng ký rất dễ dàng nên mình sẽ không hướng dẫn ở đây.
    Chú ý là với website chỉ phục vụ người dùng tại Việt Nam thì chạy qua Cloudflare có thể sẽ chậm hơn 1 chút do sử dụng CDN server ngoài Việt Nam.

  • Sử dụng Let's Encrypt: Sử dụng dịch vụ này chúng ta sẽ tự tạo SSL certificate cho riêng mình và hoàn toàn miễn phí.

Cách tạo SSL certificate với Let's Encrypt

Giả sử chúng ta đang sử dụng 1 server Ubuntu với tài khoản truy cập có quyền sudo và sử dụng web server là Nginx.

Bước 1: Cài đặt gói letsencrypt (với bản mới sẽ đổi tên là certbot và dùng lệnh certbot thay cho letsencrypt)

sudo apt-get update
sudo apt-get install letsencrypt

hoặc làm theo hướng dẫn tại trang chủ https://certbot.eff.org/

Bước 2: Tạo SSL certificate

Thêm đoạn cấu hình sau vào block server của file cấu hình cho website (thường nằm trong /etc/nginx/sites-enabled hoặc /etc/nginx/conf.d) để cho phép truy cập vào thư mục ẩn (.well-known) phục vụ cho việc xác thực:

...
   location ~ /.well-known {
        allow all;
   }
...

Khởi động lại Nginx (sau khi khởi động xong nhớ kiểm tra lại xem website còn hoạt động không :joy:):

sudo systemctl restart nginx

Tạo SSL certificate (thay example.com bằng tên miền của bạn và /var/www/example.com là đường dẫn đến thư mục gốc của website):

sudo letsencrypt certonly -a webroot --webroot-path=/var/www/example.com -d example.com -d www.example.com

Nếu thành công output sẽ trông như sau:

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to freessl@itweb.vn
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your
   cert will expire on 2016-03-15. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
...

Bước 3: Cấu hình SSL cho website

Để tăng tính bảo mật, tạo Strong Diffie-Hellman Group (dùng cho Nginx) :

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Tạo 1 snippet cho Nginx để có thể tái sử dụng được khi muốn cấu hình cho nhiều website:

sudo nano /etc/nginx/snippets/ssl-params.conf

Nội dung file như sau:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

 

Sửa file cấu hình cho website:

Tạo redirect 301 cho block server listen 80 (http) nếu bạn chỉ muốn support https (khi người dùng truy cập với giao thức http sẽ tự động chuyển thành https)

server {
    listen      80;
    server_name example.com www.example.com;
    return      301 https://$server_name$request_uri;
}

Tạo thêm 1 block server listen 443 (https)

server {
    listen      443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    include snippets/ssl-params.conf;

    root /var/www/example.com;

    location ~ /.well-known {
         allow all;
    }

}

Chú ý thay toàn bộ example.com bằng domain của mình và đường dẫn root /var/www/example.com giống bước tạo SSL certificate.

Sau khi cấu hình xong thì khởi động lại Nginx:

sudo systemctl restart nginx

Truy cập thử website để xem thành quả hoặc kiểm tra bằng trang sau: https://www.ssllabs.com/ssltest/analyze.html

Gia hạn SSL certificate với Let's Encrypt

SSL tạo theo cách sử dụng Let's Encrypt sẽ hết hạn sau 90 ngày và chúng ta sẽ phải gia hạn bằng lệnh sau:

sudo certbot renew

Để tự động hóa việc này chúng ta có thể cấu hình cronjob để tự động gia hạn chứng chỉ.

Ví dụ cấu hình cronjob để tự động gia hạn mỗi 60 ngày:

sudo crontab -e

Thêm vào dòng sau (đặt lịch cứ mỗi 2 tháng tự động chạy lệnh renew vào lúc 0h30):

30 0 1 */2 * /usr/bin/letsencrypt renew && /bin/systemctl reload nginx

Xong, vậy là website của chúng ta đã có thể truy cập qua giao thức https và không lo bị hết hạn :+1:.

Tin khác
10 lợi ích khi sở hữu website đối với doanh nghiệp

10 lợi ích khi sở hữu website đối với doanh nghiệp

Ngày nay, có một website công ty cũng quan trọng như có một cửa hàng, văn phòng. Nghiên cứu đã phát hiện ra rằng 6/10 khách hàng mong đợi các thương hiệu có nội dung trực tuyến về doanh nghiệp của họ. Nếu bạn sở hữu hoặc điều hành một doanh nghiệp chưa thực hiện bước đó vào thế giới trực tuyến, đây là 10 lợi ích của website đối với doanh nghiệp sẽ khiến bạn tự hỏi tại sao không tạo website sớm hơn.
Sự khác biệt giữ giao thức HTTP VÀ HTTPS là gì?

Sự khác biệt giữ giao thức HTTP VÀ HTTPS là gì?

Nếu như để ý trên các trình duyệt mà bạn truy cập thì sẽ thấy ở một số trang web tự động thường có thêm tiền tố HTTP và HTTPS ở đằng sau URL của website đó. Vậy HTTP là gì? HTTPS là gì? Sự khác nhau giữa 2 giao thức này và tầm quan trọng của chúng trong thế giới web là gì? Cùng chúng tôi lý giải ở bài viết dưới đây nhé!
Hướng dẫn sử dụng Remote Desktop để truy cập VPS/Server Window

Hướng dẫn sử dụng Remote Desktop để truy cập VPS/Server Window

Bằng tiện ích trong quá trình quản trị từ xa thông qua giao diện làm việc của máy tính, Remote Desktop được đánh giá là một trong những tính năng vô cùng thiết thực cho người dùng. Tuy nhiên, không phải ai cũng biết được việc ứng dụng Remote Desktop để truy cập VPS/ Server Window. Đừng lo! Bài viết bên dưới sẽ giúp bạn "gỡ rối" ngay những thắc mắc với những bước hướng dẫn cụ thể.
Bandwidth là gì? Và Những Điều Cần Biết

Bandwidth là gì? Và Những Điều Cần Biết

Khi lướt Web bạn cảm thấy rằng có một số trang tải nhanh, một số trang thì quá chậm. Một trong những lý do dẫn đến hiện tượng trên là do Website hết Bandwidth (băng thông). Vậy thì băng thông là gì? Hãy cùng Mắt Bão tìm hiểu các thông tin liên quan đến băng thông nhé!
Top 5 công cụ quản lý mạng xã hội "đỉnh"

Top 5 công cụ quản lý mạng xã hội "đỉnh"

Những công cụ giúp doanh nghiệp khai thác được hiệu quả của mạng xã hội ngày nay.
6 website cung cấp ảnh miễn phí và chất lượng bạn không nên bỏ qua

6 website cung cấp ảnh miễn phí và chất lượng bạn không nên bỏ qua

Bỏ túi ngay những website cung cấp nguồn ảnh miễn phí và chất lượng trên Internet.
Thực hành Scrum với Gitlab

Thực hành Scrum với Gitlab

Làm thế nào để ứng dụng Scrum với Gitlab?
Scrum là gì? Cách áp dụng mô hình Scrum hiệu quả nhất

Scrum là gì? Cách áp dụng mô hình Scrum hiệu quả nhất

Scrum là gì và có tầm quan trọng đối với Developers như thế nào?
Bí mật sở hữu một website hoàn hảo

Bí mật sở hữu một website hoàn hảo

Website giờ đây đang trở thành “công cụ” thiết yếu giúp cho các doanh nghiệp phát triển hơn trên “mảnh đất công nghệ số” màu mỡ.
Web App là gì? Khác biệt giữa Website và Web App

Web App là gì? Khác biệt giữa Website và Web App

Có không ít người, kể cả IT lâu năm cũng có trường hợp nhầm lẫn giữa web app và website. Hai khái niệm này có sự khác biệt khá rõ ràng. Để có cái nhìn chính xác nhất về web app và website, bạn theo dõi bài viết dưới đây để nắm rõ hơn các khái niệm này.