ข้อขัดแย้งระหว่างโดเมนที่ให้ SNI และ HTTP


22

ฉันเพิ่งย้ายเว็บไซต์ WordPress ที่มีร้านค้าขนาดเล็กจากผู้ให้บริการโฮสติ้งไปยังเซิร์ฟเวอร์ของ Ubuntu Server ที่ทำงานด้วยตนเอง 12.04.2 LTS และ Apache 2.2.22 ฉันต้องการ SSL สำหรับร้านค้า ฉันตั้งค่า vhosts อย่างง่ายสองสามตัวบน IP ใหม่สำหรับเซิร์ฟเวอร์หนึ่งรายการเชื่อมโยงกับพอร์ต 80 ของ IP เฉพาะและอีกรายการหนึ่งผูกเข้ากับพอร์ต 443 ทั้งสองมีServerName www.example.comและServerAlias example.comในการกำหนดค่า vhost SSLStrictSNIVHostCheck offฉันมี

ไซต์ทำงานช้ามาก แต่ใช้งานได้ ฉันได้รับข้อมูลต่อไปนี้ในบันทึกข้อผิดพลาด

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different

ฉันคาดหวังว่าความเชื่องช้าเกี่ยวข้องกับข้อความด้านบน ความคิดเห็นใด ๆ เกี่ยวกับสาเหตุที่ปรากฏขึ้นและสิ่งที่ฉันสามารถทำได้เกี่ยวกับเรื่องนี้

คำตอบ:


24

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

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"

เซิร์ฟเวอร์ของฉันตอบด้วย HTTP 400: คำขอไม่ถูกต้อง

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

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


11

บางทีข้อผิดพลาดนี้ปรากฏเจตนาโดยลูกค้าบางช่องโหว่การทดสอบของเซิร์ฟเวอร์ของคุณ ฉันพบว่าคำขอจากทresearchscan367.eecs.umich.eduริกเกอร์ข้อผิดพลาดบนเซิร์ฟเวอร์ที่ฉันดูแล ในกรณีนี้มันเป็นสิ่งที่ดี®ที่เกิดข้อผิดพลาด

ฉันอยากรู้ว่าการโจมตีแบบใดที่เป็นไปได้และฉันถามคำถามนี้ใน Security Stack Exchange: การโจมตีประเภทใดที่ถูกป้องกันโดยรหัสข้อผิดพลาดของ Apache2 AH02032


1

ดูเหมือนลูกค้าครั้งแรก ... เบราว์เซอร์ใดที่ทำให้เกิดปัญหานี้

ข้อความจะแนะนำชื่อโฮสต์ที่ไคลเอ็นต์ส่งระหว่างการเชื่อมต่อ ssl ไม่เหมือนกับที่ไคลเอ็นต์ส่งในการร้องขอ HTTPS เมื่อ SSL เลเยอร์ขึ้น


ฉันไม่รู้ว่าอะไรทำให้เกิดสิ่งนี้ ข้อผิดพลาดไม่ได้รายงานข้อมูลลูกค้า ฉันเพิ่งรู้ว่าฉันเห็นสิ่งนี้เป็นประจำ ฉันหวังว่า ServerAlias ​​ก็เพียงพอที่จะทำให้มีความสุขเนื่องจากในทางทฤษฎีเซิร์ฟเวอร์รู้ว่า www.domain.com และ domain.com เทียบเท่ากัน
flickerfly

@flickerfly ใช่นี่คือไคลเอนต์รถม้าชนิดเล็กและไม่มากที่คุณสามารถทำได้เว้นแต่คุณจะสามารถระบุได้
Michael Hampton

2
โอเคเพิ่งปิดใช้งาน SNI โดยการลบคำสั่ง NameBasedVirtualHost สำหรับพอร์ต 443 ฉันคิดว่าฉันไม่ต้องการมันในตอนนี้ ฉันคิดว่ามันควรจะทำงาน
flickerfly

1

ในกรณีของฉันการสร้าง virtualhost ใหม่ที่มีขีดล่างเป็นปัญหา ฉันมีใบรับรองไวลด์การ์ด SSL

ใช้งานไม่ได้:

<VirtualHost *:443>
        SSLEngine on
        ServerName sub_domain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

แม้ว่า Apache จะทำการรีสตาร์ทสำเร็จ แต่ฉันได้รับข้อผิดพลาด HTTP 400 ในบันทึกข้อผิดพลาด:

[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request

แต่การลบขีดล่างทำงาน:

<VirtualHost *:443>
        SSLEngine on
        ServerName subdomain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

1
ยินดีต้อนรับสู่ ServerFault การใส่เครื่องหมายขีดล่างในชื่อโฮสต์ขัดต่อ RFC และจะแตกในหลายวิธี stackoverflow.com/questions/2180465/…
ลูกไก่

1
แน่นอน! นั่นคือเหตุผลที่ตอนนี้มันเป็นข้อมูลอ้างอิงด้วย
MS Berends

0

ตรวจสอบไฟล์ / etc / hosts ของคุณเพื่อดูว่าคุณกำลังกำหนดชื่อโดเมนให้กับที่อยู่ IP ภายใน (ภายใน) อย่าลืมรีสตาร์ท name service cache daemon หลังจากเปลี่ยน / etc / hosts service nscd restart

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