NukeViet

https://www.nukeviet.vn

Đăng ký SSL miễn phí sử dụng cho Nginx, Apache với Let’s Encrypt

Trong bài Google Chrome cảnh báo website không an toàn từ phiên bản Chrome 56 chúng tôi đã giải thích cho các bạn hiểu về giao thức HTTPs cũng như chứng chỉ SSL và giới thiệu cho các bạn về Let’s Encrypt. Trong bài này chúng tôi sẽ hướng dẫn các bạn đăng ký SSL miễn phí sử dụng cho Nginx, Apache với Let’s Encrypt.
Google Chrome cảnh báo website không an toàn từ phiên bản Chrome 56
Chuẩn bị:
  1. Bài viết sẽ hướng dẫn các bạn cài đặt trên 2 hệ điều hành là Debian/Ubuntu và CentOS sử dụng NGINX hoặc Apache nên đưong nhiên yêu cầu bạn cần có 1 máy chủ chạy 1 trong 2 hệ điều hành này.
  2. Một tên miền đã được trỏ DNS về IP của máy chủ
  3. Máy chủ của bạn đã được cài Git
Bước 1. Cài đặt Let’s Encrypt Client
Để lấy được chứng chỉ SSL bạn cần cài đặt 1 công cụ có tên Let’s Encrypt Client lên máy chủ của bạn. Công cụ này sẽ giúp bạn cài đặt và cấu hình chứng chỉ SSL 1 cách tự động giúp bạn làm việc dễ dàng và nhanh hơn.
  • Kết nối đến máy chủ thông qua SSH
  • Dùng lệnh sau để sao chép mã nguồn Let’s Encrypt Client vào máy chủ của bạn và lưu chúng trong thư mục opt

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Bước 2. Lấy chứng chỉ SSL
Cài đặt plugin standalone
Plugin sẽ cung cấp cho bạn 1 công cụ để lấy chứng chỉ SSL. Để cài đặt plugin này nhất thiết bạn phải tắt NGINX tạm thời để giải phóng port 80 vì plugin standalone sẽ chạy như 1 webserver và sử dụng port 80.
Để tắt NGINX trên SSH bạn dung lệnh: 

service nginx stop

Nếu bạn sử dụng hệ điều hành CentOS thì làm các thao tác dưới đây để chạy Plugin Standalone, còn nếu dùng  Debian/Ubuntu thì bỏ qua và thực hiện tiếp các thao tác ở bước 3.
Kiểm tra phiên bản Python:

python –version

Đảm bảo phiên bản Python lớn hơn hoặc bằng bản 2.7, nếu nhỏ hơn bạn cập nhật lên bằng cách sử dụng lần lượt các lệnh sau trên SSH:

-    yum -y update
-    yum groupinstall "Development tools"
-    yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
-    cd /opt
-    wget --no-check-certificate https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
-    tar xf Python-2.7.6.tar.xz 
-    cd Python-2.7.6
-    ./configure --prefix=/usr/local
-    make && sudo make altinstall

Bước 3. Chạy Let’s Encrypt
Trước khi sử dụng Let’s Encrypt, bạn cần duyệt tới thư mục chứa Let’s Encrypt Client mà đã Clone ở Bước 1.

cd /opt/letsencrypt

Sau đó cài đặt các tập tin trợ giúp

./letsencrypt-auto –help

Bây giờ bạn có thể sử dụng plugin Standalone bằng cách chạy lệnh:

./letsencrypt-auto certonly --standalone

Chờ một lúc, sau khi Let’s Encrypt khởi chạy sẽ yêu cầu bạn nhập một số thông tin, bạn cần nhập đầy đủ và chính xác các thông tin này.
lets encrypt recovery email prompt

Sau đó chấp nhận điều khoản của  Let’s Encrypt bằng cách chọn Agree.
lets encrypt agree tos prompt

Tiếp tục Let’s Encrypt yêu cầu bạn nhập tên miền của bạn, nếu dùng cho nhiều tên miền thì nhập mỗi tên miền cách nhau bởi dấu phẩy “,”.
Nếu tất cả đều thành công, một thông báo tương tự dưới đây sẽ hiển thị, điều đó có nghĩa Let’s Encrypt đã được phê duyệt và cấp chứng nhận thành công cho bạn.
IMPORTANT NOTES:- If you lose your account credentials, you can recover them through  e-mails sent to somebody@example.com.- Congratulations! Your certificate and chain have been saved at  /etc/letsencrypt/live/example.com/fullchain.pem. Your  cert will expire on 2016-03-31. To obtain a new version of the  certificate in the future, simply run Let's Encrypt again.- Your account credentials have been saved in your Let's Encrypt  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 Let's  Encrypt, so making regular backups of this folder is ideal.- If you like Let's Encrypt, please consider supporting our work by:   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate  Donating to EFF:                    https://eff.org/donate-le
Trong thông báo trên bạn chú ý:
Thư mục chứa chứng chỉ SSL của bạn: /etc/letsencrypt/live/example.com/ (example.com là ví dụ thay cho tên miền của bạn)

File SSL gồm có:

  • cert.pem: Chứng chỉ SSL cho tên miền của bạn
  • chain.pem: Chứng chỉ của Let’s Encrypt
  • fullchain.pem: cert.pem và chain.pem được gộp lại thành một
  • privkey.pem: Private key của chứng chỉ


Bước 4. Cài đặt SSL lên máy chủ NGINX
Coi như việc lấy file chứng chỉ đã hoàn tất, công việc còn lại là cài đặt nó lên máy chủ. Với NGINX bạn thao tác như sau:
Bạn mở file cấu hình domain lên, hoặc tạo mới bằng lệnh sau:
nano /etc/nginx/conf.d/default

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

server { 
   listen 443 ssl;
   server_name example.com; 
   ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
   ssl_prefer_server_ciphers on; 
   ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL; 
   root /var/www/example.com/code; 
   index index.php index.html index.htm; 
   location / {
   try_file $uri $uri/ /index.php; 

   location ~ \.php$ { 
   try_files $uri =404; 
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
   include fastcgi_params; 
   fastcgi_pass unix:/var/run/php5-fpm.sock; 
   } 
}

 

Bạn sửa lại các thông tin (được bôi đỏ) như:
  • Tên miền: server_name example.com www.example.com;
  • Đường dẫn đến tập tin SSL: ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  • Đường dẫn đến thư mục chứa code của website: root /var/www/example.com/code
Kiểm tra lỗi cú pháp bằng lệnh:

sudo nginx –t

Cuối cùng khởi động lại NGINX:

sudo service nginx restart

Bước 5. Cài đặt SSL trên Apache
Trên SSH bạn chạy lần lượt các lệnh sau:
- Duyệt tới thư mục chứa Let’s Encrypt

cd /opt/letsencrypt

- Cài đặt tự động:
./letsencrypt-auto --apache -d example.com -d www.example.com
Sau đó công cụ sẽ tự cấu hình domain cho bạn luôn, bạn vẫn cần khai báo một số thông tin như email khôi phục, và quan trọng là công cụ sẽ hỏi bạn muốn dùng cả http và https hay chỉ dùng https thôi để cấu hình redirect.

Bước 6. Cấu hình tự gia hạn
Các chứng chỉ do Let’s Encrypt cung cấp chỉ có giá trị trong 90 ngày. Sau đó bạn phải chạy lại bước 3 để nhận chứng chỉ mới   nếu không website của bạn sẽ bị cảnh báo chứng chỉ hết hạn. Nhưng việc gia hạn thủ công như vậy sẽ rất mất thời gian, dưới đây NukeViet sẽ hướng dẫn các bạn cách gia hạn chứng chỉ tự động.

Let’s Encrypt không cung cấp công cụ tự động gia hạn chứng chỉ, việc này chỉ có thể làm bằng cách tạo một Cron jop (tiến trình tự động)  bằng Plugin Webroot của công cụ Cerbot.

Thực chất Webroot plugin cũng giống như Standalone mà chúng ta sử dụng để lấy chứng chỉ ở trên, nhưng sự khác biệt ở đây là Webroot plugin hoạt động không yêu cầu dừng web server, khi đó website của bạn vẫn hoạt động liên tục được.
Đầu tiên để cài đặt Cerbot bạn truy cập vào địa chỉ sau để chọn hệ điều hành và máy chủ sau đó làm theo hướng dẫn: https://certbot.eff.org/

Gia hạn SSL
Tiếp theo bạn sử dụng plugin Webroot để gia hạn SSL bằng lần lượt dòng lệnh sau:

cd opt/letsencrypt
./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com

Lưu ý bạn cần thay đường dẫn /usr/share/nginx/html bằng đường dẫn chứa thư mục mã nguồn của bạn và  www.example.com thành domain website của bạn.
Sau đó bạn reload lại webserver NGINX để sử dụng chứng chỉ mới.

Tạo file Cron Jop để tự động gia hạn SSL
Tạo file cấu hình Let’s Encrypt: Đơn giản quá trình gia hạn bằng cách tạo file cấu hình cho Let’s Encrypt:

sudo cp /opt/letsencrypt/examples/cli.ini /usr/local/etc/le-renew-webroot.ini

Bây giờ hãy mở file ra và chỉnh sửa:

sudo nano /usr/local/etc/le-renew-webroot.ini

Đầu tiên, xóa hoặc vô hiệu dòng server = https://acme-staging.api.letsencrypt.org/directory bằng cách thêm dấu # vào trước nó.
 
Tiếp tục bỏ dấu # đằng trước các dòng email, domains, webroot-path và sửa lại thông tin của bạn:

rsa-key-size = 4096
email = contact@nodejs.vn
domains = nodejs.vn, www.nodejs.vn
webroot-path = /usr/share/nginx/html

Bây giờ thay vì phải nhập thông tin về email, đường dẫn đến thư mục code như câu lệnh bên trên thì sau khi ta tạo file cấu hình Let’s Encrypt, không cần nhập thông tin như thế nữa. Bây giờ để gia hạn chứng chỉ SSL bạn chỉ cần chạy các dòng lệnh sau:

cd opt/letsencrypt
./letsencrypt-auto certonly -a webroot --renew-by-default --config /usr/local/etc/le-renew-webroot.ini

KẾT LUẬN
Cấu hình Let’s Encrypt SSL không khó chỉ cần trước khi bắt đầu làm việc bạn hãy dành thời gian tìm hiểu để sử dụng tốt Client và Plugin là làm được.
Mọi cầu hỏi thắc mắc cũng như phản hồi góp ý bạn có thể để dưới bình luận hoặc gửi về địa chỉ email huongnv@vinades.vn.
Chúc bạn thành công!

 

Tác giả: Huongnv

Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây