Hướng dẫn cách tạo chứng chỉ SSL miễn phí với Let’s Encrypt

let's encrypt

Let’s Encrypt là gì mà người làm website để kiếm tiền cần biết

Trước khi đi vào tìm hiểu Let’s Encrypt, bạn cần phải biết SSL là gì, tầm quan trọng của nó đối với website ra sao, vì sao “dân nghèo” mà vẫn phải cần có SSL cho website của mình?

Đến đây, mặc định là bạn đã hiểu rất rõ về SSL và đang tìm kiếm SSL miễn phí cho website của mình, vậy thì đã đến lúc cần biết về Let’s Encrypt.

let's encrypt

1. Let’s Encrypt là gì?

Let’s Encrypt là nhà cung cấp chứng chỉ SSL miễn phí, tự động, hoạt động vì lợi ích của cộng đồng. Nó được quản lý bởi Internet Security Research Group (ISRG).

Let’s Encrypt cung cấp cho những người quản trị website một chứng nhận số cần thiết để kích hoạt HTTPS (SSL hoặc TLS) cho website của mình, hoàn toàn miễn phí, và theo cách thân thiện nhất có thể. Tất cả dựa trên mục tiêu tạo ra một môi trường Web an toàn, riêng tư và tôn trọng người dùng hơn.

Let’s Encrypt cung cấp chứng chỉ SSL loại Domain Validation, tức là sau khi cài đặt, trang web của bạn sẽ có một ổ khóa màu xanh trên thanh địa chỉ của trình duyệt, khi người dùng truy cập vào.

2. Lợi ích khi sử dụng Let’s Encrypt

  • Miễn phí: Chỉ cần sở hữu một tên miền, bạn có thể sử dụng Let’s Encrypt để có được chứng chỉ tin cậy mà không tốn một xu nào.
  • Tự động: Phần mềm chạy trên máy chủ web có thể tương tác với Let’s Encrypt để có được chứng chỉ một cách nhanh chóng, cấu hình an toàn để sẵn sàng sử dụng và tự động thay mới khi cần.
  • An toàn: Let’s Encrypt sẽ hoạt động như một nền tảng thúc đẩy những TLS tốt nhất, cả về phía CA (Certificate Authority) và giúp các nhà khai thác trang web đảm bảo an toàn cho máy chủ một cách đúng đắn.
  • Minh bạch: Tất các các chứng chỉ được ban hành hoặc thu hồi sẽ được ghi công khai và bất cứ ai cũng có thể kiểm tra.
  • Không hạn chế: Giao thức phát hành và gia hạn tự động sẽ được công bố như một tiêu chuẩn công khai và người khác có thể áp dụng.
  • Hợp tác: Giống như những giao thức Internet cơ bản khác, Let’s Encrypt nỗ lực để mang lại lợi ích cho cộng đồng và không nằm dưới sự kiểm soát của bất kỳ một tổ chức nào.

Let’s Encrypt tạo chứng chỉ SSL miễn phí như thế nào?

Mục tiêu của Let’s Encrypt và giao thức ACME là thiết lập máy chủ HTTPS và để nó tự động có được chứng nhận đáng tin cậy trên trình duyệt mà không cần có bất kỳ sự can thiệp nào của con người. Điều này được thực hiện bằng cách chạy một trình quản lý chứng chỉ trên máy chủ web.

Để hiểu công nghệ của Let’s Encrypt làm việc như thế nào, hãy cùng tìm hiểu quá trình thiết lập trang web https:.//example.com/ với trình quản lý chứng chỉ hỗ trợ Let’s Encrypt.

Có 2 bước trong quá trình này. Đầu tiên, trình quản lý sẽ chứng minh với CA rằng máy chủ web đang kiểm soát một tên miền. Sau đó, trình quản lý có thể yêu cầu, đổi mới hoặc thu hồi chứng chỉ cho tên miền đó.

1. Xác nhận tên miền

Let’s Encrypt xác định quyền quản trị máy chủ bằng khóa công khai. Lần đầu tiên, phần mềm quản lý tương tác với Let’s Encrypt, nó tạo ra một cặp khóa mới và chứng minh với Let’s Encrypt CA rằng máy chủ đang kiểm soát một hoặc vài tên miền. Điều này cũng tương tự như quá trình CA truyền thống tạo tài khoản và thêm tên miền vào tài khoản đó.

Để khởi động quá trình này, trình quản lý yêu cầu Let’s Encrypt CA cung cấp thông tin cần thiết để chứng minh rằng nó đang kiểm soát example.com. Let’s Encrypt sẽ xem xét và đưa ra các yêu cầu, bạn cần hoàn thành nó để chứng minh mình có quyền kiểm soát tên miền.

Bạn có hai lựa chọn:

  • Cung cấp một bản ghi DNS dưới tên example.com
  • Cung cấp nguồn HTTP dưới URL được biết đến trên

Sau khi hoàn thành các yêu cầu, Let’s Encrypt sẽ cung cấp cho trình quản lý chứng chỉ một cặp khóa riêng để chứng minh rằng nó kiểm soát cặp khóa.

Đến đây, trình quản lý đặt một tập tin trên đường dẫn được chỉ định trên trang web . Trình quản lý cũng ký một khóa riêng, sau khi hoàn thành sẽ thông báo cho CA rằng nó đã hoàn thành xác nhận.

Công việc tiếp theo của CA là kiểm tra xem các yêu cầu đưa ra đã được thỏa mãn hay chưa. CA xác minh chữ ký, cố gắng tải về tập tin từ máy chủ web và chắc chắn rằng nó sẽ lấy được nội dung mong muốn.

Nếu chữ ký hợp lệ, các yêu cầu đã được thỏa mãn, trình quản lý được xác định bằng khóa công khai được ủy quyền để làm quản lý chứng chỉ cho example.com. Cặp khóa mà trình quản lý sử dụng cho example.com được gọi là “cặp khóa ủy quyền”.

2. Cấp chứng chỉ và thu hồi

Khi trình quản lý có được “cặp khóa ủy quyền” thì việc yêu cầu, đổi mới, thu hồi chứng chỉ SSL trở nên đơn giản, chỉ cần gửi thông điệp quản lý chứng chỉ và ký với cặp khóa ủy quyền.

let's encrypt

Để có được chứng chỉ cho tên miền, trình quản lý tạo PKCS#10 Certificate Signing Request, yêu cầu Let’s Encrypt CA phát hành chứng chỉ cho example.com với một khóa công khai được chỉ định. Như thường lệ, CSR bao gồm chữ ký bằng khóa riêng tương ứng với khóa công khai trong CSR. Trình quản lý cũng ký cả CSR với khóa ủy quyền cho example.com để Let’s Encrypt CA biết nó đã được ủy quyền.

Khi Let’s Encrypt CA nhận được yêu cầu, nó sẽ xác minh cả hai chữ ký. Nếu tất cả mọi thứ có vẻ tốt, nó đưa ra một chứng chỉ cho example.com với khóa công khai từ CSR và trả lại cho trình quản lý.

Việc thu hồi chứng chỉ hoạt động theo cách tương tự. Trình quản lý ký yêu cầu thu hồi với cặp khóa ủy quyền cho example.com và Let’s Encrypt CA xác minh rằng yêu cầu đó đúng là đã được ủy quyền. Khi đó, nó sẽ xuất thông tin thu hồi chứng chỉ vào các kênh thu hồi thông thường (như CRL, OCSP), dựa trên các bên thứ 3, như trình duyệt để chúng không chấp nhận chứng chỉ đã bị thu hồi.

3. Phần mềm quản lý chứng chỉ SSL trên máy chủ Windows – Certify

Let’s Encrypt là dịch vụ miễn phí để tạo chứng chỉ SSL tin cậy cho tên miền của bạn, nhưng hầu hết các công cụ chỉ là dòng lệnh. Nếu bạn đang sử dụng máy chủ Windows thì hãy cài thêm Certify. Phần mềm này mang đến giao diện người dùng đơn giản để quản lý chứng chỉ SSL. Chỉ cần bật Certify trên máy chủ web IIS để bắt đầu.

let's encrypt

Tính năng chính của Certify:

  • Dễ dàng cài đặt
  • Dễ dàng tạo yêu cầu chứng chỉ, ủy quyền, đổi chứng chỉ mới
  • Quản lý các chứng chỉ và những thông tin liên quan
  • Tính năng IIS Lockdown giúp dễ dàng theo dõi những SSL tốt nhất cho việc vô hiệu hóa các giao thức và mật mã không an toàn.

Cách tạo chứng chỉ SSL miễn phí với Let’s Encrypt

Hiện nay hầu hết các trang web đều đã hỗ trợ SSL (Secure Socket Layer). Nó mã hóa dữ liệu truyền đi giữa máy chủ web và trình duyệt và làm tăng tính bảo mật cho website.

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 Namecheap 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í

let's encrypt

1. Các 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í.

2. 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ủ

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  ):

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 sammy@digitalocean.com

– 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;

3. 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:

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

Lỗi gia hạn tự động Let’s Encrypt và cách khắc phục

1. Nguyên nhân gây ra lỗi

Tên miền của bạn đang trỏ về IP khác

Một trong các yêu cầu bắt buộc trước khi cài Let’s Encrypt bằng tính năng AutoSSL (SSL/TLS Status) trong cPanel là tên miền của bạn phải được trỏ về đúng IP của host. Sau khi cài đặt thành công, nếu bạn vô tình hay hữu ý trỏ tên miền sang một địa chỉ IP khác thì hệ thống sẽ gặp lỗi khi gia hạn tự động.

Tên miền của bạn đang redirect sang một tên miền khác

Nếu bạn cài Let’s Encrypt trên các tên miền phụ và thiết lập redirect 301 (bằng file .htaccess chẳng hạn) sang tên miền chính thì việc này cũng sẽ dẫn đến lỗi không thể gia hạn tự động Let’s Encrypt trên các tên miền phụ.

Bạn đang sử dụng CloudFlare CDN

Sử dụng CloudFlare làm CDN đồng nghĩa với việc địa chỉ IP của host sẽ bị tự động thay thế bằng địa chỉ IP của CloudFlare. Điều này dẫn đến việc hệ thống sẽ xác định tên miền đang không được trỏ về IP của host và không thể tiến hành gia hạn SSL được.

2. Cách khắc phục lỗi gia hạn tự động Let’s Encrypt

Từ những nguyên nhân kể trên, chúng ta có thể khắc phục lỗi gia hạn Let’s Encrypt bằng các phương pháp đơn giản như sau:

Trỏ tên miền về đúng IP của host

Nếu bạn đang trỏ tên miền về một địa chỉ IP khác, hãy kiểm tra và trỏ nó về đúng IP của host. Bạn có thể sử dụng các công cụ như intoDNS hay IP Checker để kiểm tra địa chỉ IP mà tên miền đang được trỏ.

Nếu bạn đang sử dụng CloudFlare, tạm thời hãy tắt tính năng CDN của nó đi, bằng cách truy cập vào tài khoản CloudFlare => chọn tên miền tương ứng => chọn tab DNS => Click vào các đám mây màu cam trong cột Status để chuyển nó sang màu xám.

let's encrypt

Đợi khi hệ thống gia hạn SSL thành công, hãy lặp lại các bước kể trên để chuyển các đám mây màu xám sang màu cam (kích hoạt lại CloudFlare CDN).

Vô hiệu hóa tính năng redirect tên miền

Nếu bạn đang redirect tên miền muốn gia hạn Let’s Encrypt sang một tên miền khác, hãy vô hiệu hóa tính năng redirect cho đến khi việc gia hạn thành công. Ví dụ, tôi đang redirect tên miền wpcanban.net sang tên miền wpcanban.com bằng file .htaccess, tôi sẽ vô hiệu hóa tính năng này bằng cách đổi tên file .htaccess thành .htaccess_old.

3. Kiểm tra việc gia hạn Let’s Encrypt

Để biết liệu tên miền đã được gia hạn Let’s Encrypt thành công hay chưa, đối với các hosting cPanel được trang bị AutoSSL, các bạn có thể truy cập vào mục SSL/TLS Status để xem kết quả.

Thông thường, hệ thống sẽ mất khoảng 1 ngày để tự động gia hạn Let’s Encrypt. Nếu bạn không muốn chờ lâu hay SSL của bạn đã hết hạn, không thể chờ thêm được nữa, hãy click vào nút Run AutoSSL để tiến hành gia hạn ngay lập tức. Quá trình có thể mất từ vài phút đến vài tiếng, do đó hãy kiên nhẫn chờ đợi cho đến khi hoàn tất nhé.

Các tìm kiếm liên quan đến let’s encrypt

  • let’s encrypt là gì
  • gia hạn ssl let’s encrypt
  • tạo chứng chỉ ssl miễn phí với let’s encrypt
  • install let’s encrypt
  • let’s encrypt authority x3
  • let’s encrypt ™ ssl
  • get let’s encrypt ssl
  • cài đặt ssl let’s encrypt

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *