คุณจะแก้ไขเชน SSL ที่ไม่สมบูรณ์ได้อย่างไร


29

ฉันมีใบรับรอง Go Daddy SSL ติดตั้งอยู่และทำงานได้ดีในทุกที่ยกเว้น Android

https://www.ssllabs.com/ssltest/analyze.html กล่าวว่า chain นั้นไม่สมบูรณ์และฉันอ่านในstack overflowที่ว่า SSL chain ในลำดับที่ไม่ถูกต้องจะล้มเหลวบน Android

แต่ฉันจะวางมันได้อย่างไร? บนเซิร์ฟเวอร์ของฉัน? ต้องรับรอง SSL ด้วยตนเองหรือไม่ ย้ายสิ่งต่าง ๆ บน FTP หรือไม่

คำตอบ:


19

ติดตามคำตอบของ zakjan ฉันมีปัญหาเมื่อฉันพยายามใช้ jquery เพื่อทำคำขอ AJAX บนเซิร์ฟเวอร์ที่ปลอดภัยใหม่ของฉันใน webview android มันทำงานได้ในเบราว์เซอร์ แต่ไม่ใช่ในแอพของฉัน

ฉันใช้เว็บไซต์นี้: https://certificatechain.io/

ฉันได้วางข้อความของไฟล์. crt ที่ฉันได้รับจาก Comodo (positiveSSL) และมันทำให้ฉันได้รับการต่อยอดของทุกสิ่งที่ฉันต้องการ ฉันบันทึกเป็นโดเมน + "chain.crt" (ดูด้านล่าง)

จากนั้นใน apache configs ของฉันฉันป้อนสิ่งนี้สำหรับโฮสต์เสมือนนั้น:

SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/example_com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/example.com.key
SSLCACertificateFile /etc/ssl/localcerts/example.com.chain.crt

หลังจากนั้นเว็บวิวของแอป Android ของฉันไม่มีปัญหาในการใช้ ajax เพื่อ POST ไปยังเซิร์ฟเวอร์ ฉันลองใช้อุปกรณ์จริง 2 เครื่องตัวหนึ่งทำงาน 2.3.4 ตัวหนึ่งทำงาน 4. บางอย่าง และบนโปรแกรมจำลองการทำงาน 2.3 ทำงานทั้งหมด

ฉันหวังว่านี่จะช่วยได้.


1
กุญแจสำคัญสำหรับฉันคือการเพิ่มSSLCACertificateFileคำสั่งและชี้ไปที่ไฟล์ CA สิทธิ์ของฉันให้ฉัน มันจะไม่ทำงานหากฉันต่อเอกสารอื่น ๆ เข้ากับไฟล์ใบรับรองของฉัน
Alex W

ใน apaches รุ่นเก่า SSLCertificateChainFile สามารถใช้แทน SSLCACertificateFile (ในกรณีที่คุณค้นหาคีย์นี้ในการกำหนดค่าของคุณและไม่สามารถหาได้)
dr0i

อย่างไม่น่าเชื่อ แต่ตอบ @ Richard ใช้เว็บไซต์certificatechain.ioและเว็บไซต์กล่าวว่า "... แรงบันดาลใจจากใบรับรองโซ่จำแนกโดยแจนแซค" ที่ตอบคำถามนี้ที่นี่: superuser.com/a/866523/92500 , ขอบคุณ @zakjan!
Andres Morales

SSLCACertificateFileเป็นเส้นฉันพลาด ตอนแรกฉันคิดว่า CA ของฉันนั้นใหม่เกินไปเพราะ SSL ทำงานเมื่อร้องขอจากเบราว์เซอร์ / ระบบปฏิบัติการบางตัว แต่ไม่ใช่ของอื่น การใช้decoder.link/sslcheckerช่วยชี้แจงว่าการกำหนดค่าของฉันผิดและคำตอบนี้มีการแก้ไข ขอขอบคุณ!!
josephdpurcell

9

ห่วงโซ่อยู่ในไฟล์ crt ซึ่ง SSL ดั้งเดิมทำงานได้

สำหรับ GoDaddy มีใบรับรองฉบับที่ 2 - gd_bundle.crt

คัดลอกข้อมูลนี้และเพิ่มลงใน crt ที่ติดตั้งบนเซิร์ฟเวอร์

ดังนั้น crt ดั้งเดิมบนเซิร์ฟเวอร์จึงมี 1 ใบรับรองและหลังจากนั้นจะมี 3 ไฟล์ในไฟล์เดียวกัน นี่คือห่วงโซ่

ฉันยังคงมีปัญหาสมอในโซ่ใน ssllabs.com แต่นี่ไม่ใช่ปัญหาเพียงตัวเลือกที่จะออกหรือออก - ตาม - https://security.stackexchange.com/questions/24561/ssltest-chain-issues -contains ยึด / 24566 # 24566


2
เพื่อกำจัดปัญหาลูกโซ่ให้ลบใบรับรองล่าสุดออกจาก gd_bundle.crt
sanmai

7

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

คุณควรจะสามารถดึงใบรับรองระดับกลางจากผู้ออกใบรับรองและต่อกันด้วยตัวคุณเอง Btw ฉันได้เขียนสคริปต์เพื่อทำให้ขั้นตอนอัตโนมัตินั้นต้องใช้ใบรับรองเพื่อสร้างผลลัพธ์ของใบรับรองที่ถูกผูกมัดอย่างถูกต้อง https://github.com/zakjan/cert-chain-resolver


ดูเหมือนว่าโซลูชันที่ "หลอก" เครื่องในท้องถิ่นให้คิดว่าใบรับรองตั้งค่าไว้อย่างถูกต้อง
Alex W

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