วิธีแก้ไข curl: (60) ใบรับรอง SSL: เชนใบรับรองไม่ถูกต้องเมื่อใช้ sudo


12

ดังนั้นเนื่องจาก Curve การอัพเกรด Mavericks มีปัญหาเกี่ยวกับใบรับรองเพิ่มเติม

เมื่อพยายามม้วนไฟล์จากเว็บเซิร์ฟเวอร์ของฉันด้วยใบรับรองที่ลงนามเองมันได้รับข้อผิดพลาด "ใบรับรอง SSL: ห่วงโซ่ใบรับรองไม่ถูกต้อง"

นี้ได้รับการแก้ไขโดยการเพิ่มใบรับรองไปยังพวงกุญแจระบบของฉันและการตั้งค่าให้อนุญาตให้ SSL ข้อมูลผมพบว่าที่นี่และที่นี่

มันทำงานได้ดีและเมื่อฉันม้วนไฟล์มันก็ดาวน์โหลดได้อย่างถูกต้อง

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

ฉันเดาว่ารูทอาจไม่อ่านจากพวงกุญแจของระบบ?

ไม่มีใครรู้วิธีแก้ไขปัญหานี้หรือไม่?

คำตอบ:


17

ถ้าคุณเก็บใบรับรอง CA ไว้ในระบบไฟล์ (ในรูปแบบ PEM) คุณสามารถบอกให้ curl ใช้กับมันได้

sudo curl --cacert /path/to/cacert.pem ...

นอกจากนี้คุณยังสามารถปิดการตรวจสอบใบรับรองด้วย

sudo curl --insecure ...

แก้ไข: อัปเดตเกี่ยวกับข้อเสนอแนะ

หากคุณต้องการตั้งค่านี้อย่างถาวรคุณควรสร้าง.curlrcไฟล์และวางไว้ในไดเรกทอรีบ้านของคุณ sudoคำสั่งอาจต้องใช้ไฟล์นี้ใน/var/rootไฟล์ใช้ตัวเลือกเดียวกันกับบรรทัดคำสั่ง แต่ไม่มีขีดกลาง หนึ่งตัวเลือกต่อบรรทัด:

cacert=/path/to/my/certs.pem

ขอบคุณสำหรับคำตอบของคุณสคริปต์ที่กำลังทำงานกับ sudo นั้นมาจากบุคคลที่สามดังนั้นฉันจึงไม่สามารถแก้ไขคำสั่ง curl ได้ ไม่ปลอดภัยไม่ใช่ตัวเลือกจริงๆ สามารถทำได้ทั่วโลกหรือไม่
Jacob Tomlinson

คุณสามารถสร้างไฟล์. curlrc และเก็บไว้ในโฟลเดอร์โฮมของคุณได้แม้ว่าการใช้ sudo อาจต้องเป็น /var/root/.curlrc ไฟล์ควรมีตัวเลือกโดยไม่มีเครื่องหมายขีดคั่นหนึ่งตัวต่อบรรทัด ดังนั้น "cacert = / path / to / my / certs.pem"
Dan

1
+1 สำหรับการตั้งค่าการrootจัดจำหน่ายแทน.curlrc --insecureซึ่งตรงตามที่บอกไว้ - สำหรับผู้โจมตีในตำแหน่งเครือข่ายให้ทำเช่นนั้นมันจะเป็นเรื่องเล็กน้อยสำหรับ MITM และการฉีดโค้ด
zigg

ขอบคุณสำหรับสิ่งนี้ฟังดูเหมือนสิ่งที่ฉันกำลังมองหา ฉันจะลองในวันพรุ่งนี้และให้รางวัลถ้ามันใช้ได้
Jacob Tomlinson

6

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

คุณสามารถทำเครื่องหมายใบรับรองว่าเชื่อถือได้สำหรับผู้ใช้ปัจจุบันของคุณเป็น

$ security add-trusted-cert /path/to/cert.pem

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

$ sudo security add-trusted-cert /path/to/cert.pem

หรือใช้การ-dตั้งค่าสถานะเพื่อเพิ่มลงในการตั้งค่าความน่าเชื่อถือของผู้ดูแลระบบ:

$ security add-trusted-cert -d /path/to/cert.pem

(OS X จะปรากฏกล่องโต้ตอบรหัสผ่านเพื่อยืนยันอันนี้)

sudo curlของทั้งสองหลังดูเหมือนว่าจะเพียงพอสำหรับการ

การอ้างอิง: https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html


อย่างที่ฉันบอกไปแล้วในคำถามที่ฉันได้เพิ่มพวกเขาไปยังระบบพวงกุญแจเช่นเดียวกับพวงกุญแจเข้าสู่ระบบแล้ว
Jacob Tomlinson

คุณลองสิ่งที่ฉันแนะนำจริง ๆ หรือไม่? ฉันทดสอบในสถานการณ์ที่คุณอธิบายและใช้งานได้จริง ฉันไม่ชัดเจนเกี่ยวกับรายละเอียดทั้งหมด - เอกสารนั้นคลุมเครือ - แต่คุณควรรู้ว่าการตั้งค่าความน่าเชื่อถือของใบรับรองนั้นไม่ได้มีความหมายเหมือนกันเพียงแค่เพิ่มใบรับรองให้กับพวงกุญแจและการตั้งค่าความน่าเชื่อถือของใบรับรองของผู้ดูแลระบบ การตั้งค่าผู้ใช้ / พวงกุญแจ (ดูเหมือนว่าจะเป็นชุดการตั้งค่าผู้ใช้เฉพาะผู้ใช้รูทในการผสมผสาน) ฉันได้แก้ไขคำตอบของฉันให้ชัดเจนขึ้นในจุดนี้ โปรดลองวิธีนี้
Wes Campaigne

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

5

นี่เป็นคำใบ้จริงๆ:

echo insecure >> ~/.curlrc

ข้อดีของการใช้โซลูชันข้างต้นคือใช้งานได้กับทุกcurlคำสั่ง แต่ไม่แนะนำเนื่องจากอาจแนะนำการโจมตี MITMด้วยการเชื่อมต่อกับโฮสต์ที่ไม่ปลอดภัยและไม่น่าเชื่อถือ


2

หากคุณใช้ MacPorts (และสคริปต์ของบุคคลที่สามที่คุณกล่าวถึงไม่ได้ลบออก$PATHหรือโทรออก/usr/bin/curl) คุณสามารถติดตั้งcertsyncและcurlพอร์ตตามลำดับนี้

certsyncเป็นเครื่องมือและโปรแกรมเรียกใช้งานที่สอดคล้องกันซึ่งจะส่งออกพวงกุญแจระบบของคุณไปยัง$prefix/etc/openssl/cert.pemและติดตั้ง symlink $prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pemดังนั้น MacPorts curl จะรับใบรับรองโดยอัตโนมัติ certsyncจะอัปเดตไฟล์ที่สร้างโดยอัตโนมัติเมื่อคุณเปลี่ยนพวงกุญแจระบบของคุณ


ขอบคุณสำหรับสิ่งนี้ฉันต้องการหลีกเลี่ยงการใช้ MacPorts ถ้าเป็นไปได้
Jacob Tomlinson


-1

เพื่อให้การsudo curlทำงาน (บน OSX Sierra) เราต้องนำเข้าใบรับรองSystem.keychainและเชื่อถือได้ที่นั่น สิ่งนี้สามารถทำได้ด้วยตนเองในแอพ Keychain หรือใช้คำสั่งนี้:

sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem

สิ่งสำคัญคือต้องระบุ-dและตั้งค่าพา ธ ไปยัง System keychain ผ่านด้วยตนเอง-kเพื่อให้แน่ใจว่าใบรับรองได้รับการนำเข้าจริงที่นั่นหากยังไม่ได้

คำสั่งใช้งานไม่sudoได้ แต่จากนั้นจะถามรหัสผ่านผ่านกล่องโต้ตอบ UI ซึ่งอาจเป็นอุปสรรคสำหรับสคริปต์


ฉันได้รับข้อผิดพลาดSecCertificateCreateFromData: Unknown format in import.
rraallvv

ใครก็ตามที่ลงคะแนนโปรดทราบว่าฉันเขียน "บน OSX Sierra" อย่างชัดเจนและนี่เป็นวิธีแก้ปัญหาที่ใช้งานได้สำหรับเรา ถ้ามันไม่ทำงานใน OSX เวอร์ชั่นใหม่กว่านั้นอาจเป็นเพราะการรองรับ OSX หรือเครื่องมือมีการเปลี่ยนแปลง หรือปัญหาเช่นผู้แสดงความคิดเห็นก่อนหน้าซึ่งไฟล์อินพุตไม่ได้อยู่ในรูปแบบที่รองรับ (คำถามไม่ได้ระบุไว้)
Alexander Klimetschek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.