เมื่อคุณได้
https://encrypted.google.com/search?q=%s
เป็น%s
แบบสอบถามเข้ารหัส? หรือเพียงแค่การตอบสนอง? หากไม่เป็นเช่นนั้นเหตุใด Google จึงควรให้บริการเนื้อหาสาธารณะด้วยการเข้ารหัสด้วย
เมื่อคุณได้
https://encrypted.google.com/search?q=%s
เป็น%s
แบบสอบถามเข้ารหัส? หรือเพียงแค่การตอบสนอง? หากไม่เป็นเช่นนั้นเหตุใด Google จึงควรให้บริการเนื้อหาสาธารณะด้วยการเข้ารหัสด้วย
คำตอบ:
คำขอทั้งหมดถูกเข้ารหัสรวมถึง URL และแม้แต่คำสั่ง ( GET
) สิ่งเดียวที่ฝ่ายแทรกแซงเช่นพร็อกซีเซิร์ฟเวอร์สามารถรวบรวมได้คือที่อยู่ปลายทางและพอร์ต
อย่างไรก็ตามโปรดทราบว่าแพ็กเก็ต Client Hello ของ TLS handshake สามารถโฆษณาชื่อโดเมนแบบเต็มในรูปแบบข้อความธรรมดาผ่านส่วนขยายSNI (ขอบคุณ @hafichuk) ซึ่งเบราว์เซอร์กระแสหลักสมัยใหม่ทั้งหมดใช้งานได้แม้ว่าจะมีบางตัวในระบบปฏิบัติการรุ่นใหม่เท่านั้น
แก้ไข: (เนื่องจากสิ่งนี้ทำให้ฉันได้รับป้าย "คำตอบที่ดี" ฉันเดาว่าฉันควรจะตอบคำถามทั้งหมด ... )
การตอบกลับทั้งหมดจะถูกเข้ารหัสด้วย พร็อกซีไม่สามารถสกัดกั้นส่วนใดส่วนหนึ่งได้
Google ให้บริการค้นหาและเนื้อหาอื่น ๆ กว่า https เพราะไม่ทั้งหมดของมันเป็นที่สาธารณะและคุณอาจต้องการที่จะซ่อนบางส่วนของเนื้อหาสาธารณะจากMITM ในกรณีใด ๆ จะดีที่สุดเพื่อให้ Google คำตอบสำหรับตัวเอง
URL นั้นถูกเข้ารหัสดังนั้นพารามิเตอร์ในสตริงการสืบค้นจึงไม่เคลื่อนที่ข้ามสาย
อย่างไรก็ตามโปรดทราบว่า URL ที่รวมถึงข้อมูล GET มักจะถูกบันทึกโดยเว็บเซิร์ฟเวอร์ในขณะที่ข้อมูล POST แทบจะไม่มี ดังนั้นหากคุณกำลังวางแผนที่จะทำสิ่งที่ชอบ/login/?username=john&password=doe
ก็อย่าทำ ใช้ POST แทน
HTTPS สร้างการเชื่อมต่อ SSL พื้นฐานก่อนที่จะถ่ายโอนข้อมูล HTTP ใด ๆ สิ่งนี้ช่วยให้มั่นใจได้ว่าข้อมูล URL ทั้งหมด (ยกเว้นชื่อโฮสต์ซึ่งใช้ในการสร้างการเชื่อมต่อ) จะถูกดำเนินการภายในการเชื่อมต่อที่เข้ารหัสนี้เท่านั้นและได้รับการปกป้องจากการโจมตีจากคนตรงกลางในลักษณะเดียวกับข้อมูล HTTPS
ข้างต้นเป็นส่วนหนึ่งของคำตอบที่ครอบคลุมมากจาก Google Answers ซึ่งอยู่ที่นี่:
http://answers.google.com/answers/threadview/id/758002.html#answer
ส่วนของ URL หลังชื่อโฮสต์ถูกส่งอย่างปลอดภัย
ตัวอย่างเช่น https://somewhere.com/index.php?NAME=FIELD
/index.php?NAME=FIELD
ส่วนหนึ่งจะถูกเข้ารหัส somewhere.com
ไม่
ทุกอย่างถูกเข้ารหัส แต่คุณต้องจำไว้ว่าข้อความค้นหาของคุณจะยังคงอยู่ในบันทึกของเซิร์ฟเวอร์และจะสามารถเข้าถึงได้โดยใช้เครื่องมือวิเคราะห์บันทึกต่างๆเป็นต้น (ซึ่งโดยปกติจะไม่เป็นเช่นนั้นกับคำขอ POST)
การเชื่อมต่อได้รับการเข้ารหัสก่อนที่จะส่งคำขอ ใช่คำขอจะถูกเข้ารหัสเช่นกันรวมถึงสตริงการสืบค้น
ฉันเพิ่งเชื่อมต่อผ่าน HTTPS ไปยังเว็บไซต์และส่งผ่านพารามิเตอร์ GET มากมาย จากนั้นฉันใช้ Wirehark เพื่อดมกลิ่นเครือข่าย เมื่อใช้ HTTP URL จะถูกส่งโดยไม่เข้ารหัสซึ่งหมายความว่าฉันสามารถดูพารามิเตอร์ GET ทั้งหมดใน URL ได้อย่างง่ายดาย การใช้ HTTPS ทุกอย่างถูกเข้ารหัสและฉันไม่สามารถดูได้ว่าแพ็กเก็ตใดเป็นคำสั่ง GET นับประสาอะไรกับเนื้อหา!
ใช่มันปลอดภัย SSL เข้ารหัสทุกอย่าง
ข้อความที่ตัดตอนมาจากคำขอ POST:
POST /foo HTTP/1.1
... some other headers
ข้อความที่ตัดตอนมาจากคำขอ GET:
GET /foo?a=b HTTP/1.1
... some other headers
ในทั้งสองกรณีสิ่งที่ส่งไปบนซ็อกเก็ตจะถูกเข้ารหัส การที่ลูกค้าเห็นพารามิเตอร์ในเบราว์เซอร์ของเขาระหว่างการร้องขอ GET ไม่ได้หมายความว่าผู้ชายที่อยู่ตรงกลางจะเห็นสิ่งเดียวกัน
SSL เกิดขึ้นก่อนการแยกวิเคราะห์ส่วนหัวซึ่งหมายความว่า:
Client creates Request
Request gets encrypted
Encrypted request gets transmitted to the Server
Server decrypts the Request
Request gets parsed
คำขอมีลักษณะดังนี้ (จำไวยากรณ์ที่แน่นอนไม่ได้ แต่ควรใกล้เคียงพอ):
GET /search?q=qwerty HTTP/1.1
Host: www.google.de
นี่เป็นสาเหตุที่การมีใบรับรอง SSL ที่แตกต่างกันสำหรับโฮสต์หลาย ๆ โฮสต์บน IP เดียวกันจึงเป็นปัญหาไม่ทราบชื่อโฮสต์ที่ร้องขอจนกว่าจะมีการถอดรหัส
HTTP/1.1
มาในตอนท้ายของบรรทัดแรก
คำขอ GET ถูกเข้ารหัสเมื่อใช้ HTTPS ซึ่งในความเป็นจริงนี่คือสาเหตุที่เว็บไซต์ที่ปลอดภัยจำเป็นต้องมีที่อยู่ IP ที่ไม่ซ้ำกัน - ไม่มีวิธีรับชื่อโฮสต์ที่ต้องการ (หรือไดเรกทอรีเสมือน) จากคำขอจนกว่าจะมีการถอดรหัส