วิธีรักษาความปลอดภัย Nginx ด้วย Let's Encrypt บน Ubuntu และ Debian
ตามบทช่วยสอน มาเข้ารหัส ก่อนหน้านี้เกี่ยวกับ Apache SSL ในบทความนี้ เราจะพูดถึงวิธีสร้างและติดตั้งใบรับรอง SSL/TLS ฟรีที่ออกโดย มาเข้ารหัส CA กันเถอะ สำหรับเว็บเซิร์ฟเวอร์ Nginx บน Ubuntu หรือ Debian
อ่านด้วย
- รักษาความปลอดภัย Apache ด้วย Let's Encrypt ฟรีบน Ubuntu และ Debian
- ติดตั้ง Let's Encrypt SSL เพื่อรักษาความปลอดภัย Apache บน RHEL และ CentOS
การทดสอบสภาพแวดล้อมตัวอย่าง
ความต้องการ
- โดเมนที่จดทะเบียนซึ่งมีระเบียน DNS
A
ที่ถูกต้องเพื่อชี้กลับไปยังที่อยู่ IP ของเซิร์ฟเวอร์ของคุณ - เว็บเซิร์ฟเวอร์ 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 ฟรี