Score:0

ข้อผิดพลาด Curl "ไม่รู้จักผู้ออกใบรับรองของเพียร์" เมื่อพยายามสื่อสารระหว่างสองเซิร์ฟเวอร์

ธง ca

ฉันมีสองเซิร์ฟเวอร์ และ ที่โฮสต์เว็บไซต์ที่ทำงานได้ดีในเบราว์เซอร์ที่มี https ไอคอนแม่กุญแจในเบราว์เซอร์แสดงใบรับรอง SSL ที่ใช้งานและเชื่อถือได้

ฉันพยายามเรียกใช้ curl เพื่อให้เซิร์ฟเวอร์นั้น สามารถพูดคุยกับเซิร์ฟเวอร์ แต่ฉันพบข้อผิดพลาด

- เซิร์ฟเวอร์ A -
$ curl https://dev.partsvu.com
ไฟล์ CA: /etc/pki/tls/certs/ca-bundle.crt
curl: (60) ไม่รู้จักผู้ออกใบรับรองของเพียร์

ฉันได้ทำการวิจัยเกี่ยวกับไซต์ Stack Overflow และพบคำถามมากมาย อย่างไรก็ตาม วิธีแก้ปัญหาของพวกเขาไม่ได้ผลสำหรับฉัน

ฉันลองดาวน์โหลดไฟล์ใบรับรองสำหรับเซิร์ฟเวอร์ก่อน จากรายงาน SSL Labs และเพิ่มรายการใบรับรองด้วยตนเองไปยัง /etc/pki/tls/certs/ca-bundle.crt ไฟล์บนเซิร์ฟเวอร์ แต่ฉันยังคงได้รับข้อผิดพลาดเดิม

ฉันยังมั่นใจว่าเซิร์ฟเวอร์ ใบรับรองถูกต้องดังต่อไปนี้:

- เซิร์ฟเวอร์ B -
opensl x509 - วันที่ -noout < /etc/pki/tls/certs/cloudflare.pem
notBefore=6 พฤษภาคม 21:25:00 น. 2565 GMT
notAfter=2 พฤษภาคม 21:25:00 น. 2037 GMT

ฉันได้ลองคัดลอกเนื้อหาของ /etc/pki/tls/certs/cloudflare.pem บนเซิร์ฟเวอร์ โดยตรงกับ /etc/pki/tls/certs/ca-bundle.crt บนเซิร์ฟเวอร์ แต่ข้อผิดพลาดเดียวกัน

สุดท้ายนี้ ฉันลองเข้าไปที่เซิร์ฟเวอร์ ใน Chrome และดาวน์โหลดไฟล์ crt ที่แสดงไว้ที่ https://cacerts.digicert.com/CloudflareIncECCCA-3.crtแปลงเป็น pem ด้วย:

opensl x509 - แจ้ง DES - ใน CloudflareIncECCCA-3.crt - ออก outcert.pem

และเพิ่มให้เหมือนกัน ca-bundle.crt ไฟล์บนเซิร์ฟเวอร์ .

ข้อผิดพลาดเดียวกันเมื่อพยายามเรียกใช้ curl

นี่คือห่วงโซ่ใบรับรองจาก Chrome:

ป้อนคำอธิบายรูปภาพที่นี่

Binky avatar
de flag
คำสั่ง `$ curl https://.com` เป็นปัญหา "ที่อยู่เซิร์ฟเวอร์ B" เป็นที่อยู่ IP หรือป้ายกำกับ DNS ภายใต้ ".com" หรือไม่ โปรดโพสต์คำสั่งและข้อผิดพลาดที่เกิดขึ้นจริง หากนั่นคือที่อยู่ IP คำสั่งจะล้มเหลวเนื่องจากเซิร์ฟเวอร์ต้องการข้อมูลเกี่ยวกับใบรับรองที่จะส่ง โดยพิจารณาจากส่วนของ URL ที่อยู่หลังแบบแผน ("https://") และก่อนจุดเริ่มต้นของเส้นทาง (" /"). ข้อมูลประจำตัวของใบรับรองโดยปกติจะเป็นชื่อ DNS ไม่ใช่ที่อยู่ IP โปรดโพสต์ใบรับรองของเซิร์ฟเวอร์ B ในรูปแบบ PEM พร้อมภาพหน้าจอของใบรับรองที่แสดงโดยเบราว์เซอร์เมื่อเรียกดูเซิร์ฟเวอร์ B
Binky avatar
de flag
นอกจากนี้ เมื่อคุณพูดว่า "ฉันรับรองด้วยว่าใบรับรองเซิร์ฟเวอร์ B นั้นถูกต้อง.." วันที่มีผลบังคับใช้แสดงว่านี่ไม่ใช่ใบรับรองเซิร์ฟเวอร์ เว้นแต่คุณจะออกใบรับรองจาก PKI ส่วนตัวแทนที่จะใช้ผู้ออกใบรับรองสาธารณะ ใบรับรองเซิร์ฟเวอร์จาก CA สาธารณะไม่สามารถใช้ได้นานกว่าหนึ่งปี ดังนั้นคุณจึงมี 1) ใบรับรองที่ไม่ถูกต้องในไฟล์นั้น หรือ 2) ใบรับรองหลายใบ และวันที่ notBefore/After น่าจะเป็นของใบรับรองหลัก
dave_thompson_085 avatar
jp flag
ทำ `curl -V` (ตัวพิมพ์ใหญ่) เพื่อดูว่าตัวกลางที่ curl ของคุณใช้อยู่; คุณอาจพบว่าเป็น NSS (ไม่ใช่ OpenSSL) ซึ่งหมายความว่าไม่ได้ใช้ /etc/pki/tls/certs/ca-bundle.crt (_or_ ca-bundle.trust.crt) นั่นเป็นเหตุผลที่ RH/CentOS/etc มี `update-ca-trust` เป็น _correctly_ อัปเดต truststores หลายแห่ง แทนที่จะให้ผู้ใช้ที่ไม่รู้พยายามดำเนินการด้วยตนเอง โปรดทราบว่าการทำงานของเบราว์เซอร์ไม่ได้พิสูจน์ว่าเซิร์ฟเวอร์ของคุณไม่เป็นไร เพราะโดยปกติแล้วเบราว์เซอร์สามารถแก้ไข chain certs ที่ขาดหายไปได้ ในขณะที่ `curl` มักจะทำไม่ได้ แต่ถ้าคุณมีปัญหานั้น SSLLabs ก็จะพูดเช่นนั้น
Timothy Fisher avatar
ca flag
@Binky ฉันได้อัปเดตด้วยคำสั่งพร้อมชื่อโดเมนจริงและภาพหน้าจอ cert chain และใช่ คุณพูดถูกว่าใบรับรองสำหรับวันหมดอายุเป็นใบรับรองหลัก ไม่ใช่ใบรับรองที่แสดงในเบราว์เซอร์ เรากำลังใช้ Cloudflare มีใบรับรอง Edge ใน Cloudflare และอีกอันที่ HAProxy ใช้เพื่อผูกกับพอร์ต 443
in flag
คุณใช้ CentOS เวอร์ชันใด แพ็คเกจที่ติดตั้งเป็นปัจจุบันหรือไม่?
Timothy Fisher avatar
ca flag
@dave_thompson_085 ฉันคิดว่าคุณพูดถูกเกี่ยวกับ NSSเมื่อฉันรันด้วย `-V` ฉันจะได้รับ `curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.53.1 zlib/1.2.7 libidn/1.28 libssh2/1.8.0` และการรัน `-v` แสดงว่า `* กำลังเริ่มต้น NSS ด้วย certpath: sql:/etc/pki/nssdb`
Timothy Fisher avatar
ca flag
@GeraldSchneider CentOS Linux รีลีส 7.9.2009 (คอร์) ฉันได้ตรวจสอบให้แน่ใจว่าแพ็คเกจใบรับรอง ca เป็นปัจจุบัน
in flag
ในสต็อก CentOS 7.9 ฉันสามารถเชื่อมต่อกับ `https://dev.partsvu.com` ด้วย curl ได้โดยไม่มีปัญหา
Timothy Fisher avatar
ca flag
@GeraldSchneider ฉันก็ทำได้เช่นกันเมื่อฉันใช้ curl บนเครื่องของฉัน แต่เมื่อฉันลองจากเซิร์ฟเวอร์เฉพาะ ฉันได้รับข้อผิดพลาดที่ไม่รู้จัก สงสัยว่าฉันสามารถเริ่มแก้ไขปัญหานี้ได้ที่ไหน
in flag
คุณได้ลองเรียกใช้ 'yum reinstall ca-certificates' แล้วหรือยัง
Timothy Fisher avatar
ca flag
ใช่ ฉันเรียกใช้และทำตามสิ่งนี้เพื่อพยายามทำให้สิ่งต่างๆ กลับสู่สถานะเริ่มต้น: https://access.redhat.com/solutions/1549003
in flag
นี่มันค่อนข้างไร้ผล โดยที่ไม่มีทางรู้ว่าคุณทำอะไรจริง ๆ และระบบของคุณอยู่ในสถานะใด ไม่มีทางที่จะช่วยคุณได้จริง ๆ หากเซิร์ฟเวอร์ของฉันอยู่ในสถานะนี้ ฉันจะติดตั้งใหม่
Binky avatar
de flag
@TimothyFisher คุณสามารถโพสต์ผลลัพธ์ของคำสั่ง: 1) sudo ls -l /etc/pki/nssdb และ 2) sudo certutil -L -d sql:/etc/pki/nssdb ? หลังอาจมีจำนวนมากออก; ถ้าใช่ ให้ไพพ์เอาต์พุตไปที่ grep แล้วค้นหา "Baltimore CyberTrust Root"

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา