Ubuntu 10.04 / CURL: ฉันจะแก้ไข / อัพเดต CA Bundle ได้อย่างไร


17

ฉันเพิ่งอัพเกรดเซิร์ฟเวอร์ของเราจาก 8.04 เป็น 10.04 และซอฟต์แวร์ทั้งหมดพร้อมกับมัน

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

ข้อผิดพลาดที่แท้จริงคือ:

ข้อผิดพลาด CURL: ปัญหาใบรับรอง SSL ตรวจสอบว่าใบรับรอง CA นั้นตกลง
รายละเอียด: ข้อผิดพลาด: 14090086: รูทีน SSL: SSL3_GET_SERVER_CERTIFICATE:
การตรวจสอบใบรับรองล้มเหลว 

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

มีวิธีแก้ไขปัญหา CA ของ CURL ทั่วทั้งเซิร์ฟเวอร์เพื่อให้รหัสแอปพลิเคชันที่มีอยู่ทั้งหมดทำงานเหมือนที่ไม่จำเป็นต้องแก้ไขหรือไม่?

คำตอบ:


17

ฉันเคยมีปัญหาเดียวกันและหลังจาก poking ประมาณเล็กน้อยพบว่าคุณสามารถดาวน์โหลดแพ็คเกจ CA-certs พร้อมสำหรับการขดบนอูบุนตูโดยตรงจากเว็บไซต์ dev curl

cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem

ตอนนี้ curl ใช้ชุดบันเดิลที่ทันสมัยที่สุดและคุณก็พร้อมที่จะไป


1
หลังจากนั้นฉันต้องอัปเดตด้วย: update-ca-certificate -f
Grain

9

พบปัญหาที่คล้ายกันกับUbuntu 12.04 ที่กำลังใช้งาน curl จากบรรทัดคำสั่งเพื่อรับเครื่องมือบรรทัดคำสั่ง aws ซึ่งอยู่ใน GitHub ฉันพบว่าฉันวิ่งบรรทัดคำสั่งเป็นเช่นนี้:

curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt

มันจะทำงาน แต่พยายามตั้งค่าตัวแปรสภาพแวดล้อม CURL_CA_BUNDLE ดังนั้นฉันสามารถหลีกเลี่ยงอาร์กิวเมนต์ "cacert" จะไม่ทำงาน การอัปเดตใบรับรองในที่สุดดูเหมือนจะแก้ไขปัญหาได้:

sudo update-ca-certificates

ในฐานะที่เป็นบันทึกด้านข้าง ณ จุดหนึ่งฉันปรับปรุง ca-certs จาก curl.haxx.se ซึ่งไม่ได้แก้ปัญหา แต่อาจเกี่ยวข้อง ( sudo wget http://curl.haxx.se/ca/cacert.pemเรียกใช้จาก/etc/ssl/certs)


ลิงก์ 404 สำหรับฉัน งานนี้: curl.haxx.se/ca/cacert.pem
dave1010

2
อืมมม ดูเหมือนว่าหลบเพื่อดึงไฟล์ที่มี certs เช่นนั้นไม่เกิน HTTPS
Matthew Schinckel

5

โดยทั่วไปซอฟต์แวร์ที่ไม่ได้มีการดำเนินงานที่ไม่ซ้ำกันและจะรวบรวมกับ OpenSSL จะอ้างอิงทั้งระบบ CA-bundle.crt /usr/share/ssl/certsมักจะอยู่ใน

ตำแหน่งอาจแตกต่างกันใน Ubuntu แต่แพ็คเกจ OpenSSL ควรมีไฟล์ ca-bundle

CURL มีตัวเลือกมากมายเพื่อระบุวิธีการตรวจสอบใบรับรอง

  • CURL_CA_BUNDLEตัวแปรสภาพแวดล้อมสำหรับสถานที่ตั้งของแฟ้ม CA-มัด
  • --capathช่วยให้คุณระบุไดเรกทอรีที่มีใบรับรอง CA อยู่ (แทนที่CURL_CA_BUNDLE)
  • --cacert อนุญาตให้คุณระบุไฟล์ใบรับรอง CA

บนเซิร์ฟเวอร์ CentOS ของฉันฉันสามารถเรียกใช้สิ่งต่อไปนี้เพื่อระบุเส้นทาง ca-bundle ที่ CURL ใช้:

$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt

1
ติดตั้ง Open SSL แล้ว ฉันมีไฟล์ "ca-certificate.crt" ใน / etc / ssl / certs / ที่ดูเหมือนว่ามีหลาย ๆ ใบรับรองที่ต่อกัน แต่ฉันเดาว่า CURL ไม่เห็นหรือไม่ CURL มีการตั้งค่าการกำหนดค่าสำหรับ CA-Bundle หรือไม่
Nick

คุณแน่ใจหรือว่าไม่ใช่ประเภทของใบรับรองที่พยายามตรวจสอบ เทคโนโลยีใบรับรองที่ใหม่กว่าเช่น Extended Verification certs มักจะต้องมีการอัพเดท ca-bundle เนื่องจาก root certs ค่อนข้างใหม่ ตรวจสอบการแก้ไขที่จะเกิดขึ้นของฉันด้วย
Warner

ดูเหมือนว่า curl-config จะไม่ใช่คำสั่งที่ถูกต้องบน Ubuntu ฉันจะตั้งค่า CURL_CA_BUNDLE ได้อย่างไร
Nick

ดูเหมือนว่าเป็นส่วนหนึ่งของlibcurl3-openssl-devแพคเกจจากการค้นหาทางอินเทอร์เน็ตอย่างรวดเร็ว CURL_CA_BUNDLEเป็นเพียงตัวแปรสภาพแวดล้อม CURL_CA_BUNDLE=/path/to/fileในทุบตี
Warner

เอาล่ะแพ็คเกจถูกติดตั้งแล้ว แต่ "curl-config --ca" จะสร้างบรรทัดว่าง ฉันลองตั้งค่าตัวแปรโดยใช้ 'CURL_CA_BUNDLE = "/ etc / ssl / certs / ca-certificate.crt"' แต่ "curl-config --ca" ยังคงสร้างบรรทัดว่างหลังจากนั้น
Nick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.