รหัสข้อผิดพลาด PHP cURL 60


85

ในขณะพยายามตั้งค่าสภาพแวดล้อม php บน windows (โดยใช้ wamp) เพื่อใช้ Amazon PHP SDK เมื่อฉันพยายามเรียกใช้การทดสอบตัวอย่างฉันได้รับข้อผิดพลาดต่อไปนี้:

Fatal error: Uncaught exception 'cURL_Exception' with message 'cURL resource: Resource id #10; cURL error: SSL certificate problem: unable to get local issuer certificate (cURL error code 60). See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.' in C:\wamp\www\AWSSDKforPHP\lib\requestcore\requestcore.class.php on line 848

ฉันได้เพิ่มบรรทัดต่อไปนี้ใน php.ini แล้ว

curl.cainfo = C:\Windows\ca-bundle.crt

ซึ่งเป็นที่ตั้งของใบรับรองที่ฉันสร้างโดยใช้สคริปต์ VBS นี้ VBS-Script

ฉันได้เริ่มบริการ WAMP ใหม่แล้วด้วย

การอ้างอิงดัชนี PHP curl


6
ในกรณีที่คุณไม่สนใจกระบวนการรับรองคุณสามารถปิดใช้งานได้ทั้งหมด curl_setopt($rest, CURLOPT_SSL_VERIFYPEER, false);
denispyr

สิ่งนี้ช่วยแก้ปัญหาให้ฉันได้ - stackoverflow.com/a/32095378/178163โดยทั่วไปอาจมี 2 ไฟล์ php.ini
George Kagan

3
สำหรับผู้ที่พบปัญหานี้เป็นครั้งแรกเช่นเดียวกับฉันเหตุผลเบื้องหลังสิ่งนี้เท่าที่ฉันเข้าใจ (แก้ไขฉันถ้าฉันผิด) ไม่เหมือนกับสถานการณ์ของการเชื่อมต่อ HTTPS ผ่านเบราว์เซอร์คำขอ CURL ไม่ได้รับใบรับรองจากเซิร์ฟเวอร์ ดังนั้นเราจำเป็นต้องดาวน์โหลดใบรับรองของไซต์ด้วยตนเองและเพิ่มลงใน PHP ini การตรวจสอบใบรับรองในตอนท้ายของไคลเอ็นต์นี้เป็นส่วนหนึ่งของกระบวนการเชื่อมต่อ HTTPS และดูเหมือนว่าสามารถข้ามได้ นี่คือที่curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);มาของภาพ
Sandeepan Nath

ทำงานเป็นสเน่ห์ !!!! ขอบคุณ!
Rodrigo Serzedello

คำตอบ:


226

ใช้ชุดใบรับรองหลักของใบรับรองนี้:

https://curl.haxx.se/ca/cacert.pem

คัดลอกชุดใบรับรองนี้บนดิสก์ของคุณ และใช้สิ่งนี้บนphp.ini

curl.cainfo = "path_to_cert\cacert.pem"

10
และในกรณีนี้ไม่สามารถแก้ปัญหาได้? ฉันจะตั้งค่าcurl_setopt($ch, CURLOPT_CAINFO, ini_get('curl.cainfo'));และในphp.ini [cURL] curl.cainfo = C:\dev\xampp\php\cacert.pemมีไฟล์อยู่ แต่ฉันยังคงได้รับข้อผิดพลาด 60 มีบางอย่างที่ฉันขาดหายไป?
ล้น

3
@Overflowh มีสองประเภทphp.ini: หนึ่งสำหรับ php-cli วินาทีสำหรับ php-web (apache, nginx, ... ) คุณต้องตั้งค่าcurl.cainfo = "path_to_cert\cacert.pem"สำหรับเว็บหนึ่ง ในทางกลับกันหากคุณเห็นว่าcurl.cainfoเป็นจริงในมุมมองข้อมูล php ของคุณเวลานั้นอาจมีปัญหาการอนุญาต
Hüseyin BABAL

ที่จริงฉันไม่เห็นcurl.cainfoในข้อมูล php ของฉัน นี่หมายความว่าฉันใส่ค่าในไฟล์ผิดหรือเปล่า?
ล้น

1
ใช่โปรดตรวจสอบตำแหน่งไฟล์ php.ini ของคุณอีกครั้ง คุณต้องใส่ในเวอร์ชันเว็บ
Hüseyin BABAL

ฉันได้เพิ่มใน apache php.ini แล้ว แต่ไม่ได้ผล
kasim badami

31

ฉันแก้ไขสิ่งนี้โดยการแก้ไขphp.iniไฟล์ที่C:\wamp\bin\apache\apache2.4.9\bin\

curl.cainfo = "C:/wamp/bin/php/php5.5.12/cacert.pem"

ก่อนอื่นฉันพยายามแก้ไขphp.iniไฟล์ที่C:\wamp\bin\php\php5.5.12\และไม่ได้ผล

หวังว่านี่จะช่วยคนที่กำลังค้นหาสิทธิ์php.iniในการแก้ไข


1
ขอบคุณ. สิ่งที่ต้องทำคือดาวน์โหลดไฟล์จากcurl.haxx.se/ca/cacert.pemและกำหนดเส้นทางไปยังไฟล์นั้นในไฟล์ apache php.ini อย่างที่คุณพูด โปรดระวังผู้คนคุณสามารถวาง cacert ได้ทุกที่ที่คุณต้องการเพียงแค่ตรวจสอบให้แน่ใจว่าคุณใส่เส้นทางอย่างถูกต้อง นอกจากนี้อย่าลืมลบอัฒภาค!
Dan Zuzevich

1
อย่าลืมโหลด apache ใหม่หลังจากนี้
hcker2000

17
php --ini

สิ่งนี้จะบอกคุณได้อย่างชัดเจนว่าไฟล์ php.ini ใดกำลังโหลดดังนั้นคุณจะรู้ว่าต้องแก้ไขไฟล์ใด ฉันเสียเวลามากในการเปลี่ยนไฟล์ php.ini ที่ไม่ถูกต้องเนื่องจากฉันติดตั้ง WAMP และ XAMPP

นอกจากนี้อย่าลืมรีสตาร์ทเซิร์ฟเวอร์ WAMP (หรืออะไรก็ตามที่คุณใช้) หลังจากเปลี่ยน php.ini


1
ประหยัดชีวิต! 3 วันในการแก้ไขปัญหาและสิ่งนี้กลายเป็นปัญหา
suo

13

@Overflowh ฉันลองคำตอบข้างต้นโดยไม่มีโชค ฉันเปลี่ยนเวอร์ชัน php จาก 5.3.24 เป็น 5.5.8 เนื่องจากการตั้งค่านี้จะใช้ได้เฉพาะใน php 5.3.7 ขึ้นไป จากนั้นฉันก็พบhttp://flwebsites.biz/posts/how-fix-curl-error-60-ssl-issueฉันดาวน์โหลด cacert.pem จากที่นั่นและแทนที่ไฟล์ที่ฉันดาวน์โหลด / ทำจาก curl.hxxx.se เชื่อมโยงด้านบนและทุกอย่างเริ่มทำงาน ฉันพยายามรับ paypal sandbox IPN เพื่อตรวจสอบ ยินดีที่จะพูดหลังจากการแลกเปลี่ยน. pem ทั้งหมดใช้ได้โดยใช้การตั้งค่า curl.cainfo ใน php.ini ซึ่งยังไม่อยู่ใน 5.3.24


2
ฉันประสบปัญหาเดียวกันและได้รับการแก้ไขโดยเพียงดาวน์โหลดแบบฟอร์มไฟล์. pem ที่กล่าวถึงข้างต้น ขอบคุณ
saqibahmad

4
ฮ่า ๆ ไม่อยากจะเชื่อเลย! ฉันเป็นเจ้าของ FLWebsites.biz และฉันพบโพสต์นี้โดยไม่รู้ตัวว่ามีการกล่าวถึง ... ฉันเขียนบล็อกนั้น!
HTMLGuy

ฉันพยายามหาปัญหาและหลังจากนั้น 3-4 ชั่วโมงในที่สุดฉันก็พบคำตอบนี้ ฉันบอกว่าดีทำไมไม่ลองไฟล์ pem อื่นอีกครั้ง และแปลกใจ: ในที่สุดก็ใช้งานได้ ขอบคุณที่ค้นหาบล็อกนั้น :)
Sauleil

วิธีนี้ช่วยแก้ปัญหา cacert.pem ของฉันใน Windows 10, IIS ขอบคุณ.
jacouh

3
ขออภัยฉันลบไซต์ของฉันลง ไปที่แหล่งที่มาโดยตรง: curl.haxx.se/docs/caextract.html
HTMLGuy

8

@ Hüseyin BABAL

ฉันได้รับข้อผิดพลาดกับใบรับรองข้างต้น แต่ฉันลองใช้ใบรับรองนี้และใช้งานได้

https://gist.github.com/VersatilityWerks/5719158/download


ว้าว. มันบ้าไปแล้ว. ฉันกำลังมองหาวิธีตั้งค่า cacert.pem ทั่วโลกและเจอสิ่งนี้ ฉันเก่งกาจ คุณใช้ส่วนสำคัญของฉัน
HTMLGuy

5

ขั้นแรกเราต้องดาวน์โหลดชุดใบรับรองหลักของใบรับรองนี้:

https://curl.haxx.se/ca/cacert.pem

ย้ายไฟล์นี้ไปไว้ที่อื่นเช่นโฟลเดอร์ PHP ในโฟลเดอร์ Wamp / Xampp

จากนั้นแก้ไข "php.ini" ของคุณ:

curl.cainfo = "C: /path/to/your/cacert.pem"

และ

openssl.cafile = "C: /path/to/your/cacert.pem"

สำคัญ:

ตรวจสอบให้แน่ใจว่าคุณเปิดไฟล์ "php.ini" โดยตรงจาก Window Explorer ของคุณ (ในกรณีของฉัน:“ C: \ DevPrograms \ wamp64 \ bin \ php \ php5.6.25 \ php.ini”)

อย่าใช้ทางลัดไปยัง "php.ini" ในเมนูของไอคอน Wamp / Xampp ใน System Tray ทางลัดนี้ใช้ไม่ได้ในบางกรณีที่ฉันเผชิญ

หลังจากบันทึก "php.ini" แล้วคุณไม่จำเป็นต้อง "รีสตาร์ทบริการทั้งหมด" ในไอคอน Wamp หรือปิด / เปิด CMD อีกครั้ง

ลองใช้ "var_dump (openssl_get_cert_locations ());" แล้วดูที่บรรทัด: ["ini_cafile"] => string (40) "C: /path/to/your/cacert.pem"

เสร็จแล้ว


หมายเหตุของคุณเกี่ยวกับการเปิดไฟล์ php.ini ผ่าน explorer ใช้งานได้จริง! และในที่สุดฉันก็พบว่า php.ini จากไอคอน wamp มีเส้นทางที่แตกต่างออกไป ขอขอบคุณ!!!
Doctiger

4

วิธีแก้ปัญหาที่ง่ายที่สุดคือเพิ่มคำสั่งด้านล่างในฟิลด์

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);

การใช้สิ่งนี้จะไม่จำเป็นต้องเพิ่มใบรับรองหรือสิ่งใด ๆ


3

แก้ไขปัญหาให้ดาวน์โหลดhttps://curl.haxx.se/ca/cacert.pemและวางไว้ "ที่ใดที่หนึ่ง" จากนั้นเพิ่มบรรทัดนี้ในphp.ini:

curl.cainfo = "C:/somewhere/cacert.pem"

PS: ฉันได้รับข้อผิดพลาดนี้โดยพยายามติดตั้งโมดูลบน drupal ด้วย xampp


2

เพิ่มด้านล่างลงใน php.ini [ใช้ '/' แทน '\' ในเส้นทาง] curl.cainfo = "path / cacert.pem"

รีสตาร์ท XAMPP ของฉัน มันทำงานได้ดีสำหรับฉัน ขอบคุณ



1

ก่อนอื่นคุณต้องดาวน์โหลดใบรับรองจากลิงค์นี้

https://curl.haxx.se/ca/cacert.pem

และวางไว้ในตำแหน่งที่คุณต้องการชื่อของไฟล์ที่ดาวน์โหลดได้คือ: cacert.pem ดังนั้นในกรณีของฉันฉันจะวางไว้ใต้ C: \ wamp64 \ bin \ php \ cacert.pem

จากนั้นคุณต้องระบุตำแหน่งของไฟล์ php.ini

ตัวอย่างเช่นฉันใช้ php 7 ไฟล์ php.ini อยู่ที่: C: \ wamp64 \ bin \ php \ php7.0.10 \ php.ini

ดังนั้นการเข้าถึงไฟล์นั้นและไม่ได้รับคำสั่งบรรทัดนี้ openssl.cafile

นอกจากนี้ยังอัปเดตให้มีลักษณะเช่นนี้ openssl.cafile = "C: \ wamp64 \ bin \ php \ cacert.pem"

ในที่สุดรีสตาร์ทเซิร์ฟเวอร์ apache ของคุณและนั่นคือทั้งหมดที่


1

สิ่งสำคัญ : หลังจาก 4 ชั่วโมงทำงานกับ laravel 5.7 และ php 7. + และรัน / ใช้ php artison ให้บริการบน localhost ที่พยายามเชื่อมต่อกับ mailgun

สิ่งสำคัญในการแก้ไขปัญหาไม่ทำงานกับ ip http://127.0.0.1:8000 ใช้ localhost หรือตั้งชื่อโดเมนตามไฟล์โฮสต์

ตกลง ,


0

วิธีแก้ไขคือแก้ไขไฟล์ php.ini ที่อยู่ในเวอร์ชัน php ของคุณ (สำหรับฉันมันคือ php7.0.10) ไม่ใช่ php.ini ของ apache คุณจะพบไฟล์ที่แสดงความคิดเห็นเช่นนี้ curl.cainfo เพียงแค่เปลี่ยนบรรทัดนี้เช่นนี้ curl.cainfo = "C: \ permCertificate \ cacert.pem"

อย่าลืมสร้างไดเร็กทอรี "permCertificate" และคัดลอกไฟล์ "cacert.pem" ไว้ข้างใน


ทำงานให้ฉันใน Ampps ขอบคุณ
Alejandro Aranda

-1

เพียงเพื่อให้คุณรู้ว่าอะไรใช้ได้ผลสำหรับฉันไฟล์ที่https://curl.haxx.se/ca/cacert .... ไม่ทำงานอย่างไรก็ตามไฟล์ในโฟลเดอร์ zip ในโพสต์ที่ ( http: // flwebsites .biz / posts / how-fix-curl-error-60-ssl-issue ) ทำงานให้ฉันโดยไม่มีปัญหาเลย

อย่างที่คนอื่นบอกคัดลอกไฟล์ใบรับรองไปยังตำแหน่งบนฮาร์ดไดรฟ์ของคุณอัปเดตบรรทัด

;curl.cainfo 

ในไฟล์ php.ini ของคุณเพื่ออ่าน

curl.cainfo= "path_to_cert\cacert.pem"

รีสตาร์ทเซิร์ฟเวอร์ Apache ของคุณ


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