MÃ GIẢM GIÁ
UBUNTU 20.04
CHỦ ĐỀ KHÁC
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Cách tạo Let's Encrypt SSL Apache Server trên Ubuntu 20.04

Trong bài này mình sẽ hướng dẫn tạo chứng chỉ SSL (Let’s Encrypt) trên Ubuntu Server được cài đặt Apache.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Chứng chỉ do Let’s Encrypt cấp có giá trị trong 90 ngày kể từ ngày cấp và được hầu hết tất cả các trình duyệt chấp nhận.

Qua bài này mình sẽ giải thích cách cài đặt chứng chỉ SSL Let’s Encrypt miễn phí trên Ubuntu 20.04 chạy Apache dưới dạng máy chủ web. Mình cũng sẽ hướng dẫn cách cấu hình Apache để sử dụng chứng chỉ SSL và bật HTTP/2.

Trước khi bắt đầu thì hãy chuẩn bị một số thứ sau:

Bài viết này được đăng tại [free tuts .net]

Ok, ta hãy bắt đầu thôi nhé.

1. Cài đặt Certbot trên Ubuntu

Chúng ta sẽ sử dụng Certbot package để tạo chứng chỉ SSL, đây là một công cụ chạy bằng dòng lệnh, nó sẽ tự động tạo và gia hạn chứng chỉ SSL từ Let's Encrypt.

Certbot package mặc định có trong repo của Ubuntu, vì vậy bạn chỉ việc sử dụng lệnh apt để cài đặt.

sudo apt update
sudo apt install certbot

2. Tạo Dh (Diffie-Hellman) trên Ubuntu

Diffie–Hellman là một phương pháp trao đổi thông tin khóa mật mã một cách an toàn qua những kênh không an toàn. Chúng ta sẽ tạo bộ DH 2048 bit để tăng cường bảo mật cho website.

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

Bạn có thể tăng lên thành 4096, tuy nhiên sẽ mất rất nhiều thời gian để chạy. Riêng mình thì thấy 2048 là quá đủ rồi, vì đa số các website nhỏ tại Việt Nam đều không cần bảo mật quá nhiều. Đối với những site lớn thị họ sẽ sử dụng SSL trả phí hơn là miễn phí.

3. Lấy chứng chỉ SSL của Let’s Encrypt

Để lấy được chứng chỉ SSL certificate cho domain thì chúng ta sử dụng plugin Webroot để xác thực tên miền được yêu cầu từ thư mục ${webroot-path}/.well-known/acme-challenge.

Let’s Encrypt server sẽ tạo một request đến file tạm thời để xác thực rằng tên miền của bạn đang liên kết đến máy chủ có chạy certbot.

Để đơn giản hơn thì chúng ta sẽ ánh xạ tất cả các HTTP request cho .well-known/acme-challenge vào một thư mục riêng /var/lib/letsencrypt..

Hãy chạy các lệnh dưới đây để thực hiện những điều trên.

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt

Để tránh trùng lặp mã code và làm cho cấu hình dễ bảo trì hơn, hãy tạo hai đoạn mã cấu hình sau:

/etc/apache2/conf-available/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>
/etc/apache2/conf-available/ssl-params.conf
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" 

Header always set Strict-Transport-Security "max-age=63072000"

Đoạn mã trên đang sử dụng các chippers do Mozilla đề xuất, cho phép bật OCSP, bảo mật truyền tải thông tin nghiêm ngặt HTTP (HSTS) và thực thi một số bảo mật trên HTTP Header.

Trước khi chạy file cấu hình trên thì hãy đảm bảo rằng bạn đang bật mod_ssl mod_headers, bằng cách chạy lệnh sau:

sudo a2enmod ssl
sudo a2enmod headers

Tiếp theo, kích hoạt các file cấu hình SSL bằng cách chạy các lệnh sau

sudo a2enconf letsencrypt
sudo a2enconf ssl-params

Việc bật HTTP/2 module sẽ giúp website chạy nhanh hơn.

sudo a2enmod http2

Reload cấu hình của Apache để áp dụng những thay đổi trên bằng lệnh sau:

sudo systemctl reload apache2

Bây giờ chúng ta có thể chạy công cụ Certbot với plugin webroot và lấy các file chứng chỉ SSL về server:

sudo certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Nếu chứng chỉ SSL được lấy thành công, certbot sẽ in thông báo sau:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-10-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Bây giờ bạn đã có các file chứng chỉ SSL, hãy chỉnh sửa cấu hình máy chủ ảo tên miền của bạn như sau:

/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80> 
  ServerName example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com

  Protocols h2 http/1.1

  <If "%{HTTP_HOST} == 'www.example.com'">
    Redirect permanent / https://example.com/
  </If>

  DocumentRoot /var/www/example.com/public_html
  ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
  CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

  # Other Apache Configuration

</VirtualHost>

Với cấu hình trên, Apache sẽ chuyển hướng từ www sang non-www.

Reload lại Apache để áp dụng những thay đổi:

sudo systemctl reload apache2

Bây giờ bạn có thể truy cập vào website và nếu mọi việc thành công thì domain đã được kích hoạt SSL.

3. Tự động Review SSL Let’s Encrypt SSL certificate

Chứng chỉ của Let’s Encrypt có giá trị trong 90 ngày. Để tự động gia hạn chứng chỉ trước khi chúng hết hạn, certbot sẽ tạo một cronjob chạy hai lần một ngày và tự động gia hạn bất kỳ chứng chỉ nào trước khi hết hạn 30 ngày.

Sau khi chứng chỉ Let’s Encrypt được gia hạn, bạn phải reload lại Apache. Thêm --renew-hook "systemctl reload apache2" vào file /etc/cron.d/certbot:

/etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload apache2"

Để kiểm tra xem đã tạo đúng chưa thì chạy lệnh cerbot kết hợp tùy chọn --dry-run.

sudo certbot renew --dry-run

Nếu không có lỗi gì thì tức là bạn đã tạo gia hạn tự động thành công.

Như vậy là mình đã hướng dẫn xong cách tạo chứng chỉ Let’s Encrypt SSL trên Apache Server cài đặt trên Ubuntu 20.04. Qua bài này bạn cũng đã biết cách thiết lập gia hạn Let’s Encrypt SSL tự động.

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Hướng dẫn cấu hình Mail Server trên CentOs 6.5

Hướng dẫn cấu hình Mail Server trên CentOs 6.5

Cách dùng lệnh Users trong Linux để xem user đang online

Cách dùng lệnh Users trong Linux để xem user đang online

Nếu bạn đang là quản trị viên thì việc quản lý thông tin / xem…

Cách sử dụng lệnh Wall trong Linux

Cách sử dụng lệnh Wall trong Linux

Wall là một công cụ dòng lệnh giúp hiển thị thông báo đến tất cả…

Cách dùng lệnh Whereis trong Linux

Cách dùng lệnh Whereis trong Linux

Whereis là một tiện ích dòng lệnh command line, nó cho phép bạn tìm ..

Cách sử dụng lệnh Which trong Linux

Cách sử dụng lệnh Which trong Linux

Linux dùng lệnh which để xác định vị trí file thực thi của lệnh mà…

Cách sử dụng lệnh whoami trong Linux

Cách sử dụng lệnh whoami trong Linux

Giống như tên gọi của nó, lệnh whoami in tên người dùng đang chạy ...

Cách dùng lệnh zcat trong Linux

Cách dùng lệnh zcat trong Linux

Mặc dù tính năng nén file rất hữu ích vì nó giúp ta tiết kiệm…

Hiểu rõ hơn về chmod 777 trong Linux

Hiểu rõ hơn về chmod 777 trong Linux

Bạn đang xây dựng một website và sử dụng tính năng upload ...

Cách sử dụng lệnh tail trong Linux

Cách sử dụng lệnh tail trong Linux

Mặc định thì lệnh tail sẽ hiển thị 10 dòng cuối cùng của file, thông…

Cách sử dụng lệnh Head trong Linux

Cách sử dụng lệnh Head trong Linux

Trong quá trình quản trị dữ liệu trên Linux đôi khi bạn muốn xem nhanh…

Cách sử dụng lệnh Whatis trong Linux

Cách sử dụng lệnh Whatis trong Linux

Trong bài này chúng ta sẽ tìm hiểu lệnh whatis trong ...

Cách sử dụng lệnh kill trong Linux

Cách sử dụng lệnh kill trong Linux

Linux là một hệ điều hành rất nhanh nhưng không phải lúc nào nó không…

Cách dùng lệnh who trong Linux

Cách dùng lệnh who trong Linux

Who là một công cụ dòng lệnh command-line, được ...

Cách dùng lệnh basename trong Linux

Cách dùng lệnh basename trong Linux

basename là một tiện ích dòng lệnh (command line) dùng để lấy ...

Cách sử dụng lệnh gzip trên Linux

Cách sử dụng lệnh gzip trên Linux

Gzip là một trong những thuật toán nén file phổ biến nhất, nó cho phép…

Cách dùng lệnh wait trong Linux

Cách dùng lệnh wait trong Linux

Wait là lệnh dùng để đợi một thời gian cho tới khi công việc nào…

Cách dùng lệnh ping trong Linux

Cách dùng lệnh ping trong Linux

Lệnh ping là một trong những công cụ được sử dụng nhiều nhất để khắc…

Cách dùng lệnh sleep trong Linux

Cách dùng lệnh sleep trong Linux

sleep là một tiện ích command line cho phép lập trình viên ..

Các ví dụ học Bash Script trong Linux cơ bản nhất

Các ví dụ học Bash Script trong Linux cơ bản nhất

Bash Script đuọc xem là mã code lập trình trên Linux ...

Vòng lặp until trong Shell Script

Vòng lặp until trong Shell Script

Top