ການຕັ້ງຄ່າ HTTPS ດ້ວຍ Let’s encryption SSL Certificate ສຳ ລັບ Nginx ເທິງ RHEL/CentOS 7/6
ປະຕິບັດຕາມຊຸດ Let's Encrypt ທີ່ຜ່ານມາກ່ຽວກັບເຄື່ອງແມ່ຂ່າຍເວັບໄຊຕ໌ Apache ຫຼື Nginx ທີ່ມີໂມດູນ SSL/TLS, ບົດຂຽນນີ້ພວກເຮົາຈະແນະ ນຳ ທ່ານກ່ຽວກັບວິທີການສ້າງແລະຕິດຕັ້ງໃບຢັ້ງຢືນ SSL/TLS ທີ່ໄດ້ຮັບໂດຍບໍ່ເສຍຄ່າຈາກ Let’s Encrypt Certificate Authority ທີ່ພວກເຮົາຈະໃຊ້ ເພື່ອຮັບປະກັນການໂອນເງິນຂອງ Nginx webserver HTTP ໃນ CentOS/RHEL 7/6 ແລະການແຈກຈ່າຍ Fedora.
ຖ້າທ່ານ ກຳ ລັງຊອກຫາການຕິດຕັ້ງ Let’s Encrypt for Apache ໃນການແຈກຢາຍ RHEL/CentOS 7/6 ແລະ Fedora, ໃຫ້ເຮັດຕາມ ຄຳ ແນະ ນຳ ຂ້າງລຸ່ມນີ້:
<
ຂັ້ນຕອນທີ 1: ຕິດຕັ້ງ Nginx Web Server
1. ໃນບາດກ້າວ ທຳ ອິດ, ໃນກໍລະນີທີ່ທ່ານບໍ່ມີ Nginx daemon ຕິດຕັ້ງແລ້ວ, ອອກ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້ໂດຍມີສິດທິພິເສດເພື່ອຕິດຕັ້ງ Nginx webserver ຈາກ Epel repositories:
# yum install epel-release # yum install nginx
ຂັ້ນຕອນທີ 2: ດາວໂຫລດຫລື Clone Free Let’s encryption SSL ໃບຢັ້ງຢືນ
ວິທີທີ່ໄວທີ່ສຸດໃນການຕິດຕັ້ງລູກຄ້າ Let’s Encrypt ໃນລະບົບ Linux ໂດຍການກົດປຸ່ມຫຸ້ມຫໍ່ຈາກຫໍສະມຸດ github.
ກ່ອນອື່ນ ໝົດ, ຕິດຕັ້ງລູກຄ້າ git ໃນລະບົບດ້ວຍ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້:
# yum install git
3. ຫຼັງຈາກທີ່ລູກຄ້າ git ໄດ້ຖືກຕິດຕັ້ງແລ້ວ, ໃຫ້ປ່ຽນລະບົບເສັ້ນທາງໄປສູ່ເສັ້ນທາງ /ເລືອກ
ແລະດຶງຊອຟແວຂອງ Encrypt ໂດຍການແລ່ນ ຄຳ ສັ່ງຕໍ່ໄປນີ້:
# cd /opt # git clone https://github.com/letsencrypt/letsencrypt
ຂັ້ນຕອນທີ 3: ສ້າງໃບຢັ້ງຢືນການ SSL ຂອງ Let’s Encrypt SSL ສຳ ລັບ Nginx
4. ຂັ້ນຕອນໃນການໄດ້ຮັບໃບຢັ້ງຢືນ SSL/TLS ທີ່ບໍ່ເສຍຄ່າ ສຳ ລັບ Nginx ຈະຖືກເຮັດດ້ວຍຕົນເອງໂດຍການ ນຳ ໃຊ້ໂປແກຼມ Let's Encrypt Standalone.
ວິທີການນີ້ຮຽກຮ້ອງໃຫ້ພອດ 80 ຕ້ອງບໍ່ເສຍຄ່າໃນເວລາທີ່ໃຫ້ລູກຄ້າເຂົ້າລະຫັດເພື່ອກວດສອບຕົວຕົນຂອງເຄື່ອງແມ່ຂ່າຍແລະສ້າງໃບຢັ້ງຢືນ.
ສະນັ້ນ, ຖ້າ Nginx ກຳ ລັງແລ່ນຢູ່ແລ້ວ, ໃຫ້ຢຸດ daemon ດ້ວຍ ຄຳ ສັ່ງຕໍ່ໄປນີ້ແລະ ດຳ ເນີນການ ss
utility ເພື່ອຢັ້ງຢືນວ່າ port 80 ບໍ່ໄດ້ ນຳ ໃຊ້ຢູ່ໃນເຄືອຂ່າຍອີກຕໍ່ໄປ.
# service nginx stop # systemctl stop nginx # ss -tln
5. ດຽວນີ້ເຖິງເວລາແລ້ວທີ່ຈະໄດ້ຮັບໃບຢັ້ງຢືນ SSL ຈາກ Let’s Encrypt. ຍ້າຍໄປທີ່ລະບົບຕິດຕັ້ງລະບົບການຕິດຕັ້ງ Let's Encrypt, ຖ້າທ່ານບໍ່ມີຢູ່ແລ້ວ, ແລະ ດຳ ເນີນການ ຄຳ ສັ່ງ letsencrypt-auto
ພ້ອມດ້ວຍຕົວເລືອກ --standalone
ທີ່ມີໃບຢັ້ງຢືນແລະ -d
ທຸງ ສຳ ລັບແຕ່ລະໂດເມນຫລືໂດເມນຍ່ອຍທີ່ທ່ານຕ້ອງການສ້າງໃບຢັ້ງຢືນຕາມທີ່ແນະ ນຳ ໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້.
# cd /opt # ./letsencrypt-auto certonly --standalone -d your_domain.tld -d www.yourdomain.tld
6. ຫຼັງຈາກຊຸດຂອງຊຸດແລະຄວາມເພິ່ງພາອາໃສຖືກຕິດຕັ້ງຢູ່ໃນເຄື່ອງຂອງທ່ານ, Let’s Encrypt ຈະກະຕຸ້ນໃຫ້ທ່ານເຂົ້າບັນຊີຂອງທ່ານເຊິ່ງຈະຖືກໃຊ້ ສຳ ລັບການກູ້ຄືນຂໍ້ມູນ ສຳ ຄັນຫຼືການແຈ້ງເຕືອນທີ່ຮີບດ່ວນ.
7. ຕໍ່ໄປທ່ານຄວນຍອມຮັບເງື່ອນໄຂການອະນຸຍາດໂດຍກົດປຸ່ມ Enter.
8. ສຸດທ້າຍ, ຖ້າທຸກຢ່າງ ດຳ ເນີນໄປຕາມທີ່ຄວນ, ຂໍ້ຄວາມທີ່ສະແດງຄວາມຍິນດີຈະຖືກສະແດງຢູ່ໃນກະແສໄຟຟ້າຂອງທ່ານ. ຂໍ້ຄວາມຍັງຈະສະແດງເວລາທີ່ໃບຢັ້ງຢືນຈະ ໝົດ ອາຍຸ.
ຂັ້ນຕອນທີ 4: ຕິດຕັ້ງ Let’s Encrypt SSL ໃບຢັ້ງຢືນໃນ Nginx
9. ດຽວນີ້ທ່ານເປັນເຈົ້າຂອງໃບຢັ້ງຢືນ SSL/TLS ທີ່ບໍ່ເສຍຄ່າ, ມັນເຖິງເວລາແລ້ວທີ່ຈະຕິດຕັ້ງມັນໃນ Nginx webserver ເພື່ອໃຫ້ໂດເມນຂອງທ່ານໃຊ້ມັນ.
ໃບຢັ້ງຢືນ SSL ໃໝ່ ທັງ ໝົດ ແມ່ນຖືກຈັດໃສ່ໃນ /etc/letsencrypt/live/
ພາຍໃຕ້ໄດເລກະທໍລີທີ່ມີຊື່ຫຼັງຊື່ໂດເມນຂອງທ່ານ. ໃຊ້ ຄຳ ສັ່ງ ls ເພື່ອລາຍຊື່ເອກະສານໃບຢັ້ງຢືນທີ່ອອກ ສຳ ລັບໂດເມນຂອງທ່ານແລະ ກຳ ນົດພວກມັນ.
# sudo ls /etc/letsencrypt/live/ # sudo ls -al /etc/letsencrypt/live/your_domain.tld
10. ເພື່ອຕິດຕັ້ງເອກະສານໃບຢັ້ງຢືນໃນ Nginx ແລະເປີດໃຊ້ SSL, ເປີດ /etc/nginx/nginx.conf
ເພື່ອແກ້ໄຂແລະເພີ່ມ ຄຳ ຖະແຫຼງການຂ້າງລຸ່ມນີ້ຫຼັງຈາກຟັງເພງສຸດທ້າຍຈາກ block server. ໃຊ້ຕົວຢ່າງຂ້າງລຸ່ມນີ້ເປັນ ຄຳ ແນະ ນຳ.
# vi /etc/nginx/nginx.conf
ບົດຄັດຫຍໍ້ຂອງ Nginx SSL:
# SSL configuration listen 443 ssl default_server; ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ປ່ຽນສາຍເຊືອກຊື່ໂດເມນ ສຳ ລັບໃບຢັ້ງຢືນ SSL ໃຫ້ກົງກັບໂດເມນຂອງທ່ານເອງ.
11. ສຸດທ້າຍ, ເລີ່ມການບໍລິການ Nginx ຄືນ ໃໝ່ ແລະເຂົ້າເບິ່ງໂດເມນຂອງທ່ານຜ່ານ HTTPS Protocol ທີ່ https:/yourdomain
. ໜ້າ ເວັບຄວນໂຫລດໄດ້ລຽບ, ບໍ່ມີຂໍ້ຜິດພາດໃນໃບຢັ້ງຢືນ.
# systemctl restart nginx # service nginx restart
12. ໃນຄໍາສັ່ງເພື່ອກວດສອບໃບຢັ້ງຢືນການ SSL/TLS ແລະຄວາມກົງໄປກົງມາຂອງການເຊື່ອມຕໍ່ດັ່ງຕໍ່ໄປນີ້:
https://www.ssllabs.com/ssltest/analyze.html
13. ໃນກໍລະນີທີ່ທ່ານໄດ້ຮັບການແຈ້ງເຕືອນວ່າເຊີບເວີຂອງທ່ານສະ ໜັບ ສະ ໜູນ ການແລກປ່ຽນລະຫັດ DH ທີ່ອ່ອນແອແລະການໃຫ້ຄະແນນໂດຍລວມຂອງຊັ້ນ B, ສ້າງ Diffie-Hellman cipher ໃໝ່ ໃນ/etc/nginx/ssl/directory ເພື່ອປົກປ້ອງ server ຂອງທ່ານຕໍ່ກັບການໂຈມຕີ Logjam ໂດຍ ແລ່ນ ຄຳ ສັ່ງຕໍ່ໄປນີ້.
# mkdir /etc/nginx/ssl # cd /etc/nginx/ssl # openssl dhparam -out dhparams.pem 4096
ໃນຕົວຢ່າງນີ້, ພວກເຮົາໄດ້ໃຊ້ປຸ່ມ 4096 ນ້ອຍ, ເຊິ່ງໃຊ້ເວລາດົນນານໃນການຜະລິດແລະວາງຄ່າພິເສດໄວ້ໃນເຊີຟເວີຂອງທ່ານແລະໃນການຈັບມື SSL.
ໃນກໍລະນີທີ່ບໍ່ມີຄວາມຕ້ອງການທີ່ຈະໃຊ້ປຸ່ມຍາວນີ້ແລະທ່ານບໍ່ຄວນລະງັບ, ທ່ານຄວນຈະປອດໄພດ້ວຍຄີ 2048.
14. ຫລັງຈາກທີ່ DH key ໄດ້ຖືກສ້າງຂື້ນມາ, ເປີດແຟ້ມການຕັ້ງຄ່າ Nginx ແລະເພີ່ມ ຄຳ ຖະແຫຼງຂ້າງລຸ່ມນີ້ຫຼັງຈາກທີ່ ssl_ciphers
ສາຍເພື່ອເພີ່ມຄີ DH ແລະເພີ່ມລະດັບຄວາມປອດໄພຂອງໂດເມນຂອງທ່ານໃສ່ A +
ເກຣດ.
# vi /etc/nginx/nginx.conf
ເພີ່ມ ຄຳ ອ້າງອີງຕໍ່ໄປນີ້ໃສ່ Nginx.conf:
ssl_dhparam /etc/nginx/ssl/dhparams.pem; ssl_session_timeout 30m; ssl_session_cache shared:SSL:10m; ssl_buffer_size 8k; add_header Strict-Transport-Security max-age=31536000;
15. ເລີ່ມການບໍລິການ Nginx ເພື່ອ ນຳ ໃຊ້ການປ່ຽນແປງແລະກວດໃບຢັ້ງຢືນ SSL ຂອງທ່ານໂດຍການລຶບລ້າງຖານຂໍ້ມູນຜົນໄດ້ຮັບທີ່ຜ່ານມາຈາກລິ້ງທີ່ກ່າວມາຂ້າງເທິງ.
# systemctl restart nginx # service nginx restart
ຂັ້ນຕອນທີ 5: ການຕໍ່ອາຍຸແບບອັດຕະໂນມັດ Nginx ຟຣີສາມາດເຂົ້າລະຫັດໃບຢັ້ງຢືນ SSL
16. Let’s Encrypt CA ປ່ອຍໃບຢັ້ງຢືນ SSL/TLS ຟຣີທີ່ມີອາຍຸການໃຊ້ງານໄດ້ 90 ວັນ. ໃບຢັ້ງຢືນສາມາດໄດ້ຮັບການຕໍ່ແລະ ນຳ ໃຊ້ດ້ວຍຕົນເອງກ່ອນ ໝົດ ອາຍຸໂດຍໃຊ້ໂປແກຼມ webroot, ໂດຍບໍ່ຕ້ອງຢຸດເຄື່ອງແມ່ຂ່າຍເວັບຂອງທ່ານ, ໂດຍການອອກ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້:
# ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/usr/share/nginx/html/ -d yourdomain.tld -d www.yourdomain.tld # systemctl reload nginx
ເມື່ອໃຊ້ ຄຳ ສັ່ງຂ້າງເທິງນີ້ໃຫ້ແນ່ໃຈວ່າທ່ານທົດແທນ <ລະຫັດເສັ້ນທາງເວັບໄຊຕ໌ ເພື່ອກົງກັບຮາກເອກະສານເຊີເວີ້ຂອງເວັບໄຊຕ໌ຂອງທ່ານ, ລະບຸໂດຍໃບລາຍງານຮາກຂອງ Nginx.
17. ເພື່ອທີ່ຈະຕໍ່ໃບຢັ້ງຢືນໂດຍອັດຕະໂນມັດກ່ອນທີ່ມັນຈະ ໝົດ ອາຍຸສ້າງ script bash ນີ້ຈາກ github erikaheidi ໃນ/usr/local/bin/ໄດເລກະທໍລີແລະເພີ່ມເນື້ອຫາລຸ່ມນີ້ (ສະຄິບທີ່ມັນຖືກດັດແປງເລັກນ້ອຍເພື່ອສະທ້ອນເຖິງການຕັ້ງຄ່າ Nginx).
# vi /usr/local/bin/cert-renew
ຕື່ມສາຍຕໍ່ໄປນີ້ໃສ່ແຟ້ມ cert-renew
.
#!/bin/bash webpath='/usr/share/nginx/html/' domain=$1 le_path='/opt/letsencrypt' le_conf='/etc/letsencrypt' exp_limit=30; get_domain_list(){ certdomain=$1 config_file="$le_conf/renewal/$certdomain.conf" if [ ! -f $config_file ] ; then echo "[ERROR] The config file for the certificate $certdomain was not found." exit 1; fi domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}") last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}') if [ "${last_char}" = "," ]; then domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}') fi echo $domains; } if [ -z "$domain" ] ; then echo "[ERROR] you must provide the domain name for the certificate renewal." exit 1; fi cert_file="/etc/letsencrypt/live/$domain/fullchain.pem" if [ ! -f $cert_file ]; then echo "[ERROR] certificate file not found for domain $domain." exit 1; fi exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s) datenow=$(date -d "now" +%s) days_exp=$(echo \( $exp - $datenow \) / 86400 |bc) echo "Checking expiration date for $domain..." if [ "$days_exp" -gt "$exp_limit" ] ; then echo "The certificate is up to date, no need for renewal ($days_exp days left)." exit 0; else echo "The certificate for $domain is about to expire soon. Starting renewal request..." domain_list=$( get_domain_list $domain ) "$le_path"/letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=”$webpath” --domains "${domain_list}" echo "Reloading Nginx..." sudo systemctl reload nginx echo "Renewal process finished for domain $domain" exit 0; fi
18. ປ່ຽນຕົວປ່ຽນ $webpath
ຕັ້ງແຕ່ເລີ່ມຕົ້ນຂອງ script ເພື່ອໃຫ້ກົງກັບຮາກເອກະສານ Nginx ຂອງທ່ານ. ໃຫ້ແນ່ໃຈວ່າສະຄິບທີ່ສາມາດປະຕິບັດໄດ້ແລະເຄື່ອງຄິດໄລ່ bc
ຖືກຕິດຕັ້ງຢູ່ໃນລະບົບຂອງທ່ານໂດຍການອອກ ຄຳ ສັ່ງຕໍ່ໄປນີ້
# chmod +x /usr/local/bin/cert-renew # yum install bc
ທ່ານສາມາດທົດສອບສະຄິບຕໍ່ໂດເມນຂອງທ່ານໂດຍການອອກ ຄຳ ສັ່ງຕໍ່ໄປນີ້:
# /usr/local/bin/cert-renew yourdomain.tld
19. ສຸດທ້າຍ, ເພື່ອ ດຳ ເນີນຂັ້ນຕອນການຕໍ່ອາຍຸໃບຢັ້ງຢືນໂດຍອັດຕະໂນມັດ, ເພີ່ມວຽກ cron ໃໝ່ ເພື່ອປະຕິບັດສະຄຣິບທຸກໆອາທິດເພື່ອໃຫ້ການປັບປຸງໃບຢັ້ງຢືນພາຍໃນ 30 ວັນກ່ອນວັນ ໝົດ ອາຍຸ.
# crontab -e
ຕື່ມແຖວຕໍ່ໄປນີ້ຢູ່ທາງລຸ່ມຂອງເອກະສານ.
@weekly /usr/local/bin/cert-renew your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1
ຫມົດເທົ່ານີ້! ຕອນນີ້ເຄື່ອງແມ່ຂ່າຍ Nginx ສາມາດສົ່ງເນື້ອຫາທີ່ປອດໄພດ້ວຍໃບຢັ້ງຢືນ SSL/TLS Let’s Encrypt ໃນເວັບໄຊທ໌ຂອງທ່ານໂດຍບໍ່ເສຍຄ່າ.