เว็บไซต์หลายแห่งบนเซิร์ฟเวอร์ / IP เดียว; เพียงหนึ่งเดียวที่มี SSL


2

ฉันเพิ่งได้รับใบรับรอง SSL สำหรับไซต์หลักของฉัน ( https://wemarsh.com/ ) มันใช้งานได้ดีมากและฉันยังได้ตั้งค่ากฎ. htaccess เพื่อให้การรับส่งข้อมูลทั้งหมดในไซต์นั้นถูกเข้ารหัส (ฉันใช้งาน Apache)

อย่างไรก็ตามฉันยังมีเว็บไซต์อื่น ๆ บนเซิร์ฟเวอร์เดียวกันนี้ด้วยที่อยู่ IP เดียวกัน ตัวอย่างเช่นฉันมีบล็อก ( http://gallivant.wemarsh.com/) มันใช้งานได้ดีตราบใดที่ฉันเชื่อมต่อกับเวอร์ชันที่ไม่ได้เข้ารหัส ฉันไม่ต้องการเปิดใช้งานการเข้ารหัสสำหรับเว็บไซต์นี้เนื่องจากฉันรู้ว่าใบรับรองที่มีอยู่ของฉันไม่รวมโดเมนย่อยนั้นและฉันไม่ต้องการจ่ายสำหรับที่อยู่ IP เพิ่มเติมให้ทำเช่นนั้น ดังนั้นทั้งหมดจะดีถ้าผู้ใช้พิมพ์ http: // แต่ถ้าผู้ใช้พิมพ์ https: // (ไม่ว่าด้วยเหตุผลใดก็ตาม) คำเตือนจะปรากฏขึ้นโดยบอกว่าไซต์นั้นเป็นตัวแอบอ้าง (ตามที่คาดไว้เพราะใบรับรองผิด) แต่ถ้าผู้ใช้คลิกเพื่อดำเนินการต่อก็จะนำพวกเขาไปยังเว็บไซต์หลักแทนบล็อกบนโดเมนย่อย นี่เป็นสถานการณ์ที่แทบจะไม่เกิดขึ้นจริงในทางปฏิบัติ แต่ฉันรู้สึกว่าพฤติกรรมที่ถูกต้องคือการให้คำเตือนและจากนั้นไปที่ไซต์ "แอบอ้าง" ที่ถูกต้อง หรืออาจจะดีกับฉันถ้ามันล้มเหลวอย่างสมบูรณ์

ฉันเข้าใจปัญหาบางอย่างในการเล่น ก่อนอื่นฉันเข้าใจว่าสิ่ง SSL เกิดขึ้นก่อนที่ Apache จะได้รับคำขอซึ่งเป็นเหตุผลว่าทำไมไม่สามารถมีหลาย certs บนที่อยู่ IP เดียวกัน ดูเหมือนว่าจะป้องกันไม่ให้ฉันเพียงแค่ใช้กฎ. htaccess เพื่อส่งต่อทุกคนไปยังเว็บไซต์ http: // เวอร์ชัน (ตรงข้ามกับสิ่งที่ฉันทำบนไซต์หลัก)

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

vhosts ปัจจุบันของฉันสำหรับเว็บไซต์หลักเป็นดังนี้:

<VirtualHost *:80>
  ServerAdmin redacted@wemarsh.com
  ServerName  www.wemarsh.com
  ServerAlias wemarsh.com

  DirectoryIndex index.html
  DocumentRoot redacted
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin redacted@wemarsh.com
  ServerName  www.wemarsh.com
  ServerAlias wemarsh.com

  SSLEngine on
  SSLCertificateFile redacted
  SSLCertificateKeyFile redacted
  SSLCertificateChainFile redacted
  SSLCACertificateFile redacted

  DirectoryIndex index.html
  DocumentRoot redacted
</VirtualHost>

vhost ปัจจุบันของฉันสำหรับบล็อกย่อยเป็นดังนี้:

<VirtualHost *:80>
  ServerAdmin redacted@wemarsh.com
  ServerName  gallivant.wemarsh.com

  DirectoryIndex index.php
  DocumentRoot redacted
</VirtualHost>

ฉันพยายามกำหนดพอร์ต 443 ใน vhosts สำหรับโดเมนย่อย แต่นั่นไม่ได้ผล

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

ฉันคิดว่าผู้ให้บริการโฮสติ้งที่ใช้ร่วมกันต้องทำสิ่งนี้ไม่เช่นนั้นไซต์ที่ไม่ใช่ https ทั้งหมดจะพังใช่ไหม

(หมายเหตุ: ฉันไม่ได้ตั้งใจลิงก์ไปยังรุ่น https ของ gallivant สิ่งสุดท้ายที่ฉันต้องการคือ Google นำผู้คนไปยังจุดบกพร่องนี้ดังนั้นโปรดหลีกเลี่ยงการลิงก์ในการตอบกลับของคุณ)

ขอบคุณล่วงหน้า!

คำตอบ:


0

คุณไม่สามารถได้รับคำเตือนที่ผู้ใช้ได้รับเนื่องจากคุณถูกต้อง - ไม่สามารถระบุได้ว่าชื่อโดเมนคืออะไรจนกว่าจะสายเกินไป ใช้งานได้กับ TLS เท่านั้น (รองรับ TLS ในเบราว์เซอร์สมัยใหม่ แต่ไม่ใช่ในรุ่นเก่าและซอฟต์แวร์รวบรวมข้อมูลอัตโนมัติและสคริปต์ api ส่วนใหญ่จะไม่รู้จัก TLS ด้วย)

การแก้ไขที่คุณสามารถทำได้คือหลังจากที่ผู้ใช้ผ่านหน้าคำเตือน - ตรวจสอบว่าชื่อโฮสต์ถูกต้องหรือไม่และหากไม่ได้ถูกเปลี่ยนเส้นทางไปยังโดเมนที่ไม่ใช่ ssl (หรือ ssl)

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


"ตรวจสอบว่าชื่อโฮสต์นั้นถูกต้องหรือไม่และถ้าไม่ได้ถูกเปลี่ยนเส้นทางไปยังโดเมนที่ไม่ใช่ ssl (หรือ ssl)" - แล้วฉันจะทำอย่างไร จากสิ่งที่ฉันเห็นดูเหมือนว่า Apache ไม่รู้ชื่อโฮสต์ที่ต้องการจริงๆ
Eric Marsh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.