เปลี่ยนเส้นทาง https เป็น https อื่น


28

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

ปีละหลายครั้งบางคนจะขอให้ฉันทำเช่นนี้ ฉันต้องการจะชี้ให้พวกเขาไปที่บทความที่น่านับถือซึ่งอธิบายเรื่องนี้

ฉันต้องการที่จะใช้ URL ที่https://www.example.com/และการเปลี่ยนเส้นทางการจราจรไปยังhttps://www.example2.com/

ฉันเชื่อว่าสิ่งนี้ควรเป็นไปได้ทางเทคนิค แต่ไม่พึงประสงค์ เกิดอะไรขึ้นกับวิธีนี้? เบราว์เซอร์จะมีป๊อปอัปการรักษาความปลอดภัยหรือไม่ตั้งแต่ฉันเปลี่ยนเส้นทางไปยังเว็บไซต์อื่น ทุกคนสามารถให้ลิงก์ไปยังเอกสารที่มีเกียรติซึ่งอธิบายสิ่งนี้ได้หรือไม่


4
สถานการณ์ของคุณอาจจะน่ารำคาญ แต่ก็ไม่ใช่เรื่องน่าขัน;)
Gareth

คำตอบ:


17

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

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

มีสองวิธีในการแก้ไขปัญหานี้:

  • มีใบรับรองตัวแทนสำหรับ * .example.com ดังนั้นโดเมนย่อยทั้งหมดจึงสามารถแบ่งปันใบรับรองเดียวกันได้
  • เรียกใช้แต่ละไซต์ SSL ที่ที่อยู่ IP อื่น วิธีนี้เว็บเซิร์ฟเวอร์จะรู้ใบรับรอง SSL ที่สามารถส่งไปยังเบราว์เซอร์โดยตรวจสอบที่อยู่ IP ที่ได้รับการเชื่อมต่อขาเข้า

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

อัปเดต:ทุกวันนี้คุณสามารถเรียกใช้ไซต์ SSL หลายรายการใน IP เดียว หากต้องการเปิดใช้งานให้กำหนดค่าการสนับสนุน SNI ที่เว็บเซิร์ฟเวอร์ของคุณ เบราว์เซอร์ที่ทันสมัยส่วนใหญ่ (ยกเว้น windows XP และ Android 2) รองรับสิ่งนี้


1
คุณสามารถโฮสต์ไซต์ SSL หลายแห่งที่ IP เดียวกันภายใต้ Unified Communication Certificate (UCC) ดูhelp.godaddy.com/article/3908
ManiacZX

วิธีแก้ปัญหาอื่น ๆ สำหรับปัญหาหลายชื่อโฮสต์ / หนึ่งใบรับรอง IP คือการใช้หมายเลขพอร์ตอื่น สิ่งนี้ไม่เหมาะเนื่องจากไฟร์วอลล์ / จุดเชื่อมต่อสาธารณะบางตัวปิดกั้นการรับส่งข้อมูลที่ไม่ใช่ 80/443
ไบรอัน Agee

5

ฉันไม่เคยลองสิ่งนี้ดังนั้นฉันจึงไม่ได้พูดจากประสบการณ์ที่เป็นรูปธรรม แต่ควรใช้งานได้ คุณจะต้องมีใบรับรอง SSL ที่ถูกต้องสำหรับhttps://www.example.comเนื่องจากชื่อโฮสต์นั้นเข้ารหัสไว้ในส่วนหัว HTTP ดังนั้นเซิร์ฟเวอร์ของคุณจะไม่ทราบว่าจะเปลี่ยนเส้นทางจนกว่าจะถูกถอดรหัส หลังจากนั้นควรเปลี่ยนเส้นทางเนื่องจากเป็นคำขอ HTTP ปกติ


2

ทำไมสิ่งนี้ถึงไม่เป็นที่ต้องการ?

ตัวอย่างเช่นบิ๊กแบงค์และลิตเติ้ลแบงก์ทั้งสองทำงานบนเว็บไซต์เพื่อให้ลูกค้ารู้สึกปลอดภัยอย่างมีความสุข Big Bank ซื้อ Little Bank ในบางจุดที่คนไอทีจะตั้งค่าการเปลี่ยนเส้นทางสำหรับhttps://www.littlebank.comเพื่อhttps://www.bigbank.com นี่เป็นเหตุผลที่ถูกต้องตามกฎหมายในการเปลี่ยนเส้นทางจาก https ไปยัง https

ควรทำงานได้ดี


สถานการณ์ดังกล่าวที่คุณอธิบายไว้นั้นใช้ได้ แต่ถ้าคุณไปที่ www.littlebank.com และถูกเปลี่ยนเส้นทางไปที่ www.bigbank.com ในขณะที่มีที่อยู่ที่ถูกต้องจริงที่ถูกปิดบังจนเบราว์เซอร์ยังคงแสดง www.littlebank.com นั่นไม่ดี สิ่ง. นี่เป็นเรื่องธรรมดาสำหรับเว็บไซต์ที่ไม่ปลอดภัยซึ่งไม่เกี่ยวข้อง แต่แน่นอนว่าคุณสามารถเห็นอันตรายที่แสดงให้เห็นว่าเป็นเว็บไซต์ที่ปลอดภัยที่คุณไม่ได้อยู่ในความเป็นจริง
ชาร์ลส์

1

สิ่งที่ตัดการเชื่อมต่อที่ฉันคิดว่ามีอยู่ในการตอบสนองปัจจุบันที่อาจเกิดขึ้นกับคุณคือในสถานการณ์เหล่านี้การเปลี่ยนเส้นทางที่แท้จริง (เช่น: เบราว์เซอร์ที่ได้รับการแต่งตั้งให้ www.example2.com) จะดี แต่ถ้าคุณซ่อน เบราว์เซอร์ยังคิดว่ามันชี้ไปที่ www.example.com เมื่อในความเป็นจริงคุณได้ส่งไปที่ www.example2.com นี่คือที่ที่คุณจะเห็นคำเตือนความปลอดภัยอย่างแม่นยำเพราะคุณอาจพยายามหลอกผู้ใช้

เวอร์ชันสั้นคือการเปลี่ยนเส้นทางปกติควรจะดีการปิดบังที่อยู่อาจทำให้คุณต้องอธิบายหลายอย่าง


ขอบคุณชาร์ลส์ นั่นต้องเป็นสถานการณ์ที่ "ไม่พึงปรารถนา" ที่ฉันคิด
Stefan Lasiewski

0

อย่างที่เห็นมันปัญหานี้สามารถแก้ไขได้ในเลเยอร์การขนส่ง สมมติว่าคุณมีระเบียน DNS สำหรับ example.com ซึ่งชี้ไปที่ 192.168.0.1 เมื่อคุณพิมพ์https://example.comในเบราว์เซอร์พีซีของคุณสร้างการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์ที่มี IP 192.168.0.1 ซึ่งกระบวนการบางอย่างรับฟังพอร์ต 443 จะเกิดอะไรขึ้นถ้าในเวลาเดียวกันเซิร์ฟเวอร์ (ซึ่งไม่ได้พยายาม ดูรายละเอียดข้อมูลที่ส่งผ่านเซสชัน TCP นี้เช่นการเริ่มต้นการเจรจา SSL) สร้างการเชื่อมต่อ TCP ที่ 192.168.0.2 (เซิร์ฟเวอร์อื่นที่มี DNS example2.com ชี้ไปที่ HA proxy linux utulity ที่ติดตั้งบนเซิร์ฟเวอร์ตัวแรกอาจแก้ปัญหานี้ด้วย การกำหนดค่าเช่นนั้น:

defaults
        log    global
        mode    tcp
        retries 2
        option redispatch
        option tcplog
        option tcpka
        option clitcpka
        option srvtcpka
        timeout connect 5s      
        timeout client  24h     #timeout client->haproxy(frontend)
        timeout server  60m

listen front443 192.168.0.1:443
    server back443 192.168.0.2:443

แต่สิ่งนี้จะทำให้เกิดข้อผิดพลาดใบรับรอง SSL ยกเว้นกรณีที่เว็บเซิร์ฟเวอร์ของคุณจะแสดงใบรับรอง SSL พร้อมกับ CN = example2.com และ SAN = example.com

หรือคุณอาจตั้งค่าขอบฟ้า slpit DNS เมื่อจากผู้ใช้ perstective example.com และ example2.com แก้ไขเป็น 192.168.0.1

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