Thứ Tư, 4 tháng 1, 2017

Cung cấp SSL certificate miễn phí với letsencrypt và acmetool

Bài viết được thực hiện trên:
thanhnguyen@thanhnguyen:~$ lsb_release -r
Release: 14.04
Letsencrypt là một Certificate Authority (CA) cung cấp TLS/SSL certificate  và enable encrypted HTTPs cho một web server. Ưu điểm của Letsencript là đơn giản, dễ sử dụng và đặc biệt, nó cung cấp các TLS/SSL certificate hoàn toàn miễn phí :D

Tìm hiểu sâu hơn về letsencrypt tại
https://letsencrypt.org/docs/

TLS/SSL certificate được cung cấp bởi letsencrypt chỉ sử dụng được trong một thời gian ngắn và sẽ hết hiệu lực trong vòng 90 ngày. Vì vậy, cần có một phương pháp để cấp mới certificate cho website một cách tự động.
Bài viết này hướng dẫn cấp mới certificate bằng cách sử dụng acmetool. Cần chú ý rằng, đây không phải là một offical tool client của letsencrypt, vì acmetool chỉ tạo các SSL keys và certs chứ không tự động reconfigure lại các website được nhận (official enscrypt client tools có làm điều này).



1. Cấu hình NGINX cho website

Giả sử rằng, domain của website là www.example.com và được cấu hình NGINX để serve www.example.com port 80.

2. Cài đặt acmetool

Trên máy đã cài go:
$ sudo apt-get install libcap-dev
$ git clone https://github.com/hlandau/acme
$ cd acme
$ make && sudo make install
Tham khảo tại
https://github.com/hlandau/acme#getting-started

3. Run "acmetool quickstart" để config acme manually
# acmetool quickstart
Sau đó chọn:

- Let’s Encrypt Live Server — I want live certificates
- WEBROOT — Place challenges in a directory

Tham khảo chi tiết hơn tại
https://github.com/hlandau/acme#after-installation

4. Obtain SSL keys and certs cho website
chạy command sau:
# acmetool want www.example.com
# ls /var/lib/acme/live/www.example.com/
cert  chain  fullchain  privkey  url
5. Configure NGINX sử dụng SSL keys and certificate chain
server {
  listen 443 ssl;
 listen [::]:443 ssl;
 ssl_certificate /var/lib/acme/live/www.example.com/fullchain;
 ssl_certificate_key /var/lib/acme/live/www.example.com/privkey;
 ... }   
6. Thiết lập cron job tự động renew SSL certificate

Như đã đề cập ở trên, SSL certificate được cung cấp bởi letsencrypt sẽ bị expire trong vòng 90 ngày, vì vậy cần một cách để renew SSL cert một cách tự động. Cron job rất hữu ích trong trường hợp này.

Câu lệnh để renew:
# /usr/local/bin/acmetool reconcile --batch

để biết thêm chi tiết, chạy
# /usr/local/bin/acmetool --help
File cron:
# m h dom mon dow command
1 1 * * * /usr/local/bin/acmetool reconcile --batch
cron job sẽ chạy hằng ngày, tuy nhiên chỉ trong trường hợp SSL cert chỉ còn 30 ngày, acmetool sẽ  cấp mới SSL cert
https://github.com/hlandau/acme#renewal
acmetool will try to renew certificates automatically once they are 30 days from expiry, or 66% through their validity period, whichever is lower. Note that Let's Encrypt currently issues 90 day certificates.
Sau khi cấp mới cert, cần restart NGINX để load lại cert mới.

Việc restart NGINX manually gây ra nhiều bất tiện, do đó acmetool cung cấp một "notification hooks system" cho phép bạn viết một script để tự động reload webserver mỗi khi cert được renew.
acmetool's notification hooks system allows you to write arbitrary shell scripts to be executed when new certificates are obtained. By default, this is used to reload webservers automatically, but it can also be used to distribute certificates to other servers or for other purposes.

Không có nhận xét nào:

Đăng nhận xét