ความแตกต่างระหว่าง SSLCertificateFile และ SSLCertificateChainFile?


35

โดยปกติแล้วกับโฮสต์เสมือน ssl จะถูกตั้งค่าด้วยคำสั่งต่อไปนี้:

Listen 443 

SSLCertificateFile /home/web/certs/domain1.public.crt
SSLCertificateKeyFile /home/web/certs/domain1.private.key
SSLCertificateChainFile /home/web/certs/domain1.intermediate.crt

จาก: สำหรับการเปิดใช้งาน SSL สำหรับโดเมนเดียวบนเซิร์ฟเวอร์ที่มี muliple vhosts การกำหนดค่านี้จะใช้งานได้หรือไม่

ความแตกต่างระหว่างSSLCertificateFileและSSLCertificateChainFileคืออะไร? ลูกค้าซื้อคีย์ CA จาก GoDaddy ดูเหมือนว่า GoDaddy เพียง แต่ให้SSLCertificateFile(ไฟล์ .crt) และ SSLCertificateKeyFile (ไฟล์ .key) SSLCertificateChainFileและไม่ได้อยู่ที่

ssl ของฉันจะยังคงทำงานโดยไม่SSLCertificateChainFileระบุพา ธ หรือไม่

นอกจากนี้ยังมีเส้นทางแบบบัญญัติซึ่งควรจะวางไฟล์เหล่านี้หรือไม่


1
มากที่สุดสถานที่ที่ฉันเห็นคนใส่ไฟล์ใบรับรองอยู่ใน/etc/ssl, /usr/local/etc/sslหรือในsslที่เฉพาะเจาะจงไดเรกทอรีย่อยไปยังเว็บไซต์ (เช่น/home/www/example.com/dataมีเว็บไซต์แล้วhome/www/example.com/sslมีใบรับรอง) ที่
Chris S

คำตอบ:


48

พูดอย่างเคร่งครัดคุณไม่จำเป็นต้องใช้เชนเพื่อให้ SSL ทำงาน

สิ่งที่คุณมักจะต้องเป็นผู้SSLCertificateFileที่มีSSLCertificateKeyFileที่มีคีย์ที่ถูกต้องสำหรับการรับรองว่า

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

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

นั่นคือสิ่งที่ห่วงโซ่เข้ามา; มันช่วยให้ Apache แสดงให้ลูกค้าเห็นว่าสัมพันธภาพที่เชื่อถือได้มีลักษณะอย่างไรซึ่งสามารถช่วยให้ลูกค้ากรอกข้อมูลในช่องว่างระหว่างใบรับรองของคุณรูทที่พวกเขาไว้วางใจและสื่อกลางที่พวกเขาไม่ทราบ โซ่สามารถรวมอยู่ในการกำหนดค่าของคุณด้วยหนึ่งในสองวิธี:

  • ฝังอยู่ในไฟล์เดียวกับที่คุณตั้งไว้สำหรับSSLCertificateFileบรรทัดใหม่หลังจากใบรับรองเซิร์ฟเวอร์ตามลำดับ (รูทควรอยู่ด้านล่าง) หากคุณตั้งขึ้นเช่นนี้คุณจะต้องชี้ไปยังแฟ้มเดียวกันกับSSLCertificateChainFileSSLCertificateFile
  • ในไฟล์แยกต่างหากกำหนดค่าในSSLCertificateChainFileคำสั่ง; ใบรับรอง CA ที่ออกใบรับรองของเซิร์ฟเวอร์ควรเป็นอันดับแรกในไฟล์ตามด้วยรากอื่น ๆ

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


2
ฉันคิดว่า "ปกติแล้วใช้งานได้ดี" ไม่ได้ใช้กับ GoDaddy certs อีกต่อไปหากไม่ได้รวมสื่อขั้นกลางไว้ ฉันไม่แน่ใจด้วยซ้ำว่ามันจะใช้กับคนอย่าง Verisign และ Thawte อีกหรือไม่เพราะพวกเขาย้ายเพื่อทำให้ไซต์ดูห่างจากฐานที่รวมอยู่ในเบราว์เซอร์มากขึ้น ฉันคิดว่ามันจะทำให้การเพิกถอนง่ายขึ้นเพราะมันง่ายกว่าที่จะฆ่าคนกลาง
cjc

"ฝังอยู่ใน SSLCertificateFile": ฉันหวังว่ามันจะใช้งานได้ แต่ดูเหมือนจะไม่ได้และไม่ได้กล่าวถึงในเอกสาร SSLCertificateChainFileห่วงโซ่ของคุณจะต้องมีการวางใน
Steve Kehlet

@SteveKehlet คุณพูดถูกแล้วว่ามันไม่ใช่เอกสาร แต่ฉันเคยประสบความสำเร็จมาแล้วในอดีต - คุณจัดรูปแบบไฟล์ all-in-one ได้อย่างไร?
เชนแมดเดน

1
@SteveKehlet ที่จริงแล้วคุณพูดถูกฉันจำผิด วิธีที่ฉันตั้งค่าไฟล์เดียวให้มีทั้งคู่SSLCertificateFileและSSLCertificateChainFileชี้ไปที่ไฟล์รวมเดียวกันซึ่งใช้งานได้ - แก้ไขคำตอบของฉันเพื่อแก้ไข
เชนแมดเดน

@ShaneMadden สวย! มันได้ผล! ขอบคุณมากที่คิดออก
Steve Kehlet


4

ที่จริงแล้ว GoDaddy ให้โซ่ระหว่างคุณ:

http://support.godaddy.com/help/5238

นี่คือการอภิปรายเพิ่มเติม

http://support.godaddy.com/help/868/what-is-an-intermediate-certificate

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

ในแง่ของสิ่งที่จะเกิดขึ้นหากคุณไม่ได้รวมคำสั่ง SSLCertificateChainFile ที่ถูกต้อง: คุณจะเห็นคำเตือนสีแดงขนาดใหญ่ในเบราว์เซอร์ของคุณเนื่องจากไซต์ SSL ของคุณจะไม่ตรวจสอบในเบราว์เซอร์เนื่องจากพวกเขาไม่สามารถปฏิบัติตามใบรับรอง ใบรับรองให้กับผู้มีสิทธิ์ออกใบรับรองที่เบราว์เซอร์รู้


2

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

ทดสอบการสั่งซื้อด้วย gnutls-cli เช่น

gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p https wwwsec.cs.uu.nl

โดยที่ /etc/ssl/certs/ca-certificates.crt เป็นที่ตั้งที่ distro ของคุณวางใบรับรองรวมไว้

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