Sau khi cài đặt xong LEMP trên CentOS 7, hãy làm theo từng bước hướng dẫn này để cài đặt chứng chỉ SSL Let’s Encrypt miễn phí.

Cài đặt Let’s Encrypt trên máy chủ Nginx

Let’s Encrypt là một nhà cung cấp chứng chỉ số SSL (Certificate Authority) hoàn toàn miễn phí, được nhiều cá nhân và tổ chức tin dùng và đặc biệt không giới hạn.

Let’s Encrypt là chứng chỉ SSL loại Domain Validation tức là sau khi cài bạn sẽ có thanh ổ khoá màu xanh trên trình duyệt. Ngoài Let’s Encrypt còn có PositiveSSL của Comodo cũng được rất nhiều người sử dụng.

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

Chúng ta sẽ clone mã nguồn của Let’s Encrypt về thư mục /opt/letsencrypt.

yum -y install git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Thỉnh thoảng bạn có thể cập nhật mã nguồn này bằng lệnh sau.

cd /opt/letsencrypt && git reset --hard && git pull

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

Nếu đang dùng CloudFlare, bạn hãy tắt chức năng ẩn IP bằng cách bấm chuyển đám mây từ Vàng sang Xám.

systemctl restart nginx.service
cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone

Chờ một lúc để Let’s Encrypt cài đặt những công cụ cần thiết. Sau đó bạn hãy nhập địa chỉ email, rồi nhấn phím Enter. Sau đó chấp nhận quy định bằng cách nhập a, rồi nhấn tiếp Enter.

Tiếp theo bạn nhập tên miền sẽ sử dụng chứng chỉ SSL, rồi nhấn Enter. Bước này bạn chỉ nhập phiên bản non-www và www của một domain hoặc subdomain. 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 là xong, hãy xem hướng dẫn bên dưới.

Nếu không gặp vấn đề gì bạn sẽ gặp thông báo như bên dưới:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/domain.com/fullchain.pem. Your cert will expire on 2016-08-23. To obtain a new version of the certificate in the future, simply run Certbot again.
- If you lose your account credentials, you can recover through e-mails sent to [email protected]
- 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

Thông tin trên bao gồm thư mục chứa các tập tin chứng chỉ và ngày hết hạn.

Nếu cần bổ sung thêm domain/subdomain muốn cài đặt Let’s Encrypt, bạn chỉ cần chạy lại lệnh bên dưới rồi nhập domain vào:

systemctl restart nginx.service
cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone

Lúc này domain mới sẽ có thêm một thư mục riêng chứa file chứng chỉ cần thiết.

Cấu hình Nginx

Tạo file DH parameters 2048 bit

mkdir /etc/nginx/ssl/
openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem

Sửa tập tin /etc/nginx/conf.d/default.conf như sau:

server {
    listen   80;
    server_name domain.com www.domain.com;
    rewrite ^(.*) https://www.domain.com$1 permanent;
}

server {
    listen   443 ssl http2;
        
    access_log off;
    error_log off;
    
    root /usr/share/nginx/html/;
    index index.php index.html index.htm;
    server_name domain.com;
    
    # SSL
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.com/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
    add_header Strict-Transport-Security "max-age=31536000" always;

    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 /usr/share/nginx/html/$fastcgi_script_name;
    }
    
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    
   location = /robots.txt {
      allow all;
      log_not_found off;
      access_log off;
    }
}

Thay domain.com bằng tên miền của bạn. Sau đó kiểm tra lại cấu hình Nginx:

nginx -t

Phản hồi như sau là được:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Khởi động lại Nginx:

systemctl restart nginx.service

Lưu ý: Nếu website của bạn đang hoạt động, bạn phải chuyển toàn bộ hình ảnh, JavaScript, CSS từ http:// sang https:// thì mới có biểu tượng khóa màu xanh.

Gia hạn Let’s Encrypt

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.

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

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