Cài đặt SSL free, sử dụng Letsenscrypt
Môi trường
Bước 1: Cài đặt các gói cần thiết
1 2 3 4 5 6 7 8
| sudo yum install -y epel-release sudo yum install -y certbot python2-certbot-apache php-fpm mod_ssl nginx
# SELinux management tools yum install -y policycoreutils-python-utils
# Cho phép khởi động cùng hệ thống systemctl enable nginx
|
Sử dụng Strong Diffie-Hellman Group Có thể dùng hoặc không
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 mkdir /etc/nginx/snippets touch /etc/nginx/snippets/ssl-params.conf
echo " ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; " >> /etc/nginx/snippets/ssl-params.conf
|
- add_header X-Frame-Options DENY; Dòng lệnh này sẽ chặn việc gọi từ iframe
Bước 2: Cấu hình NGINX
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| server { listen 80; server_name abcdomain.xyz; location ~ /.well-known { allow all; } location / { proxy_pass http://web.linux:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } # return 301 https://$server_name$request_uri; }
|
Bước 3: Tạo cert
1
| sudo letsencrypt certonly -a webroot --webroot-path=/home/domains/abcdomain/ -d abcdomain.xyz
|
Bước 4: NGINX => bật HTTPS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| server { server_name abcdomain.xyz; listen 443 ssl; ssl on; ssl_certificate /etc/letsencrypt/live/abcdomain.xyz/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/abcdomain.xyz/privkey.pem; include snippets/ssl-params.conf; location ~ /.well-known { allow all; } location / { proxy_pass http://web.linux:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; error_log /var/log/nginx/domains/abcdomain-error.log warn; access_log /var/log/nginx/domains/abcdomain-access.log; } }
|
Bước 5: SELinux cấp quyền
1 2 3 4 5 6 7 8 9 10
| setsebool -P httpd_can_network_connect on setsebool -P httpd_can_network_connect 1 setsebool -P httpd_can_network_connect_db 1
# Enable port sudo semanage port -a -t http_port_t -p tcp 8000
# Quyền đọc file chcon -t httpd_config_t /etc/letsencrypt/live/abcdomain.xyz/fullchain.pem chcon -t httpd_config_t /etc/letsencrypt/live/abcdomain.xyz/privkey.pem
|
Thiết lập cronjob
Tự động gia hạn lại vào ngày 01 hàng tháng
1
| 0 0 1 * * certbot renew --cert-name abcdomain.xyz --dry-run
|
Đối với CentOS 6
1 2 3 4 5 6 7 8 9 10 11
| # Install Git yum -y install git
# Clone Let's Encrypt repository git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
# Chạy lệnh tạo cert /opt/letsencrypt/certbot-auto certonly -a webroot --webroot-path=/var/www/html/mountdisk/ -d getfile.thapden.com
# Cronjob 0 0 1 * * /opt/letsencrypt/certbot-auto renew && /bin/systemctl reload nginx
|
Các lỗi có thể gặp
Thiết lập time zone php.ini
1 2
| vi /etc/php.ini date.timezone = "Asia/Ho_Chi_Minh"
|
Thiết lập time zone cho hệ thống
1
| yes | cp /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime
|
SELinux cấp quyền trên thư mục
1
| chcon -R -t httpd_sys_rw_content_t /home/domains/abcdomain
|
Tham khảo