ในคู่มือนี้ เราจะแสดงวิธีการติดตั้งและผูกใบรับรอง Let's Encrypt TLS/SSL ฟรีสำหรับไซต์บนเว็บเซิร์ฟเวอร์ IIS ที่ทำงานบน Windows Server 2019/2016/2012 R2
สารบัญ:
- มาเข้ารหัสและไคลเอนต์ ACME สำหรับ Windows
- WACS Clint เพื่อติดตั้ง Let's Encrypt TLS Certificate ใน IIS บน Windows Server
- เปลี่ยนเส้นทางจาก HTTP เป็น HTTPS โดยใช้ IIS URL Rewrite
- การใช้ Let's Encrypt Certificates กับ RDS Gateway &Web Access
มาเข้ารหัสและไคลเอนต์ ACME สำหรับ Windows
ใบรับรอง TLS/SSL ของเว็บไซต์ช่วยปกป้องข้อมูลผู้ใช้ที่ถ่ายโอนผ่านเครือข่ายสาธารณะจากบุคคลที่อยู่ตรงกลาง (MITM ) โจมตีและให้ความสมบูรณ์ของข้อมูล ศูนย์รับรององค์กรที่ไม่แสวงหากำไร Let's Encrypt อนุญาตให้คุณออกใบรับรอง TLS การเข้ารหัส X.509 โดยอัตโนมัติสำหรับการเข้ารหัส HTTPS โดยใช้ API ออกเฉพาะใบรับรองสำหรับการตรวจสอบโดเมนที่หมดอายุใน 90 วัน (จำกัด 50 ใบรับรองสำหรับหนึ่งโดเมนต่อสัปดาห์) แต่คุณสามารถต่ออายุใบรับรอง SSL สำหรับเว็บไซต์ของคุณได้โดยอัตโนมัติโดยใช้การตั้งเวลาอย่างง่าย
อินเทอร์เฟซ Let's Encrypt API เพื่อออกใบรับรองโดยอัตโนมัติเรียกว่า สภาพแวดล้อมการจัดการใบรับรองอัตโนมัติ (ACME ) เอพีไอ มีการใช้งานไคลเอ็นต์ ACME API ยอดนิยม 3 แบบสำหรับระบบ Windows:
- Windows ACME Simple (WACS) เป็นเครื่องมือพรอมต์คำสั่งสำหรับใบรับรอง SSL แบบโต้ตอบและผูกเข้ากับไซต์เฉพาะบนเว็บเซิร์ฟเวอร์ IIS ของคุณ
- Powershell ACMESharp โมดูล – เป็นไลบรารี PowerShell ที่มี cmdlets จำนวนหนึ่งเพื่อโต้ตอบกับเซิร์ฟเวอร์ Let's Encrypt ผ่าน ACME API
- รับรอง เป็นเครื่องมือกราฟิกของ Windows เพื่อจัดการใบรับรอง SSL แบบโต้ตอบโดยใช้ ACME API
WACS Clint เพื่อติดตั้ง Let's Encrypt TLS Certificate ใน IIS บน Windows Server
วิธีที่ง่ายที่สุดในการรับใบรับรอง SSL จาก Let's Encrypt คือการใช้เครื่องมือคอนโซล Windows ACME Simple (WACS ) (ก่อนหน้านี้โปรเจ็กต์นี้ชื่อ LetsEncrypt-Win-Simple ). เป็นวิซาร์ดง่ายๆ ที่ให้คุณเลือกเว็บไซต์ใดเว็บไซต์หนึ่งที่ทำงานบน IIS ออกและผูกใบรับรอง SSL กับเว็บไซต์โดยอัตโนมัติ
สมมติว่าคุณมีเว็บไซต์ IIS ที่ทำงานบน Windows Server 2016 งานของคุณคือเปลี่ยนเว็บไซต์เป็นโหมด HTTPS โดยติดตั้งใบรับรอง SSL ฟรีจาก Let's Encrypt
ดาวน์โหลดไคลเอ็นต์ WACS รุ่นล่าสุดจาก GitHub https://github.com/PKISharp/win-acme/releases (ในกรณีของฉัน นี่คือเวอร์ชัน v2.0.10 – ชื่อไฟล์คือ win-acme.v2 .0.10.444.zip )
แตกไฟล์ zip ไปยังไดเร็กทอรีต่อไปนี้บนเซิร์ฟเวอร์ที่ติดตั้ง IIS:c:\inetpub\letsencrypt
เปิดพรอมต์คำสั่งที่ยกระดับ ไปที่ไดเร็กทอรี c:\inetpub\letsencrypt และเรียกใช้ wacs.exe . การดำเนินการนี้จะเปิดตัวสร้างใบรับรอง Let's Encrypt แบบโต้ตอบและผูกกับวิซาร์ดไซต์ IIS หากต้องการสร้างใบรับรองใหม่อย่างรวดเร็ว ให้เลือก N: – สร้างใบรับรองใหม่ (แบบง่ายสำหรับ IIS) .
ถัดไป คุณต้องเลือกประเภทใบรับรอง ในตัวอย่างของเรา ไม่จำเป็นต้องใช้ใบรับรองที่มีนามแฝง (SAN หลายตัว – ชื่อทางเลือกของหัวเรื่อง) ดังนั้นเพียงแค่เลือกรายการ 1 การเชื่อมโยงเดียวของไซต์ IIS . หากคุณต้องการใบรับรอง Wildcard ให้เลือกตัวเลือก 3 .
จากนั้นยูทิลิตี้จะแสดงรายการเว็บไซต์ที่ทำงานบน IIS และแจ้งให้คุณเลือกไซต์ที่จะออกใบรับรอง
ระบุที่อยู่อีเมลของคุณที่จะส่งการแจ้งเตือนเกี่ยวกับปัญหาการต่ออายุใบรับรอง ตลอดจนข้อความสำคัญและการละเมิดอื่นๆ (คุณสามารถระบุที่อยู่อีเมลหลายรายการโดยคั่นด้วยเครื่องหมายจุลภาค) ยังคงต้องยอมรับเงื่อนไขการใช้งานและ Windows ACME Simple จะเชื่อมต่อกับเซิร์ฟเวอร์ Let's Encrypt และพยายามสร้างใบรับรอง SSL ใหม่สำหรับเว็บไซต์ของคุณโดยอัตโนมัติ
ขั้นตอนการสร้างและติดตั้งใบรับรอง SSL Let's Encrypt สำหรับ IIS เป็นไปโดยอัตโนมัติอย่างสมบูรณ์
โดยค่าเริ่มต้น การตรวจสอบโดเมนจะดำเนินการใน การตรวจสอบความถูกต้อง http-01 (SelfHosting) โหมด. ในการดำเนินการนี้ คุณต้องมีระเบียน DNS ของโดเมนที่ชี้ไปที่เว็บเซิร์ฟเวอร์ของคุณ เมื่อเรียกใช้ WACS ในโหมดกำหนดเอง (ตัวเลือกทั้งหมด) คุณสามารถเลือกประเภทการตรวจสอบได้ – 4 [http-01] สร้างแอปพลิเคชันชั่วคราวใน IIS (แนะนำ) . ในกรณีนี้ แอปพลิเคชันขนาดเล็กจะถูกสร้างขึ้นบนเว็บเซิร์ฟเวอร์ IIS ซึ่งเซิร์ฟเวอร์ Let's Encrypt จะสามารถตรวจสอบความถูกต้องของโดเมนได้
หมายเหตุ . ระหว่างการตรวจสอบ TLS/HTTP เว็บไซต์ของคุณต้องสามารถเข้าถึงได้จากอินเทอร์เน็ตโดยใช้ชื่อ DNS แบบเต็มผ่านโปรโตคอล HTTP (80/TCP) และ HTTPS (443/TCP)เครื่องมือ WACS จะบันทึกคีย์ส่วนตัวของใบรับรอง (*.pem) ใบรับรองเอง และไฟล์อื่นๆ จำนวนหนึ่งใน C:\Users\%username%\AppData\Roaming\letsencrypt-win-simple . จากนั้นจะติดตั้งใบรับรอง Let's Encrypt SSL ที่สร้างขึ้นในพื้นหลังและผูกไว้กับไซต์ IIS ของคุณ หากมีการติดตั้งใบรับรอง SSL บนไซต์ (เช่น ใบรับรองที่ลงนามเอง) ใบรับรองนั้นจะถูกแทนที่ด้วยใบรับรองใหม่
ใน IIS Manager เปิด การผูกไซต์ การตั้งค่าสำหรับเว็บไซต์ของคุณและยืนยันว่าใช้ใบรับรองที่ออกโดย Let's Encrypt Authority X3 .
ใบรับรองนี้จะปรากฏว่าเชื่อถือได้บนคอมพิวเตอร์ของคุณ หากคุณได้อัปเดตผู้ออกใบรับรองหลักที่เชื่อถือได้ของ Windows
คุณสามารถค้นหาใบรับรอง Let's Encrypt IIS ได้ในที่เก็บใบรับรองคอมพิวเตอร์ภายใต้ เว็บโฮสติ้ง -> ใบรับรอง .
Windows ACME Simple สร้างงานใหม่ใน Windows Task Scheduler (win-acme-renew (acme-v02.api.letsencrypt.org)
) เพื่อต่ออายุใบรับรองโดยอัตโนมัติ งานเริ่มต้นทุกวัน และการต่ออายุใบรับรองจะดำเนินการหลังจาก 60 วัน งานนี้รันคำสั่ง:
C:\inetpub\letsencrypt\wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org"
คุณสามารถใช้คำสั่งเดียวกันเพื่ออัปเดตใบรับรอง Let's Encrypt ด้วยตนเอง
เปลี่ยนเส้นทางจาก HTTP เป็น HTTPS โดยใช้ IIS URL Rewrite
ในการเปลี่ยนเส้นทางการรับส่งข้อมูล HTTP ขาเข้าทั้งหมดไปยัง URL ของเว็บไซต์ HTTPS ให้ติดตั้ง Microsoft URL Rewrite Module (https://www.iis.net/downloads/microsoft/url-rewrite) และตรวจสอบให้แน่ใจว่าตัวเลือก Require SSL ถูกปิดใช้งานในการตั้งค่าไซต์ ตอนนี้กำหนดค่าการเปลี่ยนเส้นทางใน web.config ด้วยกฎการเขียนใหม่:
<system.webServer> <rewrite> <rules> <rule name=”HTTP to HTTPS Redirect” enabled=”true” stopProcessing=”true”> <match url=”(.*)” /> <conditions> <add input=”{HTTPS}” pattern=”off” ignoreCase=”true” /> </conditions> <action type=”Redirect” url=”https://{HTTP_HOST}/{R:1}” appendQueryString=”true” redirectType=”Permanent” /> </rule> </rules> </rewrite> </system.webServer>
คุณยังสามารถกำหนดค่าการเปลี่ยนเส้นทางการรับส่งข้อมูลโดยใช้ส่วนขยาย URL Rewrite ผ่าน IIS Manager GUI เลือก ไซต์ -> ชื่อไซต์ของคุณ -> เขียน URL ใหม่ .
สร้างกฎใหม่ เพิ่มกฎ -> กฎว่างเปล่า .
ระบุชื่อกฎและเปลี่ยนค่าพารามิเตอร์ต่อไปนี้:
- URL ที่ขอ :ตรงกับรูปแบบ
- การใช้ :นิพจน์ทั่วไป
- รูปแบบ :(.*)
ใน เงื่อนไข ให้เปลี่ยน การจัดกลุ่มแบบลอจิคัล :จับคู่ทั้งหมดแล้วคลิก เพิ่ม . ระบุการตั้งค่าต่อไปนี้:
- การป้อนเงื่อนไข: {HTTPS}
- ตรวจสอบว่าสตริงอินพุต: ตรงกับรูปแบบ
- รูปแบบ: ^OFF$
ตอนนี้ในบล็อกการดำเนินการ ให้เลือก:
- ประเภทการดำเนินการ: เปลี่ยนเส้นทาง
- เปลี่ยนเส้นทาง URL :https://{HTTP_HOST}/{R:1}
- ประเภทการเปลี่ยนเส้นทาง :ถาวร (301)
เปิดเบราว์เซอร์และลองเปิดไซต์ของคุณด้วยที่อยู่ HTTP คุณควรเปลี่ยนเส้นทางไปยัง HTTPS URL โดยอัตโนมัติ
การใช้ Let's Encrypt ใบรับรองกับเกตเวย์ RDS และการเข้าถึงเว็บ
ถ้าคุณใช้ RDS Gateway หรือ RDS Web Access เพื่อเชื่อมต่อผู้ใช้ภายนอกกับเครือข่ายขององค์กร คุณสามารถใช้ใบรับรอง SSL ที่เชื่อถือได้จาก Let's Encrypt แทนใบรับรองที่ลงนามเองได้ พิจารณาวิธีการติดตั้งใบรับรอง Let's Encrypt เพื่อรักษาความปลอดภัยบริการเดสก์ท็อประยะไกลบน Windows Server อย่างถูกต้อง
หากบทบาท RDSH ได้รับการติดตั้งบนเซิร์ฟเวอร์ Remote Desktop Gateway ด้วย คุณต้องป้องกันไม่ให้ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบเข้าถึงไดเร็กทอรีที่ไฟล์ WACS (ในตัวอย่างของฉัน c:\inetpub\letsencrypt) และ Let's เข้ารหัสใบรับรองและคีย์ ( C:\ProgramData\win-acme) ถูกเก็บไว้จากนั้น เรียกใช้ wacs.exe บนเซิร์ฟเวอร์ RD Gateway ตามที่อธิบายไว้ข้างต้น เลือกไซต์ IIS ที่ต้องการ (โดยปกติคือ เว็บไซต์เริ่มต้น . Let's Encrypt จะออกใบรับรองใหม่และผูกกับเว็บไซต์ IIS และงานต่ออายุใบรับรองอัตโนมัติจะปรากฏใน Task Scheduler
คุณสามารถส่งออกใบรับรองนี้ด้วยตนเองและผูกกับบริการ RDS ที่จำเป็นผ่านการผูก SSL แต่คุณจะต้องทำตามขั้นตอนเหล่านี้ด้วยตนเองทุกๆ 60 วันเมื่อมีการต่ออายุใบรับรอง Let's Encrypt
เราสามารถใช้สคริปต์ PowerShell เพื่อผูกใบรับรอง SSL กับเกตเวย์ RDS โดยอัตโนมัติหลังจากอัปเดตใบรับรอง Let's Encrypt
มีสคริปต์ PowerShell ที่พร้อมใช้งานใน win-acme โครงการ – ImportRDGateway.ps1 (https://github.com/PKISharp/win-acme/tree/master/dist/Scripts ) ซึ่งช่วยให้คุณติดตั้งใบรับรอง SSL ที่เลือกไว้สำหรับบริการเดสก์ท็อประยะไกล ข้อเสียเปรียบหลักของสคริปต์นี้คือ คุณต้องระบุรหัสประจำตัวของใบรับรองใหม่ด้วยตนเอง:
ImportRDGateway.ps1 <certThumbprint>
หากต้องการรับรหัสประจำตัวของใบรับรองโดยอัตโนมัติจากไซต์ IIS ที่ระบุ ให้ใช้สคริปต์ที่แก้ไข ImportRDGateway_Cert_From_IIS.ps1 (อิงจาก ImportRDGateway.ps1)
คุณสามารถเรียกใช้สคริปต์นี้ด้วยตนเอง:
powershell -File ImportRDGateway_Cert_From_IIS.ps1
หาก RDS Gateway ของคุณทำงานบน "เว็บไซต์เริ่มต้น" ของ IIS ที่มีดัชนี 0 คุณสามารถใช้สคริปต์ได้โดยไม่มีการเปลี่ยนแปลง
ในการรับ ID ไซต์บน IIS ให้เปิดคอนโซล PowerShell และเรียกใช้:
Import-Module WebAdministration
Get-ChildItem IIS:Sites|ft -AutoSize
คอลัมน์ ID แสดงดัชนีของไซต์ของคุณ ลบหนึ่งรายการออกจากคอลัมน์ ควรระบุดัชนีผลลัพธ์แทน 0 ในบรรทัดที่ 27 ของสคริปต์ PowerShell:
$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings)[0].Thumbprint
ตอนนี้เปิด win-acme-renew งานตัวกำหนดเวลาและในการดำเนินการ แท็บ เพิ่มงานใหม่ที่เรียกใช้สคริปต์ ImportRDGateway_Cert_From_IIS.ps1 หลังจากอัปเดตใบรับรอง SSL
เพื่อไม่ให้เปลี่ยนนโยบายการดำเนินการของ PowerShell คุณสามารถเรียกใช้สคริปต์ด้วยคำสั่ง:
PowerShell.exe -ExecutionPolicy Bypass -File c:\inetpub\letsencrypt\ImportRDGateway_Cert_From_IIS.ps1
ตอนนี้สคริปต์สำหรับผูกใบรับรอง SSL กับ RDS จะถูกดำเนินการทันทีหลังจากต่ออายุใบรับรอง Let's Encrypt ในกรณีนี้ บริการ RD Gateway จะเริ่มต้นใหม่โดยอัตโนมัติด้วยคำสั่ง:
Restart-Service TSGateway
[เตือน] เมื่อบริการ TSGateway เริ่มต้นใหม่ เซสชันผู้ใช้ปัจจุบันทั้งหมดจะถูกตัดการเชื่อมต่อ ดังนั้นจึงแนะนำให้เปลี่ยนความถี่ในการเริ่มงานการต่ออายุใบรับรองทุกๆ 60 วัน[/alert]