ฉันต้องไขปริศนาผ่านใบรับรองที่ลงนามด้วยตนเองบน Windows โดยการรวมบิตและชิ้นส่วนจากคำตอบที่ได้รับและแหล่งข้อมูลเพิ่มเติม นี่คือคำแนะนำของฉันเอง (และหวังว่าจะเสร็จสมบูรณ์) หวังว่ามันจะช่วยคุณในการเรียนรู้ที่เจ็บปวดของฉันเอง นอกจากนี้ยังมีข่าวสารเกี่ยวกับหัวข้อที่เกี่ยวข้องซึ่งจะปรากฏขึ้นไม่ช้าก็เร็วเมื่อคุณสร้างใบรับรองของคุณเอง
สร้างใบรับรองที่ลงนามด้วยตนเองใน Windows 10 และต่ำกว่า
อย่าใช้ makecert.exe Microsoft เลิกใช้แล้ว
วิธีที่ทันสมัยใช้คำสั่ง Powershell
Windows 10:
เปิด Powershell ด้วยสิทธิ์ของผู้ดูแลระบบ:
New-SelfSignedCertificate -DnsName "*.dev.local", "dev.local", "localhost" -CertStoreLocation cert:\LocalMachine\My -FriendlyName "Dev Cert *.dev.local, dev.local, localhost" -NotAfter (Get-Date).AddYears(15)
Windows 8, Windows Server 2012 R2:
ใน Powershell บนระบบเหล่านี้ไม่มีพารามิเตอร์ -FriendlyName และ -NotAfter เพียงแค่ลบออกจากบรรทัดคำสั่งด้านบน
เปิด Powershell ด้วยสิทธิ์ของผู้ดูแลระบบ:
New-SelfSignedCertificate -DnsName "*.dev.local", "dev.local", "localhost" -CertStoreLocation cert:\LocalMachine\My
อีกทางเลือกหนึ่งคือใช้วิธีสำหรับ Windows รุ่นเก่าด้านล่างซึ่งช่วยให้คุณสามารถใช้คุณสมบัติทั้งหมดของ Win 10 สำหรับการสร้างใบรับรอง ...
Windows รุ่นเก่ากว่า:
คำแนะนำของฉันสำหรับ Windows รุ่นเก่าคือการสร้างใบรับรองบนเครื่อง Win 10 ส่งออกเป็นไฟล์. PFX โดยใช้อินสแตนซ์ mmc (ดู "เชื่อถือใบรับรอง" ด้านล่าง) และนำเข้าในที่เก็บใบรับรองบนเครื่องเป้าหมายด้วย Windows OS เก่า ในการนำเข้าใบรับรองอย่าคลิกขวา แม้ว่าจะมีรายการ "นำเข้าใบรับรอง" ในเมนูบริบท แต่การทดลองใช้ทั้งหมดของฉันล้มเหลวในการใช้งานบน Win Server 2008 เปิดอินสแตนซ์ mmc อื่นบนเครื่องเป้าหมายแทนไปที่ "ใบรับรอง (คอมพิวเตอร์ภายใน) / ส่วนบุคคล / ใบรับรอง" คลิกขวาในบานหน้าต่างตรงกลางแล้วเลือกงานทั้งหมด→นำเข้า
ใบรับรองผลลัพธ์
ทั้งสองคำสั่งข้างต้นสร้างใบรับรองสำหรับโดเมนlocalhost
และ*.dev.local
.
นอกจากนี้เวอร์ชัน Win10 ยังมีอายุการใช้งาน 15 ปีและชื่อที่แสดงที่อ่านได้ของ "Dev Cert * .dev.local, dev.local, localhost"
อัปเดต:หากคุณระบุชื่อโฮสต์หลายรายการในพารามิเตอร์-DnsName
(ดังที่แสดงด้านบน) รายการแรกเหล่านี้จะกลายเป็น Subject ของโดเมน (ชื่อสามัญ AKA) รายการชื่อโฮสต์ทั้งหมดจะถูกเก็บไว้ในฟิลด์ Subject Alternative Name (SAN) ของใบรับรอง (ขอบคุณ @BenSewards ที่ชี้ให้เห็น)
หลังจากสร้างใบรับรองจะพร้อมใช้งานทันทีในการเชื่อมโยง HTTPS ของ IIS (คำแนะนำด้านล่าง)
เชื่อถือใบรับรอง
ใบรับรองใหม่ไม่ได้เป็นส่วนหนึ่งของห่วงโซ่แห่งความไว้วางใจใด ๆ ดังนั้นจึงไม่ถือว่าเบราว์เซอร์ใดน่าเชื่อถือ หากต้องการเปลี่ยนแปลงเราจะคัดลอกใบรับรองไปยังที่เก็บใบรับรองสำหรับ Trusted Root CA บนเครื่องของคุณ:
เปิด mmc.exe, File →เพิ่ม / ลบ Snap-In →เลือก "Certificates" ในคอลัมน์ด้านซ้าย→เพิ่ม→เลือก "Computer Account" → Next → "Local Computer ... " → Finish → OK
ในคอลัมน์ทางซ้ายให้เลือก "ใบรับรอง (คอมพิวเตอร์ในพื้นที่) / ส่วนบุคคล / ใบรับรอง"
ค้นหาใบรับรองที่สร้างขึ้นใหม่ (ใน Win 10 คอลัมน์ "ชื่อที่จำง่าย" อาจช่วยได้)
เลือกใบรับรองนี้และกด Ctrl-C เพื่อคัดลอกไปยังคลิปบอร์ด
ในคอลัมน์ทางซ้ายให้เลือก "Certificates (Local Computer) / Trusted Root CAs / Certificates"
กด Ctrl-V เพื่อวางใบรับรองของคุณลงในร้านนี้
ใบรับรองควรปรากฏในรายการ Trusted Root Authorities และตอนนี้ถือว่าน่าเชื่อถือ
ใช้ใน IIS
ตอนนี้คุณสามารถไปที่ตัวจัดการ IIS เลือกการผูกของเว็บไซต์ในพื้นที่→เพิ่ม→ https →ป้อนชื่อโฮสต์ของแบบฟอร์ม myname.dev.local
(ใบรับรองของคุณใช้ได้เฉพาะสำหรับ*.dev.local
) และเลือกใบรับรองใหม่→ตกลง
เพิ่มในโฮสต์
เพิ่มชื่อโฮสต์ของคุณใน C: \ Windows \ System32 \ drivers \ etc \ hosts:
127.0.0.1 myname.dev.local
มีความสุข
ตอนนี้ Chrome และ IE https://myname.dev.local
ควรปฏิบัติใบรับรองเป็นที่น่าเชื่อถือและโหลดเว็บไซต์ของคุณเมื่อคุณเปิด
Firefox ดูแลที่เก็บใบรับรองของตัวเอง ในการเพิ่มใบรับรองของคุณที่นี่คุณต้องเปิดเว็บไซต์ของคุณใน FF และเพิ่มในข้อยกเว้นเมื่อ FF เตือนคุณเกี่ยวกับใบรับรอง
สำหรับเบราว์เซอร์ Edge อาจจำเป็นต้องดำเนินการเพิ่มเติม (ดูเพิ่มเติมด้านล่าง)
ทดสอบใบรับรอง
ในการทดสอบใบรับรองของคุณ Firefox เป็นตัวเลือกที่ดีที่สุดของคุณ (เชื่อฉันเถอะฉันเป็นแฟนบอย Chrome แต่ FF ดีกว่าในกรณีนี้)
นี่คือเหตุผล:
- Firefox ใช้แคช SSL ของตัวเองซึ่งจะถูกกำจัดเมื่อกะ - โหลดซ้ำ ดังนั้นการเปลี่ยนแปลงใด ๆ ในใบรับรองของเว็บไซต์ในพื้นที่ของคุณจะแสดงในคำเตือนของ FF ในทันทีในขณะที่เบราว์เซอร์อื่น ๆ อาจต้องรีสตาร์ทหรือล้างแคช SSL ของ windows ด้วยตนเอง
- นอกจากนี้ FF ยังให้คำแนะนำที่มีค่าแก่คุณในการตรวจสอบความถูกต้องของใบรับรองของคุณ: คลิกที่ขั้นสูงเมื่อ FF แสดงคำเตือนใบรับรอง FF จะแสดงบล็อกข้อความสั้น ๆ พร้อมคำเตือนที่เป็นไปได้อย่างน้อยหนึ่งคำในบรรทัดกลางของบล็อกข้อความ:
ใบรับรองไม่น่าเชื่อถือเนื่องจากมีการลงนามด้วยตนเอง
คำเตือนนี้ถูกต้อง! ตามที่ระบุไว้ข้างต้น Firefox ไม่ได้ใช้ที่เก็บใบรับรองของ Windows และจะเชื่อถือใบรับรองนี้เท่านั้นหากคุณเพิ่มข้อยกเว้น ปุ่มที่ใช้ทำจะอยู่ด้านล่างคำเตือน
ใบรับรองไม่ถูกต้องสำหรับชื่อ ...
คำเตือนนี้แสดงให้เห็นว่าคุณทำอะไรผิดพลาด โดเมน (สัญลักษณ์แทน) ของใบรับรองของคุณไม่ตรงกับโดเมนของเว็บไซต์ของคุณ ปัญหาต้องได้รับการแก้ไขโดยการเปลี่ยนโดเมน (ย่อย) ของเว็บไซต์ของคุณหรือโดยการออกใบรับรองใหม่ที่ตรงกัน ในความเป็นจริงคุณสามารถเพิ่มข้อยกเว้นใน FF ได้แม้ว่าใบรับรองจะไม่ตรงกัน แต่คุณจะไม่ได้รับสัญลักษณ์รูปแม่กุญแจสีเขียวใน Chrome ด้วยชุดค่าผสมดังกล่าว
Firefox สามารถแสดงคำเตือนใบรับรองที่ดีและเข้าใจได้อื่น ๆ ในสถานที่แห่งนี้เช่นใบรับรองที่หมดอายุใบรับรองที่มีอัลกอริทึมการเซ็นชื่อที่ล้าสมัยเป็นต้นฉันไม่พบเบราว์เซอร์อื่นที่ให้ข้อเสนอแนะในระดับนั้นเพื่อแก้ปัญหาใด ๆ
รูปแบบโดเมน (ย่อย) ใดที่ฉันควรเลือกพัฒนา
ในคำสั่งดังกล่าวใหม่ SelfSignedCertificate *.dev.local
ที่เราใช้โดเมนสัญลักษณ์แทน
คุณอาจคิดว่า: ทำไมไม่ใช้*.local
?
เหตุผลง่ายๆ: เป็นโดเมนไวด์การ์ดที่ผิดกฎหมาย
ใบรับรองตัวแทนต้องมีชื่อโดเมนระดับที่สองเป็นอย่างน้อย
ดังนั้นโดเมนของแบบฟอร์ม*.local
จึงดีในการพัฒนาเว็บไซต์ HTTP แต่ไม่มากสำหรับ HTTPS เนื่องจากคุณจะต้องออกใบรับรองการจับคู่ใหม่สำหรับแต่ละโครงการใหม่ที่คุณเริ่มต้น
หมายเหตุด้านสำคัญ:
- โดเมนโฮสต์ที่ถูกต้องต้องมีเฉพาะตัวอักษร z, หลัก, ยัติภังค์และจุด ไม่อนุญาตให้ขีดล่าง! เบราว์เซอร์บางจริงๆจู้จี้จุกจิกเกี่ยวกับรายละเอียดนี้และสามารถทำให้คุณมีเวลาที่ยากลำบากเมื่อพวกเขาหัวชนฝาปฏิเสธที่จะตรงกับโดเมนของคุณกับรูปแบบสัญลักษณ์ตัวแทนของคุณ
motör_head.dev.local
*.dev.local
พวกเขาจะปฏิบัติตามเมื่อคุณเปลี่ยนไปmotoer-head.dev.local
ใช้
- สัญลักษณ์แทนในใบรับรองจะจับคู่เพียงหนึ่งป้าย (= ส่วนระหว่างจุดสองจุด) ในโดเมนเท่านั้นไม่เกิน
*.dev.local
ตรงกัน myname.dev.local
แต่ไม่ใช่other.myname.dev.local
!
- ใช้สัญลักษณ์แทนหลายระดับ (
*.*.dev.local
) ในใบรับรองไม่ได้ ดังนั้นสามารถถูกปกคลุมด้วยสัญลักษณ์ตัวแทนของรูปแบบother.myname.dev.local
*.myname.dev.local
ด้วยเหตุนี้จึงไม่ควรใช้ส่วนโดเมนระดับที่สี่ ใส่รูปแบบทั้งหมดของคุณไว้ในส่วนระดับที่สาม ด้วยวิธีนี้คุณจะได้รับใบรับรองโสดสำหรับไซต์ dev ทั้งหมดของคุณ
ปัญหาเกี่ยวกับ Edge
นี้ไม่ได้จริงๆเกี่ยวกับใบรับรองลงนามด้วยตนเอง แต่ยังคงเกี่ยวข้องกับกระบวนการทั้งหมด:
หลังจากทำตามขั้นตอนข้างต้นขอบอาจไม่แสดงใด ๆmyname.dev.local
เนื้อหาเมื่อคุณเปิดขึ้น
เหตุผลนี้เป็นคุณลักษณะเฉพาะของการจัดการเครือข่ายของ Windows 10 สำหรับ Modern Apps ที่เรียกว่า "Network Isolation"
ในการแก้ไขปัญหาดังกล่าวให้เปิดพรอมต์คำสั่งด้วยสิทธิ์ของผู้ดูแลระบบและป้อนคำสั่งต่อไปนี้หนึ่งครั้ง:
CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe
สามารถดูข้อมูลเพิ่มเติมเกี่ยวกับ Edge และการแยกเครือข่ายได้ที่นี่:
https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/
makecert.exe
ให้อยู่ในเส้นทางของฉัน สำหรับใบรับรองฉันคิดว่าฉันจะปลอดภัยและใช้ได้มากกว่า-a SHA512 -len 8192
- ต้องใช้เวลาตลอดไปในการสร้าง และตามที่ฉันสงสัยว่ามันอาจไม่มีผลกระทบต่อระดับของการเข้ารหัส IIS ที่ใช้ โดยค่าเริ่มต้น IIS ใช้ 128 บิตคุณต้องทำนโยบายกลุ่มเพื่อเปลี่ยนแปลงสิ่งนี้ หมายเหตุเพิ่มเติมสำหรับผู้อ่านคนอื่น ๆ : อย่าเปลี่ยนตัวเลขวิเศษหลังจาก-eku
นั้นพวกเขาจำเป็นต้องใช้