ทำไม curl จึงเชื่อมต่อ localhost แทน URL ระยะไกล
แยกพร็อกซีที่สืบทอดมา ไฟล์ curlrc ค่าเริ่มต้น และปลายทางจริงก่อนจะโทษ VPN การรันสามครั้งที่ควบคุมได้ช่วยให้การตรวจสอบ TLS เปิดอยู่
ถ้า curl พยายามเชื่อมต่อ localhost ไม่ว่าคุณจะให้ URL อะไรก็ตาม VPN คือจุดเริ่มต้นที่ไม่ถูกต้อง พร็อกซี HTTP หรือ SOCKS ภายในเครื่องอาจเป็นจุดเชื่อมต่อแรกที่ตั้งใจไว้ แม้ว่าบริการที่คุณต้องการจะอยู่ที่อื่นโดยสิ้นเชิงก็ตาม หากพร็อกซีนั้นไม่ทำงานแล้ว ความพยายามไปยัง localhost จะล้มเหลวก่อนที่ curl จะไปถึงปลายทางด้วยซ้ำ การตอบกลับของพร็อกซีก็ไม่ใช่หลักฐานว่าปลายทางได้ตอบกลับ
ทำตามขั้นตอนเหล่านี้ตามลำดับและหยุดที่ขั้นตอนแรกที่เปลี่ยนความพยายามเชื่อมต่อครั้งแรก
อ่านกฎพร็อกซีของ curl เองก่อน
curl อ่านตัวแปรพร็อกซีที่เฉพาะกับโปรโตคอล เช่น https_proxy และ HTTPS_PROXY รวมถึง ALL_PROXY เมื่อไม่มีค่าที่เฉพาะกับโปรโตคอลใดใช้บังคับ ตรวจสอบสภาพแวดล้อมของเชลล์ บริการ หรืองานที่เรียกใช้ curl จริง ไม่ใช่ของเทอร์มินัลปัจจุบันของคุณ งาน CI หน่วย systemd และเชลล์แบบโต้ตอบอาจสืบทอดชุดที่แตกต่างกันสามชุด การเดาจากเชลล์ที่มองเห็นคือสิ่งที่ทำให้การสอบสวนนี้เสียเวลาทั้งบ่าย
มีข้อยกเว้นหนึ่งที่ควรจำ curl ยอมรับ http_proxy เฉพาะตัวพิมพ์เล็กเท่านั้น ส่วนตัวพิมพ์ใหญ่ HTTP_PROXY จะถูกเพิกเฉย นั่นคือเหตุผลที่สภาพแวดล้อมเดียวกันทำงานต่างกันในเครื่องมืออื่น
อ่านค่าเหล่านี้เป็นความลับ เพราะ URL ของพร็อกซีมักมีข้อมูลรับรอง
จากนั้นตรวจสอบไฟล์กำหนดค่าเริ่มต้นของ curl ว่ามีการแทนที่พร็อกซีหรือการเชื่อมต่อหรือไม่ และยืนยันว่าคุณกำลังรันไฟล์ปฏิบัติการใดจริง ๆ นามแฝงของเชลล์ ฟังก์ชัน หรือสคริปต์ห่ออาจเพิ่มตัวเลือกที่ไม่เคยปรากฏบนบรรทัดคำสั่งของคุณ
เปรียบเทียบการเรียกสามแบบโดยเปิด TLS
ใช้ปลายทางการวินิจฉัยที่ได้รับอนุมัติหนึ่งแห่งและไบนารีเดียวกันสำหรับทั้งสามครั้ง
curl -v https://service.corp.example/status
curl -q -v https://service.corp.example/status
curl -q --proxy '' -v https://service.corp.example/status
-q ระงับ curlrc ค่าเริ่มต้น และต้องเป็นพารามิเตอร์แรกของบรรทัดจึงจะทำงานได้ มันไม่ได้ลบตัวแปรสภาพแวดล้อมของพร็อกซี ซึ่งทำให้ผู้ที่คาดหวังเช่นนั้นประหลาดใจ รูปแบบที่สามเพิ่มค่า --proxy ว่าง เพื่อแทนที่พร็อกซีที่สภาพแวดล้อมร้องขอเฉพาะการเรียกนั้น เปรียบเทียบความพยายามเชื่อมต่อครั้งแรกในแต่ละเอาต์พุต ไม่ใช่รหัสสถานะสุดท้าย
เอาต์พุตแบบละเอียดอาจเปิดเผยส่วนหัว โทเคน และข้อมูลรับรองของพร็อกซี ดังนั้นเก็บไว้ในเครื่องและอ่านบางส่วนก่อนแชร์
แต่ละผลลัพธ์ตัดอะไรออก
หากการข้ามการกำหนดค่าเริ่มต้นเปลี่ยนการเชื่อมต่อ ไฟล์กำหนดค่าคือต้นเหตุ หากการปิดพร็อกซีที่สืบทอดมาอย่างชัดเจนเปลี่ยนสิ่งนั้น ตัวแปรสภาพแวดล้อมคือต้นเหตุ หากทั้งสองไม่เปลี่ยนและ localhost ยังปรากฏ ให้ดูการแทนที่การเชื่อมต่อในบรรทัดคำสั่ง การแปลงชื่อโฮสต์ และไฟล์ปฏิบัติการที่เลือก แต่ละอย่างมีการแก้ไขต่างกัน และไม่มีอย่างใดเป็นการเปลี่ยนแปลงเส้นทาง
การโหลดไลบรารีที่กำหนดเองหรือพฤติกรรมเครือข่ายที่ถูกแทรกเป็นชั้นถัดไป และตัวแปรสภาพแวดล้อมเพียงอย่างเดียวไม่ใช่หลักฐานของสิ่งนั้น
แยกการตัดสินใจเรื่องพร็อกซีออกจาก VPN
เมื่อ curl เลือกปลายทางโดยตรง ระบบปฏิบัติการยังคงกำหนดเส้นทางการเชื่อมต่อนั้น การปิดพร็อกซีของแอปพลิเคชันไม่ได้ปิดเส้นทางของ VPN หรือนโยบายการกรองของมัน ทำการเปรียบเทียบการเข้าถึงโดยตรงเฉพาะที่การวินิจฉัยนั้นได้รับอนุญาต การทดสอบที่เลี่ยงนโยบายอย่างเงียบ ๆ ไม่ใช่ผลลัพธ์ที่ถูกต้อง แต่เป็นเหตุการณ์
หากจำเป็นต้องใช้พร็อกซีภายในเครื่อง ให้คืนค่าบริการและที่อยู่แทนการลบการตั้งค่าของมัน
หากมีเพียงปลายทางส่วนตัวที่เลือกไว้เท่านั้นที่ต้องการการเข้าถึงโดยตรง ให้เพิ่มข้อยกเว้นแคบ ๆ ที่ได้รับอนุมัติและเก็บพร็อกซีไว้สำหรับอย่างอื่น เก็บข้อผิดพลาดแรกจากเส้นทางที่เลือกไว้ เพราะการปฏิเสธ localhost การปฏิเสธ CONNECT ของพร็อกซี ความล้มเหลวของใบรับรอง และข้อผิดพลาดการอนุญาตบ่งชี้ถึงสี่ขั้นตอนที่แตกต่างกัน