จะอัปเดต cURL CA ใน RedHat ได้อย่างไร


38

ฉันพบปัญหาที่กลุ่ม CA ที่รวมมากับรุ่น cURL ของฉันล้าสมัยแล้ว

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

การอ่านเอกสารไม่ได้ช่วยฉันเพราะฉันไม่เข้าใจว่าฉันต้องทำอะไรหรือทำอะไร ฉันใช้ RedHat และจำเป็นต้องอัปเดตชุดข้อมูล CA ฉันต้องทำอะไรเพื่ออัปเดตแพ็คเกจ CA บน RedHat

คำตอบ:


50

สำหรับ RHEL 6 หรือใหม่กว่าคุณควรใช้update-ca-trustตามที่ lzap อธิบายไว้ในคำตอบของเขาด้านล่าง

--- สำหรับ Fedora, CentOS รุ่นเก่า, Redhat:

Curl กำลังใช้บันเดิล CA เริ่มต้นของระบบถูกเก็บไว้ใน /etc/pki/tls/certs/ca-bundle.crt ก่อนที่คุณจะเปลี่ยนแปลงให้ทำสำเนาของไฟล์นั้นเพื่อให้คุณสามารถกู้คืนค่าเริ่มต้นระบบได้หากคุณต้องการ คุณสามารถต่อท้ายใบรับรอง CA ใหม่ลงในไฟล์นั้นหรือคุณสามารถแทนที่บันเดิลทั้งหมด

คุณยังสงสัยว่าจะรับใบรับรองได้ที่ไหน ฉัน (และคนอื่น ๆ ) แนะนำ curl.haxx.se/ca ในหนึ่งบรรทัด:

curl https://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt

Fedora Core 2 /usr/share/ssl/certs/ca-bundle.crtสถานที่คือ


ดี แต่ฉันจะแน่ใจได้อย่างไรว่าใบรับรองที่ฉันเพิ่มจะไม่สูญหายไปในการอัปเดตครั้งต่อไปของ ca-bundle.crt มีสถานที่ที่ฉันสามารถวางใหม่ที่จะรวมโดยอัตโนมัติหรือไม่?
Andrew Schulman

ตั้งแต่ปี 2006 การอัปเกรด openssl ไม่ควรแทนที่ไฟล์ ca-bundle.crt (ดูrhn.redhat.com/errata/RHSA-2006-0661.html ) อย่างไรก็ตามหากคุณติดตั้งแพคเกจอื่นเช่นแพ็คเกจ ca-certificate ที่แนะนำโดย @mgorven ฉันคาดว่ามันจะถูกเขียนทับด้วยตนเอง
Nada

36

วิธีที่แนะนำในการทำเช่นนั้นในระบบ RHEL 6+ คือการใช้เครื่องมือupdate-ca-trustซึ่งตอนนี้จะถูกติดตั้งโดยค่าเริ่มต้น

# cat /etc/pki/ca-trust/source/README 
This directory /etc/pki/ca-trust/source/ contains CA certificates and 
trust settings in the PEM file format. The trust settings found here will be
interpreted with a high priority - higher than the ones found in 
/usr/share/pki/ca-trust-source/.

=============================================================================
QUICK HELP: To add a certificate in the simple PEM or DER file formats to the
            list of CAs trusted on the system:

            Copy it to the
                    /etc/pki/ca-trust/source/anchors/
            subdirectory, and run the
                    update-ca-trust
            command.

            If your certificate is in the extended BEGIN TRUSTED file format,
            then place it into the main source/ directory instead.
=============================================================================

Please refer to the update-ca-trust(8) manual page for additional information

ดังนั้นคุณจะต้องวางไฟล์ crt ของคุณไปที่/etc/pki/ca-trust/source/anchors/และเพื่อเรียกใช้เครื่องมือ ทำงานเสร็จแล้ว สิ่งนี้ปลอดภัยที่จะทำคุณไม่จำเป็นต้องสำรองข้อมูลใด ๆ สามารถดูคู่มือแบบเต็มได้ที่นี่: https://www.mankier.com/8/update-ca-trust


สวัสดีมันเหมาะกับคุณไหม ฉันพยายามติดตามสถานการณ์จากaccess.redhat.com/solutions/1549003และมันไม่ได้ผลสำหรับฉัน
เคอร์บี้

6

RHEL มอบใบรับรอง Mozilla CA เป็นส่วนหนึ่งของca-certificatesแพ็คเกจ (ติดตั้งด้วยyumถ้ายังไม่ได้ติดตั้ง) หากต้องการบอกให้ cURL ใช้สิ่งเหล่านี้ให้ใช้--cacertพารามิเตอร์ดังนี้

curl --cacert /etc/ssl/certs/ca-bundle.crt https://google.com/

ฉันพยายามyum install ca-certificatesแล้วได้No package ca-certificates available
แอนดรู

1
RHEL6 มีแพ็คเกจนี้ ฉันเดาว่าคุณใช้เวอร์ชั่นที่เก่ากว่า น่าเสียดายที่รายการไม่ได้เปลี่ยนไปตั้งแต่ปี 2010 ขอขอบคุณที่แจ้งให้เราทราบถึงสิ่งที่เกิดขึ้นอีกครั้ง
Dan Pritts

ฉันใช้ RHEL7 กับ AWS EC2 ฉันเพิ่งอัพเกรดแพ็คเกจเป็นca-certificates.noarch 0:2014.1.98-70.0.el7_0- มันไม่ได้แก้ปัญหาของฉันอย่างน่าเสียดาย แต่แค่คิดว่าฉันจะเพิ่มข้อมูลนี้
DuffJ

6

อาจขึ้นอยู่กับรุ่นของ Redhat คุณสามารถค้นหาแพ็คเกจที่อัพเดตไฟล์โดยทำดังนี้:

rpm -qf /etc/pki/tls/certs/ca-bundle.crt

ผลลัพธ์ของฉันแสดงว่าopenssl-0.9.8e-12.el5จำเป็นต้องได้รับการอัปเดต

หากไม่มีใบรับรองที่อัปเดตในการแจกจ่ายของคุณคุณต้องอัปเดตด้วยตนเองตามคำตอบของ Nada


6

ตั้งแต่ความคิดเห็นของ Dan Pritts Red Hat ได้ทำการอัพเดตบันเดิลใบรับรองสำหรับ RHEL ที่สนับสนุนออกบ่อยกว่า คุณสามารถเห็นสิ่งนี้ได้อย่างง่ายดายในการเปลี่ยนแปลงแพ็คเกจ ใบรับรองของ RHEL 6 ได้รับการอัปเดตสองครั้งในปี 2013 และสองครั้งในปี 2014

RHEL ทั้งหมดและ / clone / distros ที่เกี่ยวข้องจัดเตรียมไฟล์บันเดิลที่/etc/pki/tls/certs/ca-bundle.crtและไฟล์เดียวกันที่/etc/pki/tls/cert.pem(ใน distros ที่เก่ากว่าcert.pemคือ symlink ไปca-bundle.crt; บน distros ที่ใหม่กว่าทั้งสองเป็น symlink ไปยังไฟล์ที่ส่งออกโดยupdate-ca-trust)

ใน RHEL 6 และใหม่กว่านั้นบันเดิลเป็นส่วนหนึ่งของแพ็คเกจ 'ใบรับรอง ca' ใน RHEL 5 และก่อนหน้านั้นเป็นส่วนหนึ่งของแพ็คเกจ 'openssl'

ใน RHEL 6 พร้อมอัปเดตhttps://rhn.redhat.com/errata/RHEA-2013-1596.htmlและ RHEL รุ่นใหม่ใด ๆ ระบบ 'ใบรับรองระบบที่ใช้ร่วมกัน' จะพร้อมใช้งาน (คุณต้องเรียกใช้update-ca-trust enableเพื่อเปิดใช้งาน) และดีที่สุด วิธีการที่ได้รับจาก lzap ข้อดีของระบบนี้คือทำงานได้กับแอพพลิเคชั่นที่ใช้ NSS และ GnuTLS รวมถึงแอพพลิเคชั่นที่ใช้ OpenSSL /etc/pki/ca-trust/source/blacklist/โปรดทราบว่าคุณยังสามารถไว้วางใจใบรับรองโดยวางไว้ในไดเรกทอรี

ใน RHEL 5 ขึ้นไป (และ RHEL 6 หากคุณไม่ต้องการใช้ระบบใหม่) คุณสามารถเชื่อถือ CA เพิ่มเติมได้โดยการวางไฟล์ใบรับรองที่จัดรูปแบบ PEM ด้วยส่วนขยาย.pemใน / etc / pki / tls / certs และเรียกใช้c_rehash(อาจต้องการyum install /usr/bin/c_rehash) สิ่งนี้จะใช้ได้กับซอฟต์แวร์ที่ใช้ร้านค้าที่เชื่อถือได้เริ่มต้นของ OpenSSL เท่านั้น สิ่งนี้ดีกว่าการแก้ไขหรือแทนที่ไฟล์บันเดิลเพราะจะช่วยให้คุณได้รับการอัพเดตอย่างเป็นทางการในไฟล์บันเดิล

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


3

ฉันต้องทำสิ่งนี้ในกล่อง RHEL5 เก่า ฉันกด catch 22 ... curl จะปฏิเสธการดาวน์โหลด https เพราะใบรับรองในเครื่องเก่าเกินไปที่จะตรวจสอบ certs curl.haxx.se

ฉันใช้ตัวเลือก - ไม่ปลอดภัยของ curl เพื่อบังคับให้ดาวน์โหลด https (ใช่ฉันรู้ว่า ... มันคือ "ไม่ปลอดภัย")

curl https://curl.haxx.se/ca/cacert.pem --insecure -o /etc/pki/tls/certs/ca-bundle.crt


1

สำหรับRHEL 6ฉันสามารถแก้ไขได้โดยการอัปเดตและติดตั้งแพ็กเกจ CA certs ล่าสุดจาก Red Hat อีกครั้ง:

sudo yum update ca-certificates
sudo yum reinstall ca-certificates

(ในกรณีของฉันสิ่งนี้ก็เพียงพอแล้วที่จะทำให้ใบรับรองการลงนาม "Let's Encrypt Authority X3" ใหม่เชื่อถือได้)


คำสั่งใช้งานได้สำหรับฉัน (CentOS 6) แต่ไม่ได้แก้ปัญหาของฉัน (ด้วยใบรับรองที่ออกโดย "DigiCert SHA2 Secure Server CA")
rinogo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.