ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ติดตั้ง SSL Certificate บน IIS

ติดตั้ง SSL Certificate บน IIS

เมื่อซื้อ SSL Certificate แบบเสียเงินจากผู้ออกใบรับรอง (CA) เช่น แบบ OV หรือ EV สำหรับเว็บไซต์ที่รันบน IIS ของ Windows Server ขั้นตอนมีสามช่วง คือ สร้าง CSR (Certificate Signing Request) บนเซิร์ฟเวอร์ ส่ง CSR ให้ CA เพื่อออกใบรับรอง แล้วนำใบรับรองกลับมาติดตั้งและผูก (Binding) กับเว็บไซต์บนพอร์ต 443 บทความนี้ครอบคลุมทั้งสองกรณี คือ สร้าง CSR เองใน IIS และนำเข้าไฟล์ .pfx ที่มีอยู่แล้ว

ถ้าต้องการ SSL ฟรีที่ต่ออายุอัตโนมัติ ดู ขอ SSL ฟรีจาก Let's Encrypt บน IIS ด้วย win-acme แทน

สิ่งที่ต้องเตรียม

ขั้นตอนที่ 1: สร้าง CSR ใน IIS Manager

ข้ามขั้นตอนนี้ได้ถ้ามีไฟล์ .pfx อยู่แล้ว (ไปที่ขั้นตอนที่ 3)

  1. เปิด Internet Information Services (IIS) Manager จาก Server Manager เมนู Tools หรือพิมพ์ inetmgr ในหน้าต่าง Run
  2. คลิกชื่อเซิร์ฟเวอร์ในแผง Connections ทางซ้าย (ระดับบนสุด ไม่ใช่ชื่อเว็บไซต์)
  3. ดับเบิลคลิกไอคอน Server Certificates
  4. ในแผง Actions ทางขวา คลิก Create Certificate Request...
  5. กรอกหน้า Distinguished Name Properties
    • Common name: ชื่อโดเมนที่ต้องการ เช่น www.example.com (CA ส่วนใหญ่จะรวม example.com ให้อัตโนมัติ ให้ตรวจกับ CA ที่ใช้)
    • Organization: ชื่อบริษัทตามที่จดทะเบียน (สำคัญสำหรับแบบ OV และ EV)
    • Organizational unit: เช่น IT
    • City/locality และ State/province: เช่น Bangkok
    • Country/region: TH
  6. หน้า Cryptographic Service Provider Properties เลือก Microsoft RSA SChannel Cryptographic Provider และ Bit length 2048 ขึ้นไป
  7. ระบุตำแหน่งบันทึกไฟล์ เช่น C:\certs\www.example.com.csr.txt แล้วกด Finish

ไฟล์ที่ได้เป็นข้อความที่ขึ้นต้นด้วย -----BEGIN NEW CERTIFICATE REQUEST----- ในขั้นตอนนี้ Windows สร้าง Private Key เก็บไว้ในเครื่องนี้แล้ว จึงต้องทำขั้นตอนที่ 2 บน เซิร์ฟเวอร์เครื่องเดียวกัน ห้ามลบ Request ที่ค้างอยู่

ขั้นตอนที่ 2: ส่ง CSR ให้ CA และติดตั้งใบรับรองที่ได้

คัดลอกข้อความ CSR ทั้งหมดรวมบรรทัด BEGIN และ END ไปวางในหน้าสั่งซื้อหรือหน้า Reissue ของ CA ทำการยืนยันความเป็นเจ้าของโดเมนตามที่ CA กำหนด (อีเมล, DNS TXT Record หรือไฟล์บนเว็บไซต์) เมื่อ CA ออกใบรับรองแล้ว ให้ดาวน์โหลดแบบสำหรับ IIS หรือไฟล์ .cer/.crt พร้อม Intermediate Certificate (CA Bundle)

  1. คัดลอกไฟล์ใบรับรองไปไว้บนเซิร์ฟเวอร์ เช่น C:\certs\www.example.com.cer
  2. ใน IIS Manager ที่หน้า Server Certificates คลิก Complete Certificate Request...
  3. เลือกไฟล์ใบรับรอง ตั้ง Friendly name ที่ระบุโดเมนและปีหมดอายุ เช่น www.example.com 2027 เพื่อแยกออกจากใบเก่าเวลาต่ออายุ
  4. เลือก Certificate store เป็น Web Hosting (เหมาะกับเซิร์ฟเวอร์ที่มีหลายเว็บไซต์) หรือ Personal แล้วกด OK

ถ้า CA ส่ง Intermediate Certificate มาแยก ให้ติดตั้งเข้า Store ของเครื่อง: เปิด certlm.msc ไปที่ Intermediate Certification Authorities แล้วคลิกขวาที่ Certificates เลือก All Tasks และ Import... แล้วเลือกไฟล์ Intermediate

ขั้นตอนที่ 3: นำเข้าไฟล์ .pfx (กรณีมีไฟล์อยู่แล้ว)

ไฟล์ .pfx (หรือ .p12) รวมใบรับรองและ Private Key ไว้ด้วยกัน มักได้มาจากการ Export จากเซิร์ฟเวอร์เดิม หรือ CA บางรายสร้างให้

  1. ที่หน้า Server Certificates คลิก Import... ในแผง Actions
  2. เลือกไฟล์ .pfx และใส่รหัสผ่านของไฟล์
  3. เลือก Certificate store เป็น Web Hosting หรือ Personal
  4. ช่อง Allow this certificate to be exported ให้เลือกเฉพาะเมื่อจำเป็นต้อง Export ไปเครื่องอื่นอีก

ทำเทียบเท่ากันด้วย PowerShell ที่เปิดแบบ Run as administrator ได้ดังนี้ ระบบจะถามรหัสผ่านของไฟล์

Import-PfxCertificate -FilePath C:\certs\www.example.com.pfx `
  -CertStoreLocation Cert:\LocalMachine\WebHosting `
  -Password (Read-Host -AsSecureString -Prompt "PFX password")

ผลลัพธ์จะแสดง Thumbprint และ Subject ของใบรับรอง ให้จด Thumbprint ไว้ใช้ในขั้นตอนถัดไปถ้าจะผูก Binding ด้วย PowerShell

ขั้นตอนที่ 4: ผูกใบรับรองกับเว็บไซต์ (HTTPS Binding)

  1. ใน IIS Manager ขยาย Sites แล้วคลิกเว็บไซต์ที่ต้องการ
  2. ในแผง Actions คลิก Bindings... แล้วกด Add...
  3. Type: https, IP address: All Unassigned, Port: 443
  4. Host name: www.example.com
  5. เลือก Require Server Name Indication (SNI) เพื่อให้หลายเว็บไซต์ใช้พอร์ต 443 ร่วมกันบน IP เดียวได้
  6. SSL certificate: เลือกใบรับรองตาม Friendly name แล้วกด OK
  7. ทำซ้ำอีกหนึ่ง Binding สำหรับ example.com ถ้าใบรับรองครอบคลุมทั้งสองชื่อ

ถ้าต้องการทำด้วย PowerShell (แทนชื่อเว็บไซต์และ Thumbprint ด้วยค่าจริง)

Import-Module WebAdministration
New-WebBinding -Name "example.com" -Protocol https -Port 443 -HostHeader "www.example.com" -SslFlags 1
$binding = Get-WebBinding -Name "example.com" -Protocol https -HostHeader "www.example.com"
$binding.AddSslCertificate("ใส่THUMBPRINTที่นี่", "WebHosting")

-SslFlags 1 คือเปิด SNI และค่า "WebHosting" ต้องตรงกับ Store ที่นำเข้าใบรับรองไว้ (ถ้าใช้ Personal ให้ใส่ "My")

ขั้นตอนที่ 5: บังคับ HTTP ไปเป็น HTTPS (ทางเลือก)

IIS ไม่มีการ Redirect ในตัวแบบที่เหมาะกับงานนี้ ให้ติดตั้งโมดูล URL Rewrite จาก iis.net/downloads/microsoft/url-rewrite ก่อน แล้วเพิ่มกฎในไฟล์ web.config ที่ Root ของเว็บไซต์ ภายใน <system.webServer> (สำรองไฟล์ก่อนแก้)

<rewrite>
  <rules>
    <rule name="HTTP to HTTPS" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTPS}" pattern="off" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

ถ้า web.config มีส่วน <rewrite> อยู่แล้ว (เช่น เว็บไซต์ WordPress บน IIS) ให้เพิ่มเฉพาะ <rule> ไว้เป็นกฎแรกใน <rules> อย่าสร้างส่วน rewrite ซ้ำ เพราะจะทำให้เกิด Error 500.19

ตรวจสอบผลลัพธ์

  • เปิด https://www.example.com ในเบราว์เซอร์ ต้องไม่มีคำเตือน และเมื่อคลิกไอคอนหน้าที่อยู่ จะเห็นชื่อผู้ออกใบรับรองและวันหมดอายุตรงกับที่ซื้อ
  • ตรวจว่า Chain ครบด้วยเครื่องมือออนไลน์ เช่น SSL Labs (ssllabs.com/ssltest) ต้องไม่มีข้อความ Chain issues: Incomplete
  • ตรวจจากเครื่องที่มี OpenSSL ด้วยคำสั่งใน ตรวจสอบ SSL Certificate และวันหมดอายุ

ปัญหาที่พบบ่อย

ใบรับรองหายไปจากรายการหลังกด Complete Certificate Request หรือเลือกใน Binding ไม่ได้

สาเหตุหลักคือใบรับรองไม่มี Private Key คู่กัน เช่น สร้าง CSR คนละเครื่อง หรือลบ Request ที่ค้างไปก่อน ถ้า CSR สร้างบนเครื่องนี้จริง ให้ลองซ่อมการจับคู่ Key ด้วย Command Prompt แบบ Administrator โดยใช้ Serial Number ของใบรับรอง (ดูได้จากแท็บ Details ของไฟล์ .cer)

certutil -repairstore my "SERIALNUMBER"

ถ้ายังไม่ได้ ต้องสร้าง CSR ใหม่บนเครื่องนี้แล้วขอ Reissue จาก CA ซึ่ง CA ส่วนใหญ่ทำให้ได้โดยไม่มีค่าใช้จ่ายเพิ่มในช่วงอายุใบรับรอง

เบราว์เซอร์บางตัวหรือแอปมือถือแจ้งว่าใบรับรองไม่น่าเชื่อถือ

มักเกิดจากไม่ได้ติดตั้ง Intermediate Certificate ทำให้ Chain ไม่ครบ ให้ติดตั้งตามท้ายขั้นตอนที่ 2 แล้วรีสตาร์ต IIS ด้วย iisreset ในช่วงที่มีผู้ใช้น้อย

เว็บไซต์อื่นบนเซิร์ฟเวอร์เดียวกันแสดงใบรับรองผิดชื่อ

เกิดเมื่อบาง Binding ไม่ได้เปิด SNI หรือไม่มี Host name ทำให้ IIS ใช้ใบรับรองของ Binding นั้นเป็นค่าเริ่มต้นสำหรับทุกชื่อ ให้ตรวจ Binding แบบ https ของทุกเว็บไซต์ให้มี Host name และเลือก Require Server Name Indication

ใบรับรองแบบเสียเงินต้องต่ออายุด้วยตนเอง ควรตั้งการแจ้งเตือนก่อนหมดอายุไว้ล่วงหน้า หากติดปัญหาระหว่างติดตั้ง ติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security