commit f233d50a5eb6bd78a3022b88ebcffa3e6ac548ea Author: Siwat Sirichai Date: Sun Aug 31 13:35:29 2025 +0700 Initial commit with manual documentation and certificate renewal guide diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..206ba88 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,11 @@ +{ + "permissions": { + "allow": [ + "Bash(dir \"C:\\Users\\siwat\\Nextcloud\\Documents\\SATITM-Network 2024\\Manual\\photos\")", + "Bash(dir \"C:\\Users\\siwat\\Nextcloud\\Documents\\SATITM-Network 2024\\Manual\\photos\\cert_renew\")", + "Bash(python:*)" + ], + "deny": [], + "ask": [] + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bf201e3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,54 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# Virtual environments +venv/ +env/ +ENV/ +.venv/ +.env/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +desktop.ini + +# Generated PDFs (optional - remove if you want to track PDFs) +*.pdf + +# Temporary files +*.tmp +*.temp +*.log \ No newline at end of file diff --git a/CERT_RENEW.md b/CERT_RENEW.md new file mode 100644 index 0000000..7280cb0 --- /dev/null +++ b/CERT_RENEW.md @@ -0,0 +1,308 @@ +# คู่มือการต่ออายุ Wildcard Certificate +**โรงเรียนสาธิตจุฬาลงกรณ์มหาวิทยาลัย ฝ่ายมัธยม** +**คู่มือปฏิบัติการ IT** + +--- + +## ภาพรวม + +คู่มือนี้ให้คำแนะนำทีละขั้นตอนสำหรับการต่ออายุ wildcard certificate ประจำปีที่ใช้ในโครงสร้างเครือข่ายของโรงเรียน Certificate นี้ต้องต่ออายุทุกปีและต้องติดตั้งในสองตำแหน่งที่สำคัญ + +## ข้อมูล Certificate + +- **ผู้ให้บริการ**: https://www.hostneverdie.com/ +- **วันหมดอายุปัจจุบัน**: 21 พฤศจิกายน 2025 +- **กำหนดการต่ออายุ**: ทุกปี (ขึ้นอยู่กับเวลาที่ทำการต่ออายุ) +- **ประเภท Certificate**: Wildcard SSL Certificate + +## ข้อกำหนดเบื้องต้น + +- สิทธิ์ผู้ดูแลระบบในการเข้าถึง FortiGate (10.0.98.1) +- สิทธิ์ SSH/ผู้ดูแลระบบในการเข้าถึง Reverse Proxy server (10.3.2.10) +- ไฟล์ certificate ใหม่ (.crt และ .key) ที่ได้จาก hostneverdie.com + +--- + +## ส่วนที่ 1: การจัดหา Certificate + +### ขั้นตอนที่ 1: รับ Certificate ใหม่จากผู้ให้บริการ + +1. ติดต่อผู้ให้บริการ hostneverdie.com เพื่อขอต่ออายุ certificate +2. รอรับไฟล์ certificate ใหม่ทางอีเมล์: + - ไฟล์ Certificate (.crt) + - ไฟล์ Private key (.key) + +### ขั้นตอนที่ 2: ตรวจสอบไฟล์ Certificate + +1. ตรวจสอบให้แน่ใจว่าคุณมีทั้งสองไฟล์: + - `domain.crt` (ไฟล์ certificate) + - `domain.key` (ไฟล์ private key) +2. จดบันทึกวันหมดอายุใหม่สำหรับเอกสาร + +--- + +## ส่วนที่ 2: การติดตั้งใน FortiGate (10.0.98.1) + +### ขั้นตอนที่ 3: เข้าถึง FortiGate Management Interface + +1. เปิดเว็บเบราว์เซอร์และไปที่: `https://10.0.98.1` +2. เข้าสู่ระบบด้วยข้อมูลประจำตัวผู้ดูแลระบบ + +![FortiGate Login Screen](photos/common/fortigate_login.png) + +3. ตรวจสอบให้แน่ใจว่าคุณอยู่ใน **root VDOM** (ตรวจสอบมุมบนขวา) + +![FortiGate VDOM Root](photos/common/fortigate_vdom_root.png) + +### ขั้นตอนที่ 4: นำเข้า Certificate ใหม่ + +1. ไปที่ **System** → **Certificates** + +![FortiGate System Menu](photos/cert_renew/fgt_menu_certificate.png) + +2. คลิกปุ่ม **Create/Import** + +![FortiGate Create/Import Certificate](photos/cert_renew/fgt_create_import_cert.png) + +3. เลือก **Certificate** จาก dropdown + +![FortiGate Import Certificate](photos/cert_renew/fgt_import_certificate.png) + +4. เลือก **Import Certificate** + +5. ใน Certificate import dialog: + - คลิก **Browse** ข้างช่อง **Certificate** + - เลือกไฟล์ `.crt` ของคุณ + - คลิก **Browse** ข้างช่อง **Private Key** + - เลือกไฟล์ `.key` ของคุณ + +![FortiGate Upload Certificate](photos/cert_renew/fgt_upload_cert.png) + +6. คลิก **Create** เพื่อนำเข้า certificate + + +### ขั้นตอนที่ 5: อัปเดต Authentication Settings + +1. ไปที่ **User & Authentication** → **Authentication Settings** + + +2. ในส่วน **Certificate** เลือก certificate ที่เพิ่งนำเข้ามา + +![FortiGate User Authentication Certificate](photos/cert_renew/fgt_user_auth_cert.png) + +3. คลิก **Apply** เพื่อบันทึกการเปลี่ยนแปลง + +### ขั้นตอนที่ 6: อัปเดต SSL/SSH Inspection Profile + +**⚠️ สำคัญ: ลบ certificate เก่าออกก่อนที่จะเพิ่ม certificate ใหม่** + +1. ไปที่ **Security Profiles** → **SSL/SSH Inspection** + + +2. ค้นหาและแก้ไข profile **"reverse-proxy"** + +![FortiGate Reverse Proxy Certificate](photos/cert_renew/fgt_reverse_proxy_cert.png) + +3. ในส่วน **Server Certificate**: + - **ขั้นแรก**: ลบ certificate เก่าโดยคลิกปุ่ม **X** หรือ **Remove** + - **จากนั้น**: เลือก certificate ที่เพิ่งนำเข้ามา + +![FortiGate SSL/SSH Server Certificate](photos/cert_renew/fgt_ssl_ssh_server_cert.png) + +4. คลิก **OK** เพื่อบันทึกการเปลี่ยนแปลงของ profile + +--- + +## ส่วนที่ 3: การติดตั้งใน Reverse Proxy (10.3.2.10) + +### ขั้นตอนที่ 7: เข้าถึง Reverse Proxy Server + +1. เชื่อมต่อไปยัง reverse proxy server ผ่าน SSH: + ```bash + ssh cud@10.3.2.10 + ``` + +2. ไปยัง certificate directory: + ```bash + cd /etc/nginx/certs/ + ``` + +### ขั้นตอนที่ 8: สำรองข้อมูล Certificate ที่มีอยู่ + +1. สร้างการสำรองข้อมูลของ certificate ปัจจุบัน: + ```bash + sudo cp satitm.crt satitm.crt.backup.$(date +%Y%m%d) + sudo cp satitm.key satitm.key.backup.$(date +%Y%m%d) + ``` + + +2. แสดงรายการไฟล์เพื่อตรวจสอบการสร้างข้อมูลสำรอง: + ```bash + ls -la + ``` + + +### ขั้นตอนที่ 8: อัปโหลดไฟล์ Certificate ด้วย WinSCP + +1. ดาวน์โหลดและติดตั้ง WinSCP จาก https://winscp.net/eng/downloads.php (หากยังไม่ได้ติดตั้ง) + +2. เปิดโปรแกรม WinSCP + +![WinSCP Main Window](photos/winscp/main_window.png) + +3. สร้างการเชื่อมต่อใหม่: + - **Host name**: 10.3.2.10 + - **User name**: cud + - **Password**: [รหัสผ่าน] + - **Port**: 22 + +![WinSCP Login Dialog](photos/winscp/login.png) + +4. คลิก **Login** เพื่อเชื่อมต่อ + +5. หากเป็นการเชื่อมต่อครั้งแรก จะมีป๊อปอัปขอยืนยัน SSH key คลิก **Accept** เพื่อยอมรับ (ขั้นตอนนี้เป็นทางเลือก) + +![WinSCP Accept SSH Key](photos/winscp/accept_ssh_key.png) + +![WinSCP Connected Interface](photos/winscp/main_window_connected.png) + +6. ในหน้าต่าง WinSCP: + - **ด้านซ้าย**: ไฟล์ในเครื่อง Windows ของคุณ + - **ด้านขวา**: ไฟล์ในเซิร์ฟเวอร์ Linux + +7. นำทางไปยังโฟลเดอร์ที่มีไฟล์ certificate ใหม่ (ด้านซ้าย) + +8. นำทางไปยังโฟลเดอร์ home directory เช่น `/home/cud/` (ด้านขวา) + + +9. ลากไฟล์ certificate (.crt) และ private key (.key) จากด้านซ้ายไปด้านขวา + + +10. ตรวจสอบว่าไฟล์ถูกอัปโหลดสำเร็จแล้ว + + +### ขั้นตอนที่ 9: ติดตั้งไฟล์ Certificate ใหม่ + +1. คัดลอกไฟล์ certificate จาก `/home/cud/` ไปยังตำแหน่งที่ถูกต้อง: + + **หมายเหตุ**: ชื่อไฟล์ที่คุณได้รับอาจแตกต่างกัน เพื่อความสะดวกในการคัดลอกคำสั่ง ควรเปลี่ยนชื่อไฟล์ให้เป็น `certificate.crt` และ `private.key` ก่อน + + ```bash + sudo cp /home/cud/certificate.crt /etc/nginx/certs/satitm.crt + sudo cp /home/cud/private.key /etc/nginx/certs/satitm.key + ``` + +2. กำหนดสิทธิ์ที่ถูกต้อง: + ```bash + sudo chmod 644 /etc/nginx/certs/satitm.crt + sudo chmod 600 /etc/nginx/certs/satitm.key + sudo chown root:root /etc/nginx/certs/satitm.* + ``` + +### ขั้นตอนที่ 10: รีสตาร์ท Nginx Service + +1. ทดสอบการกำหนดค่า Nginx: + ```bash + sudo nginx -t + ``` + ผลลัพธ์ที่คาดหวัง: + ``` + nginx: the configuration file /etc/nginx/nginx.conf syntax is ok + nginx: configuration file /etc/nginx/nginx.conf test is successful + ``` + +2. หากการทดสอบการกำหนดค่าผ่าน ให้รีสตาร์ท Nginx: + ```bash + sudo service nginx restart + ``` + +3. ตรวจสอบว่า Nginx กำลังทำงาน: + ```bash + sudo service nginx status + ``` + ผลลัพธ์ที่คาดหวัง (ดูที่บรรทัด Active): + ``` + ● nginx.service - A high performance web server and a reverse proxy server + Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) + Active: active (running) since Wed 2025-08-27 06:04:11 UTC; 4 days ago + Docs: man:nginx(8) + Main PID: 11527 (nginx) + Tasks: 49 (limit: 4548) + Memory: 129.1M + ``` + **สำคัญ**: ตรวจสอบให้แน่ใจว่าบรรทัด "Active" แสดงสถานะ "active (running)" + +--- + +## ส่วนที่ 4: การตรวจสอบและทดสอบ + +### ขั้นตอนที่ 11: ตรวจสอบการติดตั้ง Certificate + +1. **ทดสอบ FortiGate Certificate**: + - เข้าถึง web interface ของ FortiGate + - ตรวจสอบว่าเบราว์เซอร์แสดง certificate ที่ถูกต้อง + - ตรวจสอบวันหมดอายุในรายละเอียด certificate ของเบราว์เซอร์ + + +2. **ทดสอบ Reverse Proxy Certificate**: + - เข้าถึงบริการผ่าน reverse proxy + - ตรวจสอบ SSL certificate ในเบราว์เซอร์ + - ตรวจสอบรายละเอียด certificate สำหรับวันหมดอายุที่ถูกต้อง + + +### ขั้นตอนที่ 12: อัปเดตเอกสาร + +1. บันทึกวันหมดอายุ certificate ใหม่ +2. อัปเดตระบบตรวจสอบ/ติดตาม certificate +3. ตั้งการแจ้งเตือนในปฏิทินสำหรับการต่ออายุปีหน้า (แนะนำ 30-60 วันก่อนหมดอายุ) + +--- + +## การแก้ไขปัญหา + +### ปัญหาที่พบบ่อย + +**การนำเข้า Certificate ใน FortiGate ล้มเหลว** +- ตรวจสอบรูปแบบไฟล์ certificate และ key +- ตรวจสอบให้แน่ใจว่าคุณอยู่ใน root VDOM +- ตรวจสอบว่า certificate และ private key ตรงกัน + +**Nginx ไม่สามารถเริ่มต้นหลังจากติดตั้ง Certificate** +- รัน `sudo nginx -t` เพื่อตรวจสอบ syntax ของการกำหนดค่า +- ตรวจสอบสิทธิ์ไฟล์ certificate (644 สำหรับ .crt, 600 สำหรับ .key) +- ตรวจสอบว่าไฟล์ certificate ไม่เสียหาย + +**Certificate แสดงเป็น Invalid ในเบราว์เซอร์** +- ตรวจสอบว่าการติดตั้ง certificate สำเร็จแล้ว +- ล้าง cache และ cookies ของเบราว์เซอร์ +- ตรวจสอบวันหมดอายุและระยะเวลาที่ certificate ใช้ได้ + +### การคืนค่าในกรณีฉุกเฉิน + +หากเกิดปัญหาหลังจากการติดตั้ง certificate: + +**การคืนค่า FortiGate**: +1. เปลี่ยนกลับไปใช้ certificate ก่อนหน้าใน SSL/SSH Inspection profile +2. อัปเดต Authentication Settings เพื่อใช้ certificate ก่อนหน้า + +**การคืนค่า Reverse Proxy**: +1. กู้คืน certificate สำรอง: + ```bash + sudo cp satitm.crt.backup.YYYYMMDD satitm.crt + sudo cp satitm.key.backup.YYYYMMDD satitm.key + ``` +2. รีสตาร์ท Nginx: `sudo service nginx restart` + +--- + +## ข้อมูลการติดต่อ + +สำหรับความช่วยเหลือในการต่ออายุ certificate: +- **ผู้ให้บริการ Certificate**: https://www.hostneverdie.com/ +- **ติดต่อฉุกเฉิน**: ศิวัช ศิริชัย 086-789-5193 + +--- + +**เวอร์ชันเอกสาร**: 1.0 +**อัปเดตล่าสุด**: 31 สิงหาคม 2025 +**ทบทวนครั้งต่อไป**: 31 สิงหาคม 2026 \ No newline at end of file diff --git a/photos/cert_renew/fgt_create_import_cert.png b/photos/cert_renew/fgt_create_import_cert.png new file mode 100644 index 0000000..7a62b63 Binary files /dev/null and b/photos/cert_renew/fgt_create_import_cert.png differ diff --git a/photos/cert_renew/fgt_import_certificate.png b/photos/cert_renew/fgt_import_certificate.png new file mode 100644 index 0000000..07edab9 Binary files /dev/null and b/photos/cert_renew/fgt_import_certificate.png differ diff --git a/photos/cert_renew/fgt_menu_certificate.png b/photos/cert_renew/fgt_menu_certificate.png new file mode 100644 index 0000000..842f48c Binary files /dev/null and b/photos/cert_renew/fgt_menu_certificate.png differ diff --git a/photos/cert_renew/fgt_reverse_proxy_cert.png b/photos/cert_renew/fgt_reverse_proxy_cert.png new file mode 100644 index 0000000..c208ba3 Binary files /dev/null and b/photos/cert_renew/fgt_reverse_proxy_cert.png differ diff --git a/photos/cert_renew/fgt_ssl_ssh_server_cert.png b/photos/cert_renew/fgt_ssl_ssh_server_cert.png new file mode 100644 index 0000000..671cd77 Binary files /dev/null and b/photos/cert_renew/fgt_ssl_ssh_server_cert.png differ diff --git a/photos/cert_renew/fgt_upload_cert.png b/photos/cert_renew/fgt_upload_cert.png new file mode 100644 index 0000000..6b95e8f Binary files /dev/null and b/photos/cert_renew/fgt_upload_cert.png differ diff --git a/photos/cert_renew/fgt_user_auth_cert.png b/photos/cert_renew/fgt_user_auth_cert.png new file mode 100644 index 0000000..a933099 Binary files /dev/null and b/photos/cert_renew/fgt_user_auth_cert.png differ diff --git a/photos/common/fortigate_dashboard.png b/photos/common/fortigate_dashboard.png new file mode 100644 index 0000000..a0438f7 Binary files /dev/null and b/photos/common/fortigate_dashboard.png differ diff --git a/photos/common/fortigate_login.png b/photos/common/fortigate_login.png new file mode 100644 index 0000000..9984970 Binary files /dev/null and b/photos/common/fortigate_login.png differ diff --git a/photos/common/fortigate_vdom_global.png b/photos/common/fortigate_vdom_global.png new file mode 100644 index 0000000..7e54fac Binary files /dev/null and b/photos/common/fortigate_vdom_global.png differ diff --git a/photos/common/fortigate_vdom_root.png b/photos/common/fortigate_vdom_root.png new file mode 100644 index 0000000..50a7220 Binary files /dev/null and b/photos/common/fortigate_vdom_root.png differ diff --git a/photos/winscp/accept_ssh_key.png b/photos/winscp/accept_ssh_key.png new file mode 100644 index 0000000..33961cf Binary files /dev/null and b/photos/winscp/accept_ssh_key.png differ diff --git a/photos/winscp/login.png b/photos/winscp/login.png new file mode 100644 index 0000000..f3483ed Binary files /dev/null and b/photos/winscp/login.png differ diff --git a/photos/winscp/main_window.png b/photos/winscp/main_window.png new file mode 100644 index 0000000..fbdb54a Binary files /dev/null and b/photos/winscp/main_window.png differ diff --git a/photos/winscp/main_window_connected.png b/photos/winscp/main_window_connected.png new file mode 100644 index 0000000..3d564d2 Binary files /dev/null and b/photos/winscp/main_window_connected.png differ diff --git a/photos/winscp/new_tab.png b/photos/winscp/new_tab.png new file mode 100644 index 0000000..4ce6401 Binary files /dev/null and b/photos/winscp/new_tab.png differ