Skip to content

SSL

เป็นเทคโนโลยีเข้ารหัสข้อมูลรุ่นเก่า พัฒนาโดยบริษัท Netscape ในยุคแรกของอินเทอร์เน็ต ปัจจุบัน เลิกใช้แล้ว เพราะมีช่องโหว่ด้านความปลอดภัย แต่คนยังเรียกติดปากว่า “SSL” อยู่

คือเวอร์ชันที่พัฒนาต่อจาก SSL ปลอดภัยกว่า และเป็นมาตรฐานที่ใช้จริงในปัจจุบัน

เวลาเราเรียกว่า SSL Certificate จริง ๆ แล้วทางเทคนิคมันคือ TLS Certificate

ตัวอย่างการใช้งาน ssl

Section titled “ตัวอย่างการใช้งาน ssl”

เวลาคุณเข้าเว็บ:

http://example.com

ข้อมูลที่ส่งระหว่างคุณกับเว็บ อ่านได้หมด ใครดัก Wi-Fi ก็เห็น password ได้เลย

sequenceDiagram
    participant User
    participant Attacker (Wi-Fi Sniffer)
    participant Server

    User->>Server: ส่ง username & password (Plain Text)
    Attacker-->>User: ดักข้อมูลระหว่างทาง
    Attacker-->>Server: อ่านข้อมูลได้หมด
    Server-->>User: ส่งข้อมูลกลับ (Plain Text)

แต่ถ้าเป็น:

https://example.com

ข้อมูลจะถูก “เข้ารหัส” ต่อให้มีคนดักอยู่กลางทางก็อ่านไม่ออก

sequenceDiagram
    participant User
    participant Attacker (Wi-Fi Sniffer)
    participant Server

    User->>Server: ส่ง username & password (Plain Text)
    Attacker-->>User: ดักข้อมูลระหว่างทาง
    Attacker-->>Server: อ่านข้อมูลได้หมด
    Server-->>User: ส่งข้อมูลกลับ (Plain Text)

คือองค์กรที่ออกใบรับรอง (Certificate) ทำหน้าที่เหมือน “กรมการปกครองของอินเทอร์เน็ต” เวลาเว็บจะเปิด HTTPS ต้องไปขอใบรับรองจาก CA ก่อน ตัวอย่าง CA ที่คนใช้กัน:

  • Let’s Encrypt
  • DigiCert
  • GlobalSign

CA ทำหน้าที่อะไร?

  1. ตรวจสอบว่าโดเมนนี้เป็นของคุณจริงไหม
  2. ออก Certificate ให้
  3. เซ็นชื่อ (Digital Signature) ลงใน Certificate

ลายเซ็นของ CA คือสิ่งที่ browser ใช้ตรวจสอบความน่าเชื่อถือ

คือ “คำร้องขอใบรับรอง” ที่ Server ส่งไปให้ CA ก่อนที่ CA จะออก Certificate ให้ Server ต้องสร้างไฟล์ CSR ขึ้นมาก่อน ข้างในมี:

  • Public Key
  • Domain (เช่น example.com)
  • ข้อมูล Organization (ถ้ามี)
  • ลายเซ็นดิจิทัลที่เซ็นด้วย Private Key

Certificate คือ “บัตรประชาชนของเว็บไซต์” ข้างในมี:

  • Domain (เช่น example.com)
  • Public Key
  • ชื่อ CA ที่ออกให้
  • ลายเซ็นดิจิทัล
  • วันหมดอายุ

Browser จะใช้มันเพื่อตรวจสอบว่าเว็บนี้ของจริง

ขั้นตอนที่ client กับ server:

  1. ยืนยันตัวตน
  2. สร้างกุญแจลับร่วมกัน
  3. เริ่มเข้ารหัสข้อมูล

คือกุญแจลับที่ใช้เข้ารหัสข้อมูลจริง

ข้อดี:

  • เร็วมาก (ใช้ symmetric encryption เช่น AES)
  • สร้างใหม่ทุก connection

คือชุด algorithm ที่ใช้ใน TLS เช่น:

TLS_AES_128_GCM_SHA256

บอกว่าใช้:

  • การเข้ารหัสแบบไหน (AES)
  • การทำ hash แบบไหน (SHA256)
  • การแลกเปลี่ยนกุญแจแบบไหน
  • กุญแจลับของ Server
  • ห้ามรั่วเด็ดขาด
  • ใช้พิสูจน์ตัวตน
  • ใส่อยู่ใน Certificate
  • แจกให้ client ได้
  • ใช้เข้ารหัสข้อมูลบางส่วนตอน handshake

X.509 คือมาตรฐาน (standard) สำหรับ Digital Certificate ที่ใช้ในระบบ SSL/TLS เพื่อยืนยันตัวตนของ Server หรือบุคคล/องค์กร

สิ่งที่ทำให้ HTTPS ปลอดภัยก็คือ SSL/TLS

File ที่เกี่ยวข้อง

Section titled “File ที่เกี่ยวข้อง”

ปกติเวลาที่ต้องการทำ ssl หรือ https เราจำเป็นต้องต้องมี 3 ส่วนดังต่อไปนี้

  1. private.key (private key)
    • เป็นกุญแจลับของฝั่ง Server
    • ใช้ยืนยันตัวตนของ Server ในขั้นตอน TLS Handshake
    • ใช้ร่วมในการสร้าง/ถอดรหัส session key
    • ห้ามเผยแพร่เด็ดขาด
  2. server.csr (CSR) ถูกสร้างจาก Private Key
    • มีข้อมูล:
      • Public Key
      • Domain / Organization
      • ลายเซ็นจาก Private Key
    • ใช้ส่งให้ CA เพื่อขอออก Certificate
    • ไฟล์นี้ไม่ใช่ความลับ สามารถส่งให้ CA ได้
  3. cert.csr (cert)
    • เป็นไฟล์ที่ CA ออกให้
    • ภายในมี:
      • Public Key
      • ข้อมูลโดเมน
      • ลายเซ็นจาก CA
    • ใช้ให้ Client ตรวจสอบว่า Server เป็นของจริง
    • ใช้ในขั้นตอนแลกเปลี่ยนกุญแจระหว่าง Handshake

Self-sign คือ เราทำตัวเป็น​ CA

ข้อมูลที่ต้องกรอกเพื่อใช้ในการสร้าง private key กับ public key (CSR)

Section titled “ข้อมูลที่ต้องกรอกเพื่อใช้ในการสร้าง private key กับ public key (CSR)”
Fieldความหมายตัวอย่างจำเป็นไหม
Country Name (2 letter code)รหัสประเทศตาม ISO 3166THจำเป็น
State or Province Nameจังหวัด / รัฐ (ชื่อเต็ม)Bangkokจำเป็น
Locality Nameเมือง / เขตChatuchakไม่เคร่งครัด
Organization Nameชื่อบริษัทแบบเต็มExample Company Co., Ltd.จำเป็น (สำคัญสำหรับ OV / EV)
Organizational Unit Nameชื่อแผนกIT Departmentไม่จำเป็น
Common NameDomain ที่จะใช้กับ SSLexample.comสำคัญมาก
Email Addressอีเมลติดต่อadmin@example.comไม่จำเป็น
flowchart TD
    A[Start] --> B[Generate Private Key]
    B --> C[Generate CSR using Private Key]
    C --> D[Send CSR to CA]
    D --> E[CA Validate Domain or Organization]
    E --> F{Validation Passed}
    F -- No --> G[Fix Information and Retry]
    G --> C
    F -- Yes --> H[CA Issue SSL Certificate]
    H --> I[Receive Certificate]
    I --> J[Install Certificate on Server]
    J --> K[Configure Server with Private Key]
    K --> L[Restart Web Server]
    L --> M[HTTPS Ready]

Flow การทำงานของ TLS

Section titled “Flow การทำงานของ TLS”
sequenceDiagram
    participant U as User Browser / Client
    participant S as Server (API)

    Note over U,S: 🔐 TLS Handshake Phase

    U->>S: ClientHello (TLS version, cipher suites, random)
    S->>U: ServerHello (chosen cipher suite, random)
    S->>U: Certificate (public key)
    S->>U: ServerHelloDone

    U->>U: Verify certificate (CA, domain, expiry)
    U->>S: ClientKeyExchange (pre-master secret encrypted with public key)
    U->>S: ChangeCipherSpec
    U->>S: Finished (encrypted)

    S->>S: Decrypt pre-master with private key
    S->>S: Generate session key
    S->>U: ChangeCipherSpec
    S->>U: Finished (encrypted)

    Note over U,S: 🔐 Secure Channel Established (Session Key)

    Note over U,S: 📦 HTTPS Login Request

    U->>S: POST /login (username + password) 🔒 encrypted
    S->>S: Decrypt request using session key
    S->>S: Validate username/password
    S->>S: Generate JWT / Session
    S->>U: Response (token) 🔒 encrypted
flowchart TD

    subgraph TLS Handshake
        A[ClientHello]
        B[ServerHello]
        C[Certificate ส่ง Public Key]
        D[Client ตรวจสอบ Certificate]
        E[Client ส่ง Pre-Master Secret เข้ารหัสด้วย Public Key]
        F[Server ใช้ Private Key ถอดรหัส]
        G[สร้าง Session Key]
        H[Secure Channel Established]
        
        A --> B --> C --> D --> E --> F --> G --> H
    end

    subgraph HTTPS Login
        I[Client ส่ง POST /login]
        J[ข้อมูลถูกเข้ารหัสด้วย Session Key]
        K[Server ถอดรหัส]
        L[Validate Username/Password]
        M[Generate Token]
        N[Response กลับแบบเข้ารหัส]

        H --> I --> J --> K --> L --> M --> N
    end

TLS Handshake จะเกิดตอน “สร้าง TLS connection ใหม่” หลังจากนั้น connection เดิมจะใช้ session key เดิม

เกิดเมื่อ:

  • เปิด tab ใหม่
  • เปิด connection ใหม่
  • connection timeout
  • server ปิด connection
  • HTTP/1.1 ไม่มี keep-alive
  • load balancer เปลี่ยน backendจนกว่า connection จะถูกปิด
flowchart TD

A[User เข้าเว็บ] --> B[TLS Handshake]
B --> C[Derive Session Keys]
C --> D[Connection Established]

D --> E[Request 1 🔒 ใช้ Application Traffic Key]
D --> F[Request 2 🔒 ใช้ Key เดิม]
D --> G[Request 3 🔒 ใช้ Key เดิม]

G --> H{Connection ยังเปิดอยู่ไหม?}

H -->|Yes| D
H -->|No| I[TLS Handshake ใหม่]
Terminal window
# generate public key และ private key โดยที่ไม่ต้องระบบ passphrase
openssl req -newkey rsa:2048 -keyout private.key -out server.csr -nodes
# self sign cert
openssl x509 -req -in server.pem -signkey private.key -out cert.csr
# ดูข้อมูล crs
openssl x509 -in server.csr -text
# ดูข้อมูล cert
openssl x509 -in cert.csr -text