จะสร้างใบรับรองที่ลงนามด้วยตนเองสำหรับชื่อโดเมนสำหรับการพัฒนาได้อย่างไร?


123

ฉันมีsubdomain.example.comที่ฉันใช้เพื่อการพัฒนา โซลูชันเว็บแอปพลิเคชันของฉันมีเว็บ API และอื่น ๆ ที่ฉันต้องเรียกใช้จากระบบภายนอกดังนั้นฉันจึงไม่ได้ใช้ localhost

ตอนนี้ฉันต้องทดสอบ SSL และต้องการใบรับรองสำหรับsubdomain.example.comชื่อโดเมนการพัฒนาของฉัน

ฉันได้ลองสร้างใบรับรองที่ลงนามด้วยตนเองตามที่ระบุไว้ในhttp://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspxแต่ใบรับรองนี้ใช้ได้กับ localhost เท่านั้น ใบรับรองนี้สามารถใช้เพื่อวัตถุประสงค์ของฉันได้หรือฉันจะต้องสร้างการลงนามด้วยตนเองสำหรับโดเมนย่อยการพัฒนาของฉัน หากฉันต้องสร้างการรับรองที่ลงนามด้วยตนเองสำหรับโดเมนย่อยการพัฒนาของฉันยูทิลิตี้หรือบริการออนไลน์ (ฟรี) ใดที่ฉันสามารถใช้เพื่อสิ่งนี้ได้

คำตอบ:


133

ด้วยคุณสมบัติใบรับรองที่ลงนามด้วยตนเองของ IIS คุณไม่สามารถตั้งชื่อสามัญ (CN) สำหรับใบรับรองได้ดังนั้นจึงไม่สามารถสร้างใบรับรองที่เชื่อมโยงกับโดเมนย่อยที่คุณเลือกได้

วิธีหนึ่งในการแก้ปัญหาคือการใช้ makecert.exe ซึ่งมาพร้อมกับ. Net 2.0 SDK บนเซิร์ฟเวอร์ของฉันอยู่ที่:

C:\Program Files\Microsoft.Net\SDK\v2.0 64bit\Bin\makecert.exe

คุณสามารถสร้างผู้มีอำนาจในการลงนามและจัดเก็บไว้ในที่เก็บใบรับรอง LocalMachine ดังต่อไปนี้ (ต้องเรียกใช้คำสั่งเหล่านี้จากบัญชีผู้ดูแลระบบหรือภายในพรอมต์คำสั่งที่ยกระดับ):

makecert.exe -n "CN=My Company Development Root CA,O=My Company,
 OU=Development,L=Wallkill,S=NY,C=US" -pe -ss Root -sr LocalMachine
 -sky exchange -m 120 -a sha1 -len 2048 -r

จากนั้นคุณสามารถสร้างใบรับรองที่ผูกไว้กับโดเมนย่อยของคุณและลงนามโดยหน่วยงานใหม่ของคุณ:

(โปรดทราบว่าค่าของพารามิเตอร์ -in ต้องตรงกับค่า CN ที่ใช้ในการสร้างสิทธิ์ของคุณด้านบน)

makecert.exe -n "CN=subdomain.example.com" -pe -ss My -sr LocalMachine
 -sky exchange -m 120 -in "My Company Development Root CA" -is Root
 -ir LocalMachine -a sha1 -eku 1.3.6.1.5.5.7.3.1

จากนั้นใบรับรองของคุณควรปรากฏในตัวจัดการ IIS เพื่อผูกพันกับไซต์ของคุณตามที่อธิบายไว้ในโพสต์ของ Tom Hall

ความรุ่งโรจน์ทั้งหมดสำหรับวิธีแก้ปัญหานี้สำหรับ Mike O'Brien สำหรับบล็อกโพสต์ที่ยอดเยี่ยมของเขาที่http://www.mikeobrien.net/blog/creating-self-signed-wildcard


8
ฉันสามารถทำงานนี้ได้ ฉันต้องใช้พรอมต์คำสั่ง Visual Studio 2010 เพื่อmakecert.exeให้อยู่ในเส้นทางของฉัน สำหรับใบรับรองฉันคิดว่าฉันจะปลอดภัยและใช้ได้มากกว่า-a SHA512 -len 8192- ต้องใช้เวลาตลอดไปในการสร้าง และตามที่ฉันสงสัยว่ามันอาจไม่มีผลกระทบต่อระดับของการเข้ารหัส IIS ที่ใช้ โดยค่าเริ่มต้น IIS ใช้ 128 บิตคุณต้องทำนโยบายกลุ่มเพื่อเปลี่ยนแปลงสิ่งนี้ หมายเหตุเพิ่มเติมสำหรับผู้อ่านคนอื่น ๆ : อย่าเปลี่ยนตัวเลขวิเศษหลังจาก-ekuนั้นพวกเขาจำเป็นต้องใช้
BrainSlugs83

3
เรียกใช้คำสั่งข้างต้นทั้งหมดจากพรอมต์คำสั่งที่มีสิทธิ์ระดับผู้ดูแลมิฉะนั้นคุณจะได้รับข้อความ "ข้อผิดพลาด: บันทึกใบรับรองที่เข้ารหัสเพื่อจัดเก็บล้มเหลว => 0x5"
Giles Roberts

1
ฉันจะยังชอบที่จะแบ่งปันการเชื่อมโยงที่ดีในการสร้างใบรับรอง self เซ็นสัญญากับ makecert.exe สำหรับการพัฒนา ลิงก์อธิบายวิธีการทีละขั้นตอนในการสร้างใบรับรองรูทใบรับรองเซิร์ฟเวอร์และใบรับรองไคลเอ็นต์ นอกจากนี้ยังมีโพสต์สำหรับอธิบายวิธีการใช้งาน
Vikram Singh Saini

3
เบราว์เซอร์เช่น Chrome sha1ได้เริ่มต้นที่จะเลิกใช้ แทนที่-a sha512และพิจารณาเพิ่ม-len 2048ในการmakecertร้องขอครั้งที่สองและทุกอย่างควรจะดี
O. Jones

2
โปรดทราบว่าสิ่งนี้ดูเหมือนจะไม่ทำงานอีกต่อไป (อย่างน้อยตามที่แสดงด้านบน) ใน Windows 10 ฉันต้องใช้ PowerShell cmdlet แทนซึ่งใช้งานได้โดยไม่มีปัญหาใด ๆ
DVK

120

ใช้ PowerShell

จาก Windows 8.1 และ Windows Server 2012 R2 (Windows PowerShell 4.0) ขึ้นไปคุณสามารถสร้างใบรับรองที่ลงนามด้วยตนเองโดยใช้New-SelfSignedCertificatecmdlet ใหม่:

ตัวอย่าง:

New-SelfSignedCertificate -DnsName www.mydomain.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName subdomain.mydomain.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName *.mydomain.com -CertStoreLocation cert:\LocalMachine\My

การใช้ตัวจัดการ IIS

  1. เปิดตัวจัดการ IIS
  2. ที่ระดับเซิร์ฟเวอร์ภายใต้ IIS ให้เลือกใบรับรองเซิร์ฟเวอร์
  3. ทางด้านขวามือภายใต้การดำเนินการให้เลือกสร้างใบรับรองที่ลงชื่อด้วยตนเอง
  4. โดยระบุว่า "ระบุชื่อที่จำง่ายสำหรับใบรับรอง" ในชื่อที่เหมาะสมสำหรับการอ้างอิง
    1. ตัวอย่าง: www.domain.comหรือsubdomain.domain.com
  5. จากนั้นเลือกเว็บไซต์ของคุณจากรายการทางด้านซ้ายมือ
  6. ทางด้านขวามือภายใต้การดำเนินการให้เลือกการเชื่อมโยง
  7. เพิ่มการผูก HTTPS ใหม่และเลือกใบรับรองที่คุณเพิ่งสร้างขึ้น (หากใบรับรองของคุณเป็นใบรับรองตัวแทนคุณจะต้องระบุชื่อโฮสต์)
  8. คลิกตกลงและทดสอบ

7
+1 สำหรับโซลูชัน PowerShell ง่ายและรวดเร็วและหลังจากทำเช่นนั้นใบรับรองใหม่จะปรากฏในตัวจัดการ IIS ของฉัน> การเชื่อมต่อ> ไซต์> [แอปพลิเคชันของฉัน]> แก้ไขการเชื่อมโยง> แก้ไข> แบบเลื่อนลงใบรับรอง SSL
Jon Schneider

3
หลังจากทำตามคำแนะนำข้างต้นแล้วดูใบรับรองคำแนะนำไม่ได้เติมข้อมูลในช่อง CN ซึ่งยังคงต้องใช้ชื่อ localhost
daveD

7
เผง นี่มันผิด! "ชื่อที่เป็นมิตร" ไม่มีส่วนเกี่ยวข้องกับ CN ฉันไม่รู้ว่าทำไมคำตอบนี้จึงมีการโหวตเพิ่มขึ้นมากมาย?
c00000fd

25
สิ่งนี้ได้รับคะแนนโหวตเนื่องจากวิธีการ Powershell ใช้งานได้จริง (ดูคำตอบ @DivineOps) นี่คือคำสั่งที่ฉันใช้: New-SelfSignedCertificate -FriendlyName *.mydomain.local -DnsName *.mydomain.local, localhost -CertStoreLocation Cert:\LocalMachine\Myสิ่งนี้สร้างใบรับรองในที่เก็บส่วนบุคคล จากนั้นฉันจะส่งออกใบรับรองไปยังไฟล์ก่อนแล้วจึงนำเข้าอีกครั้งไปยัง IIS ทั้งสองผ่านทางตัวจัดการ IIS (เพื่อใช้สำหรับการเชื่อมโยง https ของฉัน) จากนั้นไปยัง Trusted Root CAs ผ่าน MMC (เพื่อหลีกเลี่ยงคำเตือนของเบราว์เซอร์)
Anton

3
-NotAfterตัวเลือกยังเป็นประโยชน์ในการระบุวันหมดอายุ (โดยไม่ได้เริ่มต้นเป็นเพียง 1 ปี) ตัวอย่างที่ฉันใช้New-SelfSignedCertificate -DnsName *.mydomain.com -FriendlyName *.mydomain.com -NotAfter (Get-Date).AddYears(15) -CertStoreLocation cert:\LocalMachine\My
Ben Amada

52

ในการสร้างใบรับรองใหม่สำหรับโดเมนเฉพาะของคุณ:

เปิด Powershell ISE ในฐานะผู้ดูแลระบบเรียกใช้คำสั่ง:

New-SelfSignedCertificate -DnsName *.mydomain.com, localhost -CertStoreLocation cert:\LocalMachine\My

ในการเชื่อถือใบรับรองใหม่:

  • เปิด mmc.exe
  • ไปที่ Console Root -> Certificates (Local Computer) -> Personal
  • เลือกใบรับรองที่คุณสร้างคลิกขวา -> งานทั้งหมด -> ส่งออกและปฏิบัติตามวิซาร์ดการส่งออกเพื่อสร้างไฟล์. pfx
  • ไปที่ Console Root -> Certificates -> Trusted Root Certification Authorities และนำเข้าไฟล์. pfx ใหม่

ในการผูกใบรับรองกับไซต์ของคุณ:

  • เปิดตัวจัดการ IIS
  • เลือกไซต์ของคุณและเลือกแก้ไขไซต์ -> การเชื่อมโยงในบานหน้าต่างด้านขวา
  • เพิ่มการเชื่อม https ใหม่ด้วยชื่อโฮสต์ที่ถูกต้องและใบรับรองใหม่

2
สิ่งนี้ใช้ได้เฉพาะใน Windows 8.1 และ Windows Server 2012 R2 (Windows PowerShell 4.0) หรือใหม่กว่าแม้ว่าคุณจะสามารถสร้างใบรับรองในระบบปฏิบัติการใดระบบหนึ่งเหล่านี้และนำเข้าสู่คอมพิวเตอร์เครื่องอื่นในภายหลัง (ฉันเพิ่งทำไปเพื่อใช้ใบรับรองนี้กับ SSRS ติดตั้งใน Windows Server 2008 R2)
mprost

2
แทนที่จะส่งออกและนำเข้าเพื่อคัดลอกไปยังผู้ออกใบรับรองที่เชื่อถือได้คุณสามารถคัดลอกและวางได้
jk7

คัดลอก / วางใช้งานได้บนเซิร์ฟเวอร์เดียวกันเท่านั้น คุณยังสามารถ ctrl ลากใบรับรองจากโฟลเดอร์ Personal ไปยัง Trusted Root Certification Authorities บนเซิร์ฟเวอร์เดียวกันได้ หากคุณต้องการให้โฮสต์อื่นสามารถเข้าถึงไซต์ได้โดยไม่มีคำเตือนคุณจะต้องส่งออกและให้พวกเขานำเข้าใบรับรองไปยัง TRCA ในพื้นที่ของตน (คุณไม่จำเป็นต้องใส่คีย์ส่วนตัว)
jessewolfe

42

ฉันต้องไขปริศนาผ่านใบรับรองที่ลงนามด้วยตนเองบน 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/


2
ฉันต้องการทราบว่าชื่อ DNS แรกจะถูกบันทึกเป็นชื่อเรื่องด้วยซึ่งคุณอาจไม่ต้องการเป็นสัญลักษณ์แทน
Ben Sewards

@ BenSewards: ขอบคุณที่ชี้ให้เห็น Ben ฉันได้อัปเดตคำตอบเพื่อรวมรายละเอียดฟิลด์เรื่อง / SAN คุณพบปัญหาใด ๆ ในการมีชื่อโฮสต์ไวด์การ์ดในฟิลด์ Subject แทนฟิลด์ SAN หรือไม่
Jpsy

@Jpsy - สิ่งนี้ใช้ได้กับฉันในเซิร์ฟเวอร์ที่สร้างใบรับรองที่ลงชื่อด้วยตนเอง แต่ไม่ได้อยู่ใน Firefox หรือ Chrome บนเครื่อง (ไคลเอนต์) ของฉัน ฉันได้รับappname.dev has a security policy called HTTP Strict Transport Security (HSTS), which means that Firefox can only connect to it securely. You can’t add an exception to visit this site.ซึ่งตามที่ระบุไว้ไม่อนุญาตให้คุณเพิ่มข้อยกเว้นของไคลเอ็นต์ซึ่งตรงกันข้ามกับคำแนะนำของคุณ นี่เป็นการกำหนดค่าที่ไม่ถูกต้องภายใน IIS เองเกี่ยวกับการตั้งค่า SSL, ต้องการ SSL และตัวเลือกใบรับรองไคลเอ็นต์หรือไม่
Code Maverick

@CodeMaverick: อาจมีตัวบล็อกโฆษณาหรือซอฟต์แวร์ป้องกันไวรัสที่เกี่ยวข้องกับปัญหาของคุณโดยบังเอิญหรือไม่? อีกทางเลือกหนึ่งอาจเป็นเพราะใบรับรองไม่ตรงกับชื่อโดเมนที่คุณใช้ โปรดจำไว้ว่า * ใน CN หรือ SAN ของใบรับรองอาจแสดงเพียงส่วนเดียวในชื่อโดเมน ( ไม่มีจุดใด ๆ ) ดังนั้น CN *.mydomain.comสามารถเป็นใบรับรองที่ถูกต้องสำหรับแต่ไม่ได้สำหรับme.mydomain.com me.at.mydomain.com
Jpsy

14

ฉันพบปัญหาเดียวกันนี้เมื่อฉันต้องการเปิดใช้ SSL กับโปรเจ็กต์ที่โฮสต์บน IIS 8 ในที่สุดเครื่องมือที่ฉันใช้คือOpenSSLหลังจากหลายวันต่อสู้กับคำสั่งmakecertใบรับรองถูกสร้างขึ้นใน Debian แต่ฉันสามารถนำเข้าได้อย่างราบรื่น IIS 7 และ 8

ดาวน์โหลดOpenSSLเข้ากันได้กับระบบปฏิบัติการของคุณและนี้แฟ้มการกำหนดค่า ตั้งค่าไฟล์การกำหนดค่าเป็นการกำหนดค่าเริ่มต้นของ OpenSSL

ขั้นแรกเราจะสร้างคีย์ส่วนตัวและใบรับรองของผู้ออกใบรับรอง (CA) ใบรับรองนี้ใช้เพื่อลงนามในคำขอใบรับรอง (CSR)

คุณต้องกรอกฟิลด์ทั้งหมดที่จำเป็นในกระบวนการนี้

  1. openssl req -new -x509 -days 3650 -extensions v3_ca -keyout root-cakey.pem -out root-cacert.pem -newkey rsa:4096

คุณสามารถสร้างไฟล์การกำหนดค่าด้วยการตั้งค่าเริ่มต้นดังนี้ตอนนี้เราจะสร้างคำขอใบรับรองซึ่งเป็นไฟล์ที่ส่งไปยังผู้ออกใบรับรอง

ชื่อสามัญจะต้องตั้งค่าโดเมนของเว็บไซต์ของคุณตัวอย่างเช่น: public.organization.com

  1. openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:4096

ตอนนี้คำขอใบรับรองได้รับการลงนามด้วยใบรับรอง CA ที่สร้างขึ้น

  1. openssl x509 -req -days 365 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial -in server-csr.pem -out server-cert.pem

ใบรับรองที่สร้างขึ้นต้องถูกส่งออกไปยังไฟล์. pfx ที่สามารถนำเข้าสู่ IIS

  1. openssl pkcs12 -export -out server-cert.pfx -inkey server-key.pem -in server-cert.pem -certfile root-cacert.pem -name "Self Signed Server Certificate"

ในขั้นตอนนี้เราจะนำเข้าใบรับรอง CA

  1. ในเซิร์ฟเวอร์ของคุณต้องนำเข้าใบรับรอง CA ไปยัง Trusted Root Certification Authorities สำหรับ IIS สามารถเชื่อถือใบรับรองที่จะนำเข้า โปรดจำไว้ว่าใบรับรองที่จะนำเข้าสู่ IIS ได้รับการลงนามด้วยใบรับรองของ CA

    • เปิด Command Prompt และชนิดMMC
    • คลิกที่ไฟล์
    • เลือกAdd / Remove Snap ใน ...
    • ดับเบิลคลิกที่ใบรับรอง
    • เลือกบัญชีคอมพิวเตอร์และถัดไป ->
    • เลือกภายในเครื่องคอมพิวเตอร์และเสร็จสิ้น
    • ตกลง
    • ไปที่ใบรับรอง -> ผู้ออกใบรับรองที่เชื่อถือได้ -> ใบรับรองคลิกที่ใบรับรองและเลือกงานทั้งหมด -> นำเข้า ...

ใส่คำอธิบายภาพที่นี่

  • เลือกถัดไป -> เรียกดู ...
  • คุณต้องเลือกAll Filesเพื่อเรียกดูตำแหน่งของไฟล์root-cacert.pem
  • คลิกที่ถัดไปและเลือกวางใบรับรองทั้งหมดในร้านค้าดังต่อไปนี้ : Trusted ผู้ใบรับรองหลัก
  • คลิกที่ถัดไปและเสร็จสิ้น

ใส่คำอธิบายภาพที่นี่

ด้วยขั้นตอนนี้ IIS จึงเชื่อมั่นในความถูกต้องของใบรับรองของเรา

  1. ในขั้นตอนสุดท้ายของเราเราจะนำเข้าใบรับรองไปยัง IIS และเพิ่มไซต์ที่มีผลผูกพัน

    • เปิดบริการข้อมูลทางอินเทอร์เน็ต (IIS)หรือพิมพ์inetmgrบนพร้อมรับคำสั่งและไปที่ใบรับรองของเซิร์ฟเวอร์
    • คลิกที่นำเข้า ...
    • กำหนดเส้นทางของไฟล์ .pfx ที่รหัสผ่านและเลือกเก็บใบรับรองบนเว็บโฮสติ้ง

ใส่คำอธิบายภาพที่นี่

  • คลิกที่ตกลง
  • ไปที่ไซต์ของคุณบน IIS Manager แล้วเลือกการเชื่อมโยง...และเพิ่มการผูกใหม่

  • เลือก https เป็นประเภทของการผูกและคุณควรจะเห็นใบรับรองที่นำเข้า

  • คลิกที่ตกลงและเสร็จสิ้น

ใส่คำอธิบายภาพที่นี่


ฉันต้องการให้มีการหมดอายุนานขึ้นด้วยใบรับรองที่ลงนามด้วยตนเองและ Windows SDK ที่มี makecert.exe ไม่สามารถใช้ได้ในโฮสต์ Windows โฮสต์ Linux และคำตอบนี้ให้คำตอบ
richk

ฉันดีใจที่คุณพบว่าคำตอบของฉันมีประโยชน์
โจเซฟ

จะใส่ "public.organization.com" ลงในคำสั่ง openssl ได้ที่ไหน?
The One

2

อีกทางเลือกหนึ่งคือการสร้างใบรับรองที่ลงนามด้วยตนเองซึ่งอนุญาตให้คุณระบุชื่อโดเมนต่อเว็บไซต์ ซึ่งหมายความว่าคุณสามารถใช้กับชื่อโดเมนต่างๆได้

ในตัวจัดการ IIS

  1. คลิกโหนดชื่อเครื่อง
  2. เปิดใบรับรองเซิร์ฟเวอร์
  3. ในแผงการดำเนินการเลือก "สร้างใบรับรองที่ลงชื่อด้วยตนเอง"
  4. ใน 'ระบุชื่อที่จำง่าย ... ' ตั้งชื่อว่า * Dev (เลือก 'Personal' จากรายการประเภท)
  5. บันทึก

ตอนนี้บนเว็บไซต์ของคุณใน IIS ...

  1. จัดการการผูก
  2. สร้างการผูกใหม่สำหรับ Https
  3. เลือกใบรับรองที่ลงนามด้วยตนเองจากรายการ
  4. เมื่อเลือกแล้วช่องชื่อโดเมนจะเปิดใช้งานและคุณจะสามารถป้อนชื่อโดเมนของคุณได้

ใส่คำอธิบายภาพที่นี่


ขอบคุณคำตอบที่มีประโยชน์ที่สุดจนถึงตอนนี้ อย่างน้อยเพื่อใช้ในการพัฒนานี้เป็นไปอย่างรวดเร็ว
cabaji99

0

อีกวิธีง่ายๆในการสร้างใบรับรองที่ลงนามด้วยตนเองคือการใช้ Jexus Manager

ผู้จัดการ Jexus

  1. เลือกโหนดเซิร์ฟเวอร์ในพาเนล Connections
  2. ในแผงตรงกลางให้คลิกไอคอนใบรับรองเซิร์ฟเวอร์เพื่อเปิดหน้าการจัดการ
  3. ภายใต้แผงการดำเนินการคลิกรายการเมนู“ สร้างใบรับรองที่ลงชื่อด้วยตนเอง ... ”

https://www.jexusmanager.com/en/latest/tutorials/self-signed.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.