ค้นหาเว็บไซต์

วิธีรักษาความปลอดภัย Nginx ด้วย Let's Encrypt บน Ubuntu และ Debian


ตามบทช่วยสอน มาเข้ารหัส ก่อนหน้านี้เกี่ยวกับ Apache SSL ในบทความนี้ เราจะพูดถึงวิธีสร้างและติดตั้งใบรับรอง SSL/TLS ฟรีที่ออกโดย มาเข้ารหัส CA กันเถอะ สำหรับเว็บเซิร์ฟเวอร์ Nginx บน Ubuntu หรือ Debian

อ่านด้วย
  1. รักษาความปลอดภัย Apache ด้วย Let's Encrypt ฟรีบน Ubuntu และ Debian
  2. ติดตั้ง Let's Encrypt SSL เพื่อรักษาความปลอดภัย Apache บน RHEL และ CentOS
การทดสอบสภาพแวดล้อมตัวอย่าง

ความต้องการ

  1. โดเมนที่จดทะเบียนซึ่งมีระเบียน DNS A ที่ถูกต้องเพื่อชี้กลับไปยังที่อยู่ IP ของเซิร์ฟเวอร์ของคุณ
  2. เว็บเซิร์ฟเวอร์ Nginx ที่ติดตั้งพร้อมเปิดใช้งาน SSL และ Vhost ในกรณีที่คุณวางแผนที่จะโฮสต์หลายโดเมนหรือโดเมนย่อย

ขั้นตอนที่ 1: การติดตั้งเว็บเซิร์ฟเวอร์ Nginx

1. ในขั้นตอนแรกให้ติดตั้งเว็บเซิร์ฟเวอร์ Nginx หากยังไม่ได้ติดตั้ง โดยใช้คำสั่งด้านล่าง:

sudo apt-get install nginx

ขั้นตอนที่ 2: สร้างใบรับรอง Let's Encrypt SSL สำหรับ Nginx

2. ก่อนที่จะสร้างใบรับรอง SSL/TLS ฟรี ให้ติดตั้งซอฟต์แวร์ มาเข้ารหัส ในลำดับชั้นของระบบไฟล์ /usr/local/ ด้วยความช่วยเหลือของ git ไคลเอนต์โดยออกคำสั่งด้านล่าง:

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. แม้ว่าขั้นตอนการรับใบรับรองสำหรับ Nginx จะเป็นไปโดยอัตโนมัติ แต่คุณยังคงสามารถสร้างและติดตั้งใบรับรอง SSL ฟรีสำหรับ Nginx ได้ด้วยตนเองโดยใช้ปลั๊กอิน Let's Encrypt Standalone

วิธีการนี้กำหนดให้พอร์ต 80 ต้องไม่ถูกใช้งานบนระบบของคุณในช่วงเวลาสั้นๆ ในขณะที่ไคลเอ็นต์ Let's Encrypt จะตรวจสอบความถูกต้องของข้อมูลประจำตัวของเซิร์ฟเวอร์ก่อนที่จะสร้างใบรับรอง

ในกรณีที่คุณใช้งาน Nginx อยู่แล้ว ให้หยุดบริการโดยออกคำสั่งต่อไปนี้


sudo service nginx stop
OR
sudo systemctl stop nginx

ในกรณีที่คุณใช้บริการอื่นที่ผูกกับพอร์ต 80 ให้หยุดบริการนั้นด้วย

4. ยืนยันว่าพอร์ต 80 ว่างโดยการรันคำสั่ง netstat:

sudo netstat -tlpn | grep 80

5. ตอนนี้ถึงเวลาเรียกใช้ letsencrypt เพื่อรับใบรับรอง SSL ไปที่ไดเรกทอรีการติดตั้ง Let's Encrypt ที่พบในเส้นทางของระบบ /usr/local/letsencrypt และเรียกใช้คำสั่ง letsencrypt-auto โดยระบุ --สแตนด์อโลน และการตั้งค่าสถานะ -d สำหรับแต่ละโดเมนหรือโดเมนย่อยที่คุณต้องการสร้างใบรับรอง

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld 

6. ป้อนที่อยู่อีเมลที่จะใช้โดย Let's Encrypt สำหรับการกู้คืนคีย์ที่สูญหายหรือการแจ้งเตือนเร่งด่วน

7. เห็นด้วยกับเงื่อนไขของใบอนุญาตโดยกดปุ่ม Enter

8. สุดท้ายนี้ หากทุกอย่างประสบความสำเร็จ ข้อความที่คล้ายกับภาพหน้าจอด้านล่างควรปรากฏบนคอนโซลเทอร์มินัลของคุณ

ขั้นตอนที่ 3: ติดตั้ง Let's Encrypt SSL Certificate ใน Nginx

9. เมื่อสร้างใบรับรอง SSL ของคุณแล้ว ก็ถึงเวลากำหนดค่าเว็บเซิร์ฟเวอร์ Nginx เพื่อใช้งาน ใบรับรอง SSL ใหม่จะอยู่ใน /etc/letsencrypt/live/ ใต้ไดเร็กทอรีที่ตั้งชื่อตามชื่อโดเมนของคุณ เรียกใช้คำสั่ง ls เพื่อแสดงรายการไฟล์ใบรับรองที่ออกให้กับโดเมนของคุณ

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk

10. ถัดไป เปิดไฟล์ /etc/nginx/sites-available/default ด้วยโปรแกรมแก้ไขข้อความ และเพิ่มบล็อกต่อไปนี้หลังบรรทัดแสดงความคิดเห็นบรรทัดแรกที่ระบุจุดเริ่มต้นของ บล็อกเอสเอสแอล ใช้ภาพหน้าจอด้านล่างเป็นแนวทาง

sudo nano /etc/nginx/sites-enabled/default

ข้อความที่ตัดตอนมาของบล็อก Nginx:

SSL configuration
        #
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/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_dhparam /etc/nginx/ssl/dhparams.pem;

แทนที่ค่าชื่อโดเมนสำหรับใบรับรอง SSL ตามลำดับ

11. ในขั้นตอนถัดไปให้สร้างรหัส Diffie-Hellman ที่แข็งแกร่งในไดเร็กทอรี /etc/nginx/ssl/ เพื่อปกป้องเซิร์ฟเวอร์ของคุณจาก การโจมตี Logjam โดยการรันคำสั่งต่อไปนี้

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

12. สุดท้าย รีสตาร์ท Nginx daemon เพื่อให้สอดคล้องกับการเปลี่ยนแปลง

sudo systemctl restart nginx

และทดสอบใบรับรอง SSL ของคุณโดยไปที่ URL ด้านล่าง

https://www.ssllabs.com/ssltest/analyze.html

ขั้นตอนที่ 4: ต่ออายุอัตโนมัติมาเข้ารหัสใบรับรอง Nginx

13. ใบรับรองที่ออกโดย Let’s Encrypt CA จะมีอายุการใช้งาน 90 วัน เพื่อต่ออายุไฟล์อัตโนมัติก่อนวันหมดอายุ ให้สร้างสคริปต์ทุบตี ssl-renew.sh ในไดเร็กทอรี /usr/local/bin/ โดยมีเนื้อหาดังต่อไปนี้

sudo nano /usr/local/bin/ssl-renew.sh

เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์ ssl-renew.sh

#!/bin/bash

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0

แทนที่ตัวแปร --webroot-path เพื่อให้ตรงกับรูทเอกสาร Nginx ของคุณ ตรวจสอบให้แน่ใจว่าสคริปต์สามารถเรียกทำงานได้โดยการออกคำสั่งต่อไปนี้

sudo chmod +x /usr/local/bin/ssl-renew.sh

14. สุดท้ายให้เพิ่มงาน cron เพื่อเรียกใช้สคริปต์ทุกๆ สองเดือนเวลาเที่ยงคืน เพื่อให้มั่นใจว่าใบรับรองของคุณจะได้รับการอัปเดตในเวลาประมาณ 30 วันก่อนหมดอายุ

sudo crontab -e

เพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์

0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1

แค่นั้นแหละ! ขณะนี้เซิร์ฟเวอร์ Nginx ของคุณให้บริการเนื้อหา SSL โดยใช้ใบรับรอง Let's Encrypt SSL ฟรี