IIS7: ไม่สามารถตั้งชื่อโฮสต์บนไซต์ด้วย SSL cert และพอร์ต 443


47

พิจารณาเครื่อง Win 2008 SP2 ด้วย IIS7 ภารกิจคือการใช้ใบรับรองและชื่อโฮสต์กับไซต์หนึ่งเดียวบนเครื่องนี้ จำเป็นต้องมีส่วนหัวโฮสต์ของเว็บไซต์abc.123.example.com

ขั้นตอนแรกคือการติดตั้ง. pfx ไปยังร้านค้าส่วนตัวซึ่งประสบความสำเร็จ

IIS7 ค้นหาใบรับรองว่าพร้อมใช้งาน แต่จะไม่อนุญาตให้ป้อนชื่อโฮสต์ กล่องข้อความชื่อโฮสต์ถูกปิดใช้งาน / เป็นสีเทาเสมอก่อนที่จะเลือกใบรับรองของฉัน ฉันได้ลบการผูกพอร์ตเริ่มต้น 80 แล้ว

การผูกเว็บไซต์

คำถาม:ฉันจะตั้งชื่อโฮสต์สำหรับไซต์นี้ได้อย่างไร มันเป็นเรื่องของการรับรองนี้เป็นใบรับรองตัวแทนหรือไม่? ฉันเข้าใจว่าคำขอ SSL เข้ามาในเว็บเซิร์ฟเวอร์และส่วนหัวโฮสต์ในแพ็กเก็ตนั้นได้รับการเข้ารหัส เหตุใด IIS6 จึงอนุญาตให้ระบุส่วนหัวของโฮสต์ แต่ IIS7 ไม่ได้

อัปเดต:ใบรับรองไม่ใช่ส่วนหนึ่งของปัญหา ฉันได้สร้างไซต์ใหม่บนเครื่องและเมื่อเลือกการเชื่อมโยง https กล่องข้อความชื่อโฮสต์จะถูกปิดใช้งาน

คำตอบ:


32

คุณไม่สามารถทำได้จาก UI คุณต้องทำจากบรรทัดคำสั่ง นี่เป็นวิธีที่ดีในการดำเนินการ:

http://www.sslshopper.com/article-ssl-host-headers-in-iis-7.html


33
เคล็ดลับที่มีประโยชน์ให้ชื่อที่เป็นมิตรของใบรับรองเริ่มต้นด้วย '*' IIS จะไม่ทำให้กล่องส่วนหัวของโฮสต์เป็นสีเทา: blog.armgasys.com/?p=80
russau

1
ฉันรู้ว่ามันเก่าและมันก็เป็นเพียงความคิดเห็น แต่เคล็ดลับที่มีประโยชน์นี้ช่วยฉันหงุดหงิด ขอขอบคุณ!
bpursley

45

มันทำงานใน GUI ...

เพียงตรวจสอบให้แน่ใจว่า 'ชื่อที่จำง่าย' ของใบรับรองที่คุณกำลังติดตั้งนั้นเหมือนกับชื่อโดเมนที่คุณสร้างขึ้นสำหรับใบรับรอง

กล่าวคือ * .companydomain.com

ถ้าคุณใส่ 'Nice friendly name' สำหรับ * .companydoman.com cert เมื่อติดตั้งใบรับรองใน IIS มันจะเป็นสีเทาในส่วนหัวของชื่อโฮสต์

ถ้าคุณใช้ * .companyname.com เป็นชื่อที่จำง่ายคุณก็จะเป็นทอง

ความเจริญ


14
ขอบคุณสำหรับเคล็ดลับนี้! ในกรณีที่คนอื่นไม่สามารถเปลี่ยนชื่อใบรับรองจาก IIS (ใครก็ได้?) คุณสามารถเปลี่ยนชื่อใบรับรองใน MMC snap-in สำหรับใบรับรอง เพียงโหลด MMC เพิ่มสแน็ปอินใบรับรองเลือกบัญชีคอมพิวเตอร์คอมพิวเตอร์ในระบบ เมื่อคุณโหลดสแน็ปอินใบรับรองคุณสามารถเรียกดูใบรับรอง (คอมพิวเตอร์ในพื้นที่)> ส่วนตัว> ใบรับรองและคลิกขวาเพื่อเลือกคุณสมบัติในใบรับรองของคุณ เปลี่ยนฟิลด์ชื่อที่จำง่ายเป็น * .yoursite.com และโหลดสแน็ปอินตัวจัดการ IIS อีกครั้ง
Garrett

4
ชื่อที่เป็นมิตรนั้นดูเหมือนจะต้องเริ่มต้นด้วย "*" แต่สามารถมีชื่ออื่นใดก็ได้ที่คุณต้องการหลังจากนั้น ในกรณีของฉันฉันมีใบรับรองที่ถูกต้องสำหรับหลาย ๆ โดเมนที่ไม่มีรูททั่วไปนอกเหนือจาก * .com และให้ชื่อนั้นเพราะชื่อที่เป็นมิตรนั้นดูแปลก ๆ ดังนั้นฉันเลยเรียกมันว่า * -my-descriptive-name-here แทน และขอบคุณ @Garrett สำหรับเคล็ดลับการเปลี่ยนชื่อ!
wojtow

นี่คือคำตอบที่แท้จริง นิสัยดี
Joe Phillips

@Garrett นี่หมายความว่าถ้าฉันใช้ชื่อที่จำง่ายเช่น 'My Domain SSL' สิ่งต่าง ๆ จะยังคงใช้ได้แม้ว่าฟิลด์ชื่อโฮสต์จะว่างเปล่า มันทำให้ฉันเป็นบ้าจริง ๆ เมื่อฉันทำชื่อโฮสต์หาย แต่โดเมนย่อย 4 รายการของฉันดูเหมือนจะทำงานได้ดีกับ SSL ที่ออกใหม่หรือไม่ เห็นได้ชัดว่าการใช้ '* .mydomain.com' เป็นชื่อที่จำง่ายช่วยให้คุณเห็นชื่อโฮสต์ แต่ภายใต้ประทุนตัวเลือกทั้งสองควรใช้งานได้ มิฉะนั้น IIS ควรบอกให้เราใช้ชื่อโดเมนที่ผ่านการรับรองอย่างชัดเจนและไม่ใช่ชื่อที่จำง่าย
Charles Robertson

10

คำตอบสั้น ๆ คือแต่ละ IP สามารถมีใบรับรองได้เพียงหนึ่งรายการเท่านั้นดังนั้นการเชื่อมใบรับรองจะนำไปใช้ไม่ว่าชื่อโฮสต์ใดจะถูกนำไปยังที่อยู่ IP นั้น ความสามารถในการระบุชื่อโฮสต์จะบอกเป็นนัยว่าคุณสามารถมีหลายชื่อโฮสต์และชุดใบรับรองในที่อยู่ IP และพอร์ตเดียวกัน (เท่าที่คุณสามารถทำได้กับรายการที่ไม่ใช่ SSL) แต่นี่ไม่ใช่กรณีดังนั้นจึงไม่มีฟิลด์

คำอธิบายที่สมบูรณ์ยิ่งขึ้นคือ SSL เข้ารหัสการรับส่งข้อมูลของคุณและส่วนหนึ่งของการรับส่งข้อมูลนั้นคือส่วนหัว HTTP ที่เบราว์เซอร์ส่งไปยังเซิร์ฟเวอร์ หนึ่งในส่วนหัวเหล่านั้นจะเป็นส่วนหัว "โฮสต์" ซึ่ง IIS ใช้เพื่อกำหนดว่าไซต์ใดที่จะโหลดด้วยการร้องขอ เนื่องจากต้องโหลดใบรับรองเพื่อสร้างการเชื่อมต่อที่ปลอดภัยก่อนที่จะส่งส่วนหัวคำขอ IIS จึงต้องเลือกใบรับรองตามที่อยู่ IP และหมายเลขพอร์ตโดยปล่อยให้ส่วนหัว "โฮสต์" ออกมาในความเย็นเป็นปัจจัยในการพิจารณา โหลดเว็บไซต์ไหนจึงไม่ยอมให้คุณเข้าไป

นี่คือบทความที่สรุปการทำงานภายในของการเชื่อมต่อ SSLในรายละเอียดปลีกย่อย


ขอบคุณสำหรับคำตอบนี้จัสติน ฉันยังไม่แน่ใจว่าทำไม IIS7 จึงไม่ให้ฉันระบุส่วนหัวของโฮสต์แม้ว่าฉันจะเลือกที่อยู่ IP รายการใดรายการหนึ่ง IIS6 ทำได้โดยไม่มีปัญหาใด ๆ ดังที่กล่าวมานี่เป็นเว็บไซต์เดียวและแห่งเดียวในเครื่อง
p.campbell

2
ส่วนหัวของโฮสต์สามารถทำงานร่วมกับใบรับรองตัวแทนหรือหลายโดเมน "UC" ใบรับรอง: sslshopper.com/unified-communications-uc-ssl-certificates.html ในกรณีนี้เซิร์ฟเวอร์มีใบรับรองเพียง 1 ฉบับที่ให้บริการแม้มีชื่อโฮสต์หลายชื่อ
russau

คำอธิบายที่ชัดเจนมาก +1
Dan Solovay

7

คำตอบ SSLShopper ไม่ได้ผลสำหรับฉันเพราะเหลือการเชื่อมต่อโดยไม่มีส่วนหัวของโฮสต์และคุณไม่สามารถลบการเชื่อมโยงนั้นโดยไม่ทำให้การเชื่อมต่อกับใบรับรองเสียหาย นี่คือวิธีที่ฉันใช้เพื่อให้มันทำงาน:

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

ก่อนอื่นเราต้องรวบรวมข้อมูลบางอย่าง เราต้องการแฮช ID แอปพลิเคชันและชื่อโฮสต์

ขั้นตอน

  1. เปิด IIS เลือกเซิร์ฟเวอร์ของคุณและดับเบิลคลิกที่ "ใบรับรองเซิร์ฟเวอร์" ในส่วนด้านล่าง บันทึกที่อยู่ "ออกให้" นี่คือชื่อโฮสต์ของเรา บันทึกสิ่งนี้
  2. เลือกเว็บไซต์ของคุณ
  3. ผูกเว็บไซต์ของคุณเข้ากับพอร์ต 80 โดยใช้โปรโตคอล http
  4. ลบการผูกอื่น ๆ ทั้งหมด
  5. ผูกเว็บไซต์ของคุณเข้ากับพอร์ต 443 โดยใช้โปรโตคอล https
  6. เปิดพรอมต์คำสั่ง

    netsh http show sslcert
    
  7. บันทึก Certificate Hash และ Application ID

  8. ลบการเชื่อมโยง https ในเว็บไซต์ของคุณ
  9. ที่พรอมต์คำสั่ง:

    netsh http add sslcert ipport=0.0.0.0:443 certstorename=my certhash=<put Certificate Hash here> appid={<put Application ID here>}
    
    appcmd set site /site.name:"<put site name here>" /+bindings.[protocol='https',bindingInformation='*:443:<put host name here>']
    

หมายเหตุ: Appcmd.exe สามารถพบได้ใน c: \ windows \ system32 \ insetsrv คุณอาจต้องอยู่ในโฟลเดอร์นั้นเพื่อให้คำสั่งนี้ใช้งานได้

  1. ลบการเชื่อมโยง http จากเว็บไซต์ของคุณ

ขอบคุณ! สิ่งนี้ช่วยฉันในที่สุดทำให้ไซต์ของฉันทำงานใน HTTPS ฉันแก้ไขการพิมพ์ผิดในหนึ่งในคำสั่ง แต่ฉันต้องเพิ่มหัวข้อขั้นตอนเพื่อให้ผ่านข้อกำหนดความยาวขั้นต่ำที่ผ่านมา อย่าลังเลที่จะลบ - คำตอบดั้งเดิมของคุณนั้นง่ายต่อการติดตาม ไชโย!
potatopeelings

สิ่งนี้ใช้ได้สำหรับฉันที่มีใบรับรองที่มี 6 SAN (ไม่ใช่ใบรับรองตัวแทน) ที่มีการเปลี่ยนแปลงเล็กน้อยเนื่องจากฉันมีหลายไซต์ ฉันต้องทำตามขั้นตอนที่ 1 ถึง 7 หนึ่งครั้ง ขั้นตอนที่ 8 จะต้องทำในแต่ละเว็บไซต์ คำสั่งแรกของขั้นตอนที่ 9 จะต้องทำครั้งเดียวและคำสั่งที่สองของขั้นตอนที่ 9 จะต้องทำครั้งเดียวต่อเว็บไซต์
Steve Kaye

4

คำตอบที่ยอมรับได้ที่นี่มีความสับสนและฉันไม่คิดว่ามันถูกต้องสำหรับคำถาม ไม่ควรเป็นคำตอบที่ยอมรับได้

ปัญหา

คุณมีไวลด์การ์ด SSL เช่น*.ipsum.comและติดตั้งใบรับรอง แต่คุณไม่สามารถเลือกชื่อโฮสต์สำหรับไซต์ใน IIS เมื่อคุณพยายามเพิ่มการเชื่อมโยง HTTPS เนื่องจากกล่องข้อความเป็นสีเทา

การแก้ไขปัญหา

SSL สัญลักษณ์ตัวแทนของคุณสามารถใช้กับโดเมนย่อยใด ๆ คุณก็ต้องให้แน่ใจว่า*คุณเริ่มต้นชื่อที่เรียกง่ายของใบรับรองด้วย ฉันชอบใช้ชื่อที่เป็นมิตรเดียวกันกับโดเมนไวด์การ์ดเช่น*.ipsum.comแต่คุณสามารถเรียกชื่ออะไรก็ได้ที่มีเครื่องหมายดอกจัน:*foo

ฉันให้ใบรับรองชื่อที่เป็นมิตรผิดช่วยด้วย!

ตั้งแต่ Windows 8 หรือ Server 2012 คุณสามารถพิมพ์certlm.mscในเมนูเริ่มเพื่อจัดการใบรับรองสำหรับเครื่องท้องถิ่น ใน Windows เวอร์ชั่นก่อนหน้าคุณจะต้องทำอะไรที่ซับซ้อนกว่านี้เล็กน้อย:

  1. เรียกใช้mmc.exeตั้งแต่เริ่มต้น
  2. ไปที่FileเมนูและเลือกAdd/Remove Snap-in...หรือกด(Ctrl-M)
  3. ไฮไลต์Certificatessnap-in Add >แล้วกดจากนั้นเลือกComputer Accountตามด้วยLocal Computerในกล่องโต้ตอบที่ตามมาจากนั้นกดแล้วFinishตามด้วยOKเพื่อปิดหน้าต่าง Snap-in

ในหน้าต่างหลักขยายCertificates (Local Computer)จากนั้นจากPersonalนั้นCertificatesคุณจะสามารถคลิกขวาที่ใบรับรองPropertiesซึ่งคุณสามารถอัปเดตชื่อที่จำง่ายได้

ปิดและเปิดตัวจัดการ IISและจากนั้นคุณสามารถตั้งชื่อโฮสต์ของคุณ


1
มันหลอก!
Kreker

1
@Zac Awesome น่ากลัว น่ากลัว แม้ว่าฉันจะไม่คิดว่ามันจะสำคัญถ้าฟิลด์ชื่อโฮสต์ว่างเปล่า แต่ก็ทำให้ฉันสบายใจขึ้น โปรดจำไว้ว่าฉันออกใบรับรองของฉันอีกครั้ง ดังนั้นชื่อโฮสต์ของฉันอยู่ในฟิลด์ชื่อโฮสต์ก่อนที่จะว่างเปล่า SSL wildcard ของฉันดูเหมือนจะทำงานกับชื่อที่จำง่ายหรือ * ชื่อ mydomain.com ฉันคิดว่า IIS เก็บบันทึกชื่อโฮสต์ภายในไว้หลังจากฟิลด์ชื่อโฮสต์ว่างเปล่า ฉันคิดว่าฉันควรพูดถึงเรื่องนี้ในกรณีที่ผู้คนคลั่งไคล้!
Charles Robertson

1
@Zac Oh และโซลูชันนี้ทำงานบนเซิร์ฟเวอร์ไดโนเสาร์เช่น Windows 2008R2 ...
Charles

@CharlesRobertson ดีใจมากที่ได้รับความช่วยเหลือนี้และขอขอบคุณที่เพิ่มข้อมูลเพิ่มเติม!
Zac

2

ที่จริงแล้วคุณสามารถเพิ่มส่วนหัวของโฮสต์ผ่านทาง gui แต่มันขึ้นอยู่กับวิธีการตั้งชื่อใบรับรอง ... ถ้าฉันให้ชื่อ * .xyz.com ที่เป็นมิตรกับตัวแทน wildcard ของฉันและเลือกใบรับรองนั้นจากนั้นฉันก็เป็น สามารถใช้ gui ได้ หากชื่อที่เป็นมิตรคือ xyzwildcard และฉันเลือกมันแล้วมันจะทำให้ช่อง hostheader เป็นสีเทา ...

แปลก ๆ แปลก ๆ


1

เครื่องบางเครื่องไม่อนุญาตให้คุณแก้ไขชื่อโฮสต์หากเปลี่ยนโปรโตคอลเป็น https หรือหลังจากเพิ่มใบรับรอง SSL IIS อาจไม่พอใจในบางครั้ง

คำสั่ง Windows นี้จะสร้างการเชื่อมโยงใหม่กับโปรโตคอล "https" บนพอร์ต "443", ชื่อโฮสต์ "subdomain.domain.com", ชื่อไซต์ "ชื่อไซต์" เปลี่ยนค่าเหล่านั้น (ในเครื่องหมายคำพูด) เพื่อตอบสนองความต้องการของคุณ จากนั้นคุณจะต้องลบการเชื่อมเก่าหากใช้พอร์ต 443

Run Windows Command Prompt as Administrator

C:>cd C:\Windows\System32\inetsrv

C: \ Windows \ System32 \ inetsrv>appcmd set site /site.name:"site_name" /+bindings.[protocol='https',bindingInformation='*:443:subdomain.domain.com']


0

ชื่อโฮสต์สามารถเพิ่มได้เมื่อทอดชื่อของใบรับรองที่เลือกจะเหมือนกับชื่อโฮสต์ * .xyz.com และคุณสามารถเปลี่ยนชื่อชื่อที่จำง่ายของใบรับรองเป็น * .xyz.com จาก mmc (สแนปอิน)


-1

ฉันคิดว่าบทความ KB นี้จะให้ความกระจ่างในเรื่องนี้ โดยสรุปส่วนหัวโฮสต์ HTTP 1.1 ไม่ได้รับการสนับสนุนเมื่อคุณใช้ SSL

สิ่งที่อาจจะทำให้สำเร็จในสิ่งที่คุณต้องการคือการใช้คีย์ metabase SecureBindings เช่น cscript.exe adsutil.vbs ตั้งค่า / w3svc / เว็บไซต์ ID / SecureBindings "ip.ip.ip.ip: 443: abc.123.mysite.com


ใช้ไม่ได้กับ IIS 7
davidcl

มันแปลกเพราะมันใช้งานได้เมื่อเราทำ ...
จิม B

-1

เหตุใด MS จึงใช้ GUI นี้เกินกว่าฉันเนื่องจากหากคุณมีแอปพลิเคชัน ASP.NET ที่ใช้ประโยชน์จากไฟล์ลิขสิทธิ์ (licx) เว็บไซต์ของคุณจะไม่ทำงานเพราะปรากฏเป็นที่อยู่ IP แทนชื่อโดเมน . พวกเขาจำเป็นต้องหยุดการสันนิษฐานในซอฟต์แวร์รุ่นใหม่ทุกครั้ง - ผู้ใช้ไอทีไม่จำเป็นต้องดูแลโดย Microsoft! โธ่!


-2
  1. ฉันสร้างใบรับรองที่เซ็นชื่อเองด้วย * .testcompany.com ฉันเลือกที่สร้างขึ้นใหม่ (เริ่มต้นด้วย *) ในดรอปดาวน์ Edit SSL SSL certificate ฉันได้เปิดใช้งานกล่องข้อความชื่อโฮสต์สร้างชื่อโฮสต์เป็น 'webapi.b2c .com'

  2. ฉันอัปเดตไฟล์โฮสต์ใน C: \ Windows \ System32 \ drivers \ etc 127.0.0.1 webapi.b2c.com

ตอนนี้ฉันสามารถเรียกดูเว็บไซต์เป็น ' https://webapp.b2c.com/ '

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