1. Cài đặt chứng chỉ Let’s Encrypt

Đầu tiên là chúng ta cần phải tải xuống mã nguồn của letsencypt về thư mục /opt/letsencrypt. Lệnh sau đây được thực hiện trên CentOS 6.

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

Nếu chưa cài đặt git, bạn có thể sử dụng lệnh sau đây để cài đặt

yum -y install git

Tạm dừng ứng dụng NGINX chạy trên máy chủ vì lý do letencrypt sẽ sử dụng cổng 443 để thiết lập chứng chỉ.

service nginx stop

Để cài đặt Let’s Encrypt có rất nhiều cách, mình sẽ sử dụng option --standalone

cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone

Chờ 1 lúc để Let’s Encrypt cài đặt những công cụ cần thiết, sau đó, bạn hãy nhập vào địa chỉ email như kết quả dưới đây:

Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):admin@nodejs.vn

Chấp nhận điều khoản bằng cách nhập a, sau đó nhập tên miền sẽ sử dụng chứng chỉ SSL. Ở bước này bạn chỉ nhập phiên bản non-www và www của 1 domain hoặc subdomain.

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: n
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel):nodejs.vn www.nodejs.vn

Chú ý: Khi muốn thêm tên miền / subdomain khác bạn chỉ cần chạy lại cậu lệnh ./letsencrypt-auto certonly --standalone là xong.

Nếu không gặp vấn đề gì bạn sẽ thấy được kết quả như thế này:

Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for nodejs.vn
tls-sni-01 challenge for www.nodejs.vn
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/nodejs.vn/fullchain.pem. Your cert will
   expire on 2017-05-23. To obtain a new or tweaked version of this
   certificate in the future, simply run letsencrypt-auto again. To
   non-interactively renew *all* of your certificates, run
   "letsencrypt-auto renew"
 - 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

Lưu ý các thông tin:

  • /etc/letsencrypt/live/nodejs.vn/: là nơi chứa chứng chỉ SSL
  • 2017-05-23: là ngày hết hạn của chứng chỉ (90 ngày)

2. Cấu hình và khởi động Nginx

Sau khi đã có chứng chỉ, bạn đã có thể sử dụng để cài đặt vào máy chủ Web, ở đây, mình sử dụng nginx.

# SSL
ssl_certificate /etc/letsencrypt/live/nodejs.vn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nodejs.vn/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
ssl_prefer_server_ciphers on; 
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

# Improve HTTPS performance with session resumption
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;


# DH parameters
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

# Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
add_header Strict-Transport-Security "max-age=31536000" always;

Sau khi cấu hình xong nginx, kiểm tra cấu hình đã chuẩn hay chưa sử dụng lệnh:

nginx -t

Mọi thứ ok, thì hãy khởi động lại nginx

service nginx restart

Giờ là lúc truy cập https://nodejs.vn để hưởng thành quả thôi !

3. Tự động gia hạn chứng chỉ SSL

Chứng chỉ Let’s Encrypt chỉ sử dụng được trong vòng 90 ngày và bạn cần phải chạy lại dòng lệnh bên dưới để gia hạn.

service nginx stop
/opt/letsencrypt/letsencrypt-auto renew
service nginx start

Tuy nhiên, chúng ta hãy sử dụng crontab để thực hiện việc gia hạn này 1 cách tự động. Như vậy, chúng ta sẽ sử dụng SSL miễn phí trọn đời mà không phải lo về việc gia hạn nữa:

Mở file cấu hình, mặc định crontab sẽ mở file cấu hình trong editor vi:

crontab -e

Copy và paste đoạn code dưới đây và thêm vào dòng cuối cùng.

30 2 */90 * * /opt/letsencrypt/letsencrypt-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /var/log/letsencrypt-renew.log

Bạn có thể kiểm tra lại biểu thức lập lịch của crontab ở đây: https://crontab.guru/#30_2_*/90_*_*

Nhấn esc, :x để thoát và lưu lại cấu hình. Bạn sẽ nhận đc thông báo thành công:

crontab: installing new crontab

Vậy là xong. Crontab sẽ tự động chạy lệnh gia hạn SSL vào lúc 2h30 sáng mỗi 90 ngày tiếp theo và tự động reload lại nginx mà không ảnh hưởng gì đến website đang hoạt động.

Chúc bạn thành công!

About The Author