Curl: ปัญหาใบรับรอง SSL ตรวจสอบว่าใบรับรอง CA นั้นตกลง
  
  7 เมษายน 2549
  
  เมื่อเปิด URL ที่ปลอดภัยด้วย Curl คุณอาจได้รับข้อผิดพลาดดังต่อไปนี้:
  
  ปัญหาใบรับรอง SSL ตรวจสอบว่าใบรับรอง CA นั้นตกลง
  
  ฉันจะอธิบายว่าทำไมข้อผิดพลาดและสิ่งที่คุณควรทำเกี่ยวกับมัน
  
  วิธีที่ง่ายที่สุดในการกำจัดข้อผิดพลาดคือการเพิ่มสองบรรทัดต่อไปนี้ในสคริปต์ของคุณ วิธีการนี้ทำให้เกิดความเสี่ยงด้านความปลอดภัย
//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
  
  ลองดูว่าพารามิเตอร์สองตัวนี้ทำอะไร การอ้างอิงคู่มือ
  
  CURLOPT_SSL_VERIFYHOST : 1 เพื่อตรวจสอบการมีอยู่ของชื่อทั่วไปในใบรับรองเพียร์ SSL 2 เพื่อตรวจสอบการมีอยู่ของชื่อสามัญและตรวจสอบว่าตรงกับชื่อโฮสต์ที่ให้ไว้
  
  CURLOPT_SSL_VERIFYPEER : FALSE เพื่อหยุด CURL จากการตรวจสอบใบรับรองของเพื่อน สามารถระบุใบรับรองสำรองเพื่อตรวจสอบกับด้วยตัวเลือก CURLOPT_CAINFO หรือสามารถระบุไดเรกทอรีใบรับรองด้วยตัวเลือก CURLOPT_CAPATH CURLOPT_SSL_VERIFYHOST อาจต้องเป็น TRUE หรือ FALSE หาก CURLOPT_SSL_VERIFYPEER ถูกปิดใช้งาน (ค่าเริ่มต้นคือ 2) การตั้งค่า CURLOPT_SSL_VERIFYHOST เป็น 2 (นี่คือค่าเริ่มต้น) จะรับประกันว่าใบรับรองที่นำเสนอให้คุณมี 'ชื่อสามัญ' ที่ตรงกับ URN ที่คุณใช้ในการเข้าถึงทรัพยากรระยะไกล นี่เป็นการตรวจสุขภาพ แต่ไม่รับประกันว่าโปรแกรมของคุณจะไม่ได้รับการถอดรหัส
  
  ป้อน 'คนที่อยู่ตรงกลาง'
  
  โปรแกรมของคุณอาจทำให้เข้าใจผิดในการพูดคุยกับเซิร์ฟเวอร์อื่นแทน สิ่งนี้สามารถทำได้ผ่านกลไกต่าง ๆ เช่น dns หรือ arp พิษ (นี่คือเรื่องราวของอีกวัน) ผู้บุกรุกสามารถลงนามในใบรับรองด้วยตัวเองด้วยชื่อ 'comon' ที่โปรแกรมของคุณคาดหวัง การสื่อสารจะยังคงถูกเข้ารหัส แต่คุณจะมอบความลับให้ผู้หลอกลวง การโจมตีแบบนี้เรียกว่า 'คนที่อยู่ตรงกลาง'
  
  เอาชนะ 'คนที่อยู่ตรงกลาง'
  
  เราต้องยืนยันว่าใบรับรองที่นำเสนอนั้นดีสำหรับของจริง เราทำสิ่งนี้โดยเปรียบเทียบกับใบรับรองที่เราเชื่อถือ * ที่เชื่อถือได้
  
  หากทรัพยากรระยะไกลได้รับการคุ้มครองโดยใบรับรองที่ออกโดยหนึ่งใน CA หลักเช่น Verisign, GeoTrust และคณะคุณสามารถเปรียบเทียบกับชุดใบรับรอง CA ของ Mozilla ได้อย่างปลอดภัยซึ่งคุณสามารถรับได้จาก
   http://curl.haxx.se/docs/caextract .html
  
  บันทึกไฟล์cacert.pemไว้ในเซิร์ฟเวอร์ของคุณและตั้งค่าตัวเลือกต่อไปนี้ในสคริปต์ของคุณ
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");