Về Let’s Encrypt, tạo mới, gia hạn Certificate miễn phí | Linux | Network | Services | Security | Thủ thuật

Trước đây, mình đã có bài viết về tạo, gia hạn Cert của Letsencrypt, tuy nhiên chưa vừa đủ lắm. Vì vậy mình viết lại bài này để lý giải rõ hơn, cũng như gia hạn, tạo mới không cần stop web service .

1. Letsencrypt là gì?

Let’s Encrypt là một chương trình được hỗ trợ vốn bởi nhiều đơn vị chức năng, quỹ tăng trưởng lớn trên quốc tế ( gồm có cả Google, Akamai, Facebook … ) Mục đích cuả nó là giúp Internet bảo đảm an toàn hơn bằng cách cung ứng không tính tiền những certificate cho website, ứng dụng …

Đặc điểm của Certificate Let’s Encrypt:

– Miễn phí, không số lượng giới hạn số lượng ĐK trên một thông tin tài khoản .
– Hết hạn sau 3 tháng, gia hạn không lấy phí

2. Lý giải thêm một số nguyên tắc hoạt động, cách tạo và gia hạn

Lưu ý, để tạo và gia hạn cert của Lets, người quản trị phải chứng tỏ quyền sở hữu tên miền bằng cách trỏ tên miền về đúng IP sever muốn tạo và gia hạn. Đương nhiên, nếu bạn không phải là chủ tên miền thì làm thế nào nó được cho phép .
Lets có nhiều cách để tạo và gia hạn cert. Nên thống nhất sử dụng 1 cách để việc gia hạn thuận tiện, chuẩn xác, dễ đặt lịch tự động hóa người quản trị không phải chăm sóc nhiều khi quản trị một số lượng lớn website .

– Chế độ standalone:

Đây là chế độ độc lập, bạn không cần cài một web server lên trước ( như nginx, apache ), chỉ cần trỏ tên miền về server, setup lets là tạo được cert. Để tạo cert, Lets sẽ tạo ra 1 sever web ảo bằng Python, chiếm cổng 443 của server. Vì vậy, cần phải stop mọi dịch vụ nào đang chiếm cổng 443 thì mới tạo và gia hạn được cert. Đó là nguyên do vì sao bạn thường được hướng dẫn stop nginx, apache khi tạo và gia hạn .

Chế độ này thường được hướng dẫn trên mạng nhưng nhược điểm của nó là phải stop web service đang chạy kể cả khi gia hạn. Không phải lúc nào bạn cũng được phép downtime như vậy trên môi trường production.

– Chế độ webroot

Đây là chính sách mà bắt buộc phải có sẵn một web service, trỏ website trước, vì thế nó không cần tạo ra 1 sever web ảo chiếm port 443 như chính sách standalone, thế cho nên không cần stop web service khi tạo và gia hạn. Việc tạo và gia hạn sẽ được xác nhận trải qua 1 đường link có dạng tenmien.com/.well-known. Đơn giản bạn hoàn toàn có thể hiểu nếu trên web của bạn có đường dẫn này thì sever Letsencrypt sẽ xác nhận cho bạn và được cho phép tạo, gia hạn …

– Chế độ Manual

Tương tự chính sách Webroot nhưng nó sẽ hỏi những câu hỏi và điền bằng tay >> không chơi tự động hóa được. Nên mình không chăm sóc phần này .

– Chế độ theo web service: nginx, haproxy…

Tùy theo web service bạn sử dụng là gì, sẽ có câu lệnh đơn cử. Cách này cũng không cần stop web service đang chạy .

3. Tạo certificate mới theo chế độ web service. Ví dụ ở đây là nginx.

Truy cập website : https://certbot.eff.org/
Trong list chọn web service của bạn và OS đang dùng để có câu lệnh thiết lập .
VD trên Centos 7 :

sudo yum install certbot python2-certbot-nginx

>> Cài đặt certbot và plugin certbot-nginx
Ngay lập tức hoàn toàn có thể tạo cert luôn mà không cần config gì thêm ở nginx :

sudo certbot --nginx certonly -d yourdomain.com

Nếu bạn build nginx bằng source và để file nginx.conf ở vị trí khác ( ví dụ điển hình ở / etc / nginx / conf / nginx.conf ) thì cần gõ thêm đường dẫn đến thư mục chứa file config nginx :

sudo certbot --nginx certonly --nginx-server /etc/nginx/conf -d yourdomain.com

Như vậy là đã thành công xuất sắc. Cách này rất đơn thuần .
Tương tự với những web service khác, OS khác bạn chỉ cần chọn trên website phía trên, nó sẽ cho ra câu lệnh setup certbot + plugin web service tương ứng .

4. Tạo certificate mới theo chế độ webroot (cách cũ)

Bước 1 : Cài đặt Letsencrypt
Cài đặt giống cách ở trên, vào website https://certbot.eff.org/

Centos 7:

sudo yum install certbot

Centos 6:

wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto

Bước 2: Tạo vhost tạm (mình làm trên nginx)

Vì sao lại tạo vhost tạm ? Mình cho là làm thế nhanh hơn là chỉnh sửa vhost thật trước. Vhost tạm này chỉ dùng để ĐK lets theo dạng webroot, xong là xóa nó đi thôi .

server {
     listen	  80;
     server_name  hoctapit.com;

     location /.well-known/ {
              log_not_found off;
              root /usr/local/nginx/html;
     }
}

Lưu ý : location /. well-known /
Đây là phần bắt buộc, mục tiêu của nó để lets xác nhận website của bạn khi nó thực thi tạo hoặc gia hạn trong khi website của bạn vẫn đang chạy ( không stop nginx ). Lưu ý, thư mục này phải sống sót thật, và khi gia hạn vẫn phải giữ thư mục này, vì thế nên dùng 1 thư mục cố định và thắt chặt cho mọi tên miền trên server. Ở đây dùng luôn thư mục mặc định của nginx .
Reload nginx để nhận file thông số kỹ thuật mới này ( bước này bắt buộc, nếu không reload thì sẽ ko thể tạo cert được :

sudo service nginx reload

Bước 3 : Tạo cert mới
cd vào thư mục / opt / letsencrypt đã clone cái source ở bên trên .

sudo certbot certonly --webroot -w /usr/local/nginx/html -d tenmien.com

Lưu ý thư mục – w giống với thư mục trong location. well-know ở trên .
Bây giờ xóa file vhost vừa tạo ở trên đi, hoặc dùng nó làm vhost thật luôn cũng được .

server {
        listen 80;

        server_name hoctapit.com www.hoctapit.com;
        #redirect http to https
        return 301 https://$server_name$request_uri; 
 #Đoạn này để sau gia hạn certificate tự động 
       location /.well-known/ { 
       log_not_found off; 
       root /usr/local/nginx/html;
       }
}

server {
        listen 443;
        access_log /var/log/nginx/hoctapit.access.log;
        error_log /var/log/nginx/hoctapit./error.log;

        root /path/to/website/public_html;
        index index.php index.html index.htm;
        server_name hoctapit.com;

        ssl on;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
        ssl_certificate /etc/letsencrypt/live/hoctapit.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hoctapit.com/privkey.pem;
        ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
         
        #Đoạn này để sau gia hạn certificate tự động  
        location /.well-known/ {
              log_not_found off;
              root /usr/local/nginx/html;
        }

     location / {
                try_files $uri $uri/ /index.php?$args;
        }
     location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                include /etc/nginx/fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_connect_timeout 1000;
                fastcgi_send_timeout 1000;
                fastcgi_read_timeout 1000;
                fastcgi_buffer_size 256k;
                fastcgi_buffers 4 256k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_temp_file_write_size 256k;
                fastcgi_intercept_errors on;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
}

Cái config này mình lấy mẫu của mình thôi, tùy trường hợp hoàn toàn có thể khác .
Restart nginx để apply config mới .

5. Gia hạn certificate

Nếu tổng thể tên miền đều được tạo theo cách như trên, thì chỉ cần gõ lệnh :

sudo certbot renew

Đặt cronjob để việc gia hạn này là tự động hóa :

sudo crontab -e

Thêm vào dòng sau và lưu lại :

23 1 */10 * * certbot renew --post-hook "service nginx reload" >> /var/log/certbot-renew.log

Dòng này sẽ chạy lệnh gia hạn vào lúc 01 : 23 mỗi 10 ngày / lần, reload nginx và xuất ra file log để tiện theo dõi .

5. Một số thủ thuật

a. Test thử việc tạo, gia hạn :
Nếu bạn gõ lệnh với Letsencrypt sai, lỗi quá nhiều, nó sẽ khóa không cho bạn thao tác trong khoảng chừng 1 tiếng. Vì vậy để thử trước khi thực thi lệnh ( tạo, gia hạn … ) thật bạn hoàn toàn có thể thêm tùy chọn – dry-run ở cuối câu lệnh. Chẳng hạn :

sudo ./letsencrypt-auto renew --dry-run

Lưu ý thêm tùy chọn này thì chỉ là test thôi, làm thật nhớ bỏ nó đi .
b. Gia hạn cho 1 tên miền riêng rẽ
Ví dụ bạn có 10 tên miền trên website, nhưng chỉ muốn gia hạn cho 1 tên miền thôi :

sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/usr/local/nginx/html --domain=tenmien.com

Lưu ý cái webroot giống của bạn nhé .
c. Xóa 1 cert của tên miền để tạo lại
( ví dụ điển hình do trước đó tạo theo standalone, muốn chuyển qua webroot ) chỉ cần xóa hết những file, thư mục sau :
+ / etc / letsencrypt / renewal / tenmien.conf ( file )
+ / etc / letsencrypt / archived / tenmien ( directory )
+ / etc / letsencrypt / live / tenmien ( directory )

d. Tạo 1 certificate dùng cho nhiều domain.

Nếu bạn không muốn tạo mỗi domain 1 certificate thì hoàn toàn có thể tạo 1 lúc nhiều domain luôn bằng cách sử dụng – d domain1.com – d domain2.com …. khi tạo certificate .
Letsencrypt tương hỗ tới 100 tên miền cho 1 certificate được tạo. Nghĩa là giờ đây bạn sẽ thông số kỹ thuật toàn bộ domain trong list trên sử dụng 1 cert trong / etc / letsencrypt / live / domain1.com. Khi gia hạn, toàn bộ đều được gia hạn cùng lúc .
BÀI TIẾP :

Source: https://wikifin.net
Category: Blog

Leave a Comment

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 *