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

ติดตั้ง Let's Encrypt SSL Certificate สำหรับ Nginx บน RHEL 9/8


ในบทความนี้ เราจะแนะนำคุณเกี่ยวกับวิธีสร้างและติดตั้งใบรับรอง SSL/TLS ที่ได้รับฟรีจาก Let's Encrypt Certificate Authority ที่เราจะใช้เพื่อรักษาความปลอดภัยธุรกรรม HTTP ของเว็บเซิร์ฟเวอร์ Nginx บน RHEL และ การกระจายแบบอิง RHEL เช่น Fedora, Rocky Linux และ AlmaLinux

หากคุณต้องการติดตั้ง Let’s Encrypt สำหรับ Apache บนการกระจายแบบ RHEL และ RHEL ให้ทำตามคำแนะนำด้านล่าง:

ความต้องการ

  • ชื่อโดเมนที่จดทะเบียนซึ่งมีระเบียน DNS A ที่ถูกต้องเพื่อชี้กลับไปยังที่อยู่ IP สาธารณะของเซิร์ฟเวอร์
  • เว็บเซิร์ฟเวอร์ Nginx ที่ติดตั้งโดยเปิดใช้งาน SSL และเปิดใช้งานโฮสต์เสมือน (สำหรับการโฮสต์หลายโดเมนหรือโดเมนย่อยเท่านั้น)

การตั้งค่าสภาพแวดล้อมการทดสอบของเรา

ขั้นตอนที่ 1: ติดตั้ง Nginx Web Server ในระบบ RHEL

1. ในขั้นตอนแรก ในกรณีที่คุณไม่ได้ติดตั้ง Nginx daemon ไว้แล้ว ให้ออกคำสั่งด้านล่างพร้อมสิทธิ์รูทเพื่อติดตั้งเว็บเซิร์ฟเวอร์ Nginx จากที่เก็บ Epel


------------- On RHEL, Rocky & AlmaLinux 9 ------------- 
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

------------- On RHEL, Rocky & AlmaLinux 8 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

------------- Install Nginx Web Server -------------
yum install nginx

หมายเหตุ: ผู้ใช้ Fedora ไม่จำเป็นต้องติดตั้งพื้นที่เก็บข้อมูล epel

ขั้นตอนที่ 2: ติดตั้ง Let's Encrypt (Certbot) ในระบบ RHEL

2. วิธีที่เร็วที่สุดในการติดตั้งไคลเอนต์ Let's Encrypt บนระบบ Linux คือการติดตั้งแพ็คเกจ certbot และ python3-certbot-nginx จากที่เก็บ epel .


dnf install certbot python3-certbot-nginx

3. หลังจากติดตั้งไคลเอ็นต์ certbot แล้ว ให้ตรวจสอบเวอร์ชันที่ติดตั้งของซอฟต์แวร์ Let's Encrypt โดยเรียกใช้คำสั่งด้านล่าง:


certbot --version

certbot 1.30.0

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

4. กระบวนการรับ ใบรับรอง SSL/TLS ฟรีสำหรับ Nginx จะดำเนินการด้วยตนเองโดยใช้ Let's Encrypt Standalone ปลั๊กอิน

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

ดังนั้น หาก Nginx ทำงานอยู่แล้ว ให้หยุด daemon ด้วยคำสั่งต่อไปนี้ และเรียกใช้ยูทิลิตี้ ss เพื่อยืนยันว่าพอร์ต 80 ไม่ได้ใช้งานอยู่ในสแต็กเครือข่ายอีกต่อไป


service nginx stop
systemctl stop nginx
ss -tln

5. ตอนนี้ถึงเวลารับใบรับรอง SSL ฟรีจาก Let's Encrypt โดยการรันคำสั่ง certbot ด้วย --nginx เพื่อเริ่มต้นการดึงข้อมูลและการกำหนดค่าใบรับรองความปลอดภัย Let's Encrypt สำหรับโดเมน Nginx


certbot --nginx
Or
certbot --nginx -d example.com -d www.example.com

6. สุดท้ายนี้ หากทุกอย่างเป็นไปตามที่ควร ข้อความแสดงความยินดีจะแสดงบนเทอร์มินัล bash ของคุณ ข้อความจะแสดงเมื่อใบรับรองจะหมดอายุ

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

9. เมื่อคุณเป็นเจ้าของ ใบรับรอง SSL/TLS ฟรีแล้ว ก็ถึงเวลาติดตั้งลงในเว็บเซิร์ฟเวอร์ Nginx เพื่อให้โดเมนของคุณใช้งานได้

ใบรับรอง 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 เพื่อแก้ไขและเพิ่มข้อความสั่งด้านล่างหลังบรรทัดฟังสุดท้ายจาก บล็อกเซิร์ฟเวอร์ ใช้ภาพประกอบด้านล่างเป็นแนวทาง

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 ที่ https://yourdomain หน้าเว็บควรโหลดได้อย่างราบรื่นโดยไม่มีข้อผิดพลาดของใบรับรอง

systemctl restart nginx
service nginx restart

12. หากต้องการตรวจสอบใบรับรอง SSL/TLS และความตรง โปรดไปที่ลิงก์ต่อไปนี้:

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

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

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

ในตัวอย่างนี้ เราใช้บิตคีย์ 4096 ซึ่งจริงๆ แล้วใช้เวลานานในการสร้างและมีค่าใช้จ่ายเพิ่มเติมบนเซิร์ฟเวอร์ของคุณและในการจับมือ SSL

ในกรณีที่ไม่จำเป็นต้องใช้คีย์อย่างชัดเจนและคุณไม่หวาดระแวง คุณควรปลอดภัยด้วยคีย์บิต 2048

14. หลังจากสร้างคีย์ DH แล้ว ให้เปิดไฟล์การกำหนดค่า 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. มาเข้ารหัสกัน CA ปล่อยใบรับรอง SSL/TLS ฟรี ซึ่งมีอายุ 90 วัน สามารถต่ออายุและปรับใช้ใบรับรองได้ด้วยตนเองก่อนหมดอายุโดยใช้ปลั๊กอิน webroot โดยไม่ต้องหยุดเว็บเซิร์ฟเวอร์ของคุณ โดยออกคำสั่งด้านล่าง:


certbot --nginx -d example.com -d www.example.com
systemctl reload nginx

เมื่อเรียกใช้คำสั่งข้างต้น ตรวจสอบให้แน่ใจว่าคุณได้แทนที่ example.com เพื่อให้ตรงกับโดเมนของคุณ

17. หากต้องการต่ออายุใบรับรองอัตโนมัติก่อนที่จะหมดอายุ ให้สร้างงาน cron เป็นไฟล์ crontab ที่มีอยู่


crontab -e

เพิ่มงาน cron ต่อไปนี้ที่ด้านล่างของไฟล์ ซึ่งจะทำงานทุกวันตอนเที่ยงเพื่อตรวจสอบการหมดอายุของใบรับรองและต่ออายุ ตัวเลือก --quiet บอกให้ Certbot ไม่ต้องสร้างเอาต์พุต


0 12 * * * /usr/bin/certbot renew --quiet

นั่นคือทั้งหมด! ขณะนี้ เซิร์ฟเวอร์ Nginx สามารถนำเสนอเนื้อหาเว็บที่ปลอดภัยด้วยใบรับรอง SSL/TLS Let’s Encrypt ฟรีบนเว็บไซต์ของคุณ