ข้อผิดพลาด SSL: ไม่สามารถรับใบรับรองผู้ออกในพื้นที่


95

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

การกำหนดค่า

เซิร์ฟเวอร์กำลังทำงานโดยใช้ nginx มีการกำหนดค่าดังนี้:

ssl_certificate           /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key       /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               HIGH:!aNULL:!MD5;
ssl_verify_depth          2;

ฉันผูกใบรับรองโดยใช้วิธีการที่อธิบายไว้ที่นี่

cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt

mysite.ca.crtใบรับรองที่มอบให้ฉันโดยผู้มีอำนาจลงนามอยู่ที่ไหนและbundle.crtเป็นใบรับรอง CA ที่ส่งถึงฉันโดยผู้มีอำนาจเซ็น ปัญหาคือฉันไม่ได้ซื้อใบรับรอง SSL โดยตรงจาก GlobalSign แต่ผ่านทาง Singlehop ผู้ให้บริการโฮสติ้งแทน

การทดสอบ

ใบรับรองได้รับการตรวจสอบอย่างถูกต้องบน Safari และ Chrome แต่ไม่ใช่บน Firefox การค้นหาเบื้องต้นพบว่าอาจเป็นปัญหากับ CA

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

ผมใช้ s_client OpenSSL เพื่อทดสอบการเชื่อมต่อและการส่งออกที่ได้รับซึ่งดูเหมือนว่าจะบ่งบอกถึงปัญหาเช่นเดียวกับคำถามที่คล้ายกัน ข้อผิดพลาดมีดังนี้:

depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1

รายละเอียดเต็มรูปแบบของการตอบสนองของ OpenSSL (พร้อมใบรับรองและข้อมูลที่ไม่จำเป็นตัดทอน) สามารถพบได้ที่นี่

ฉันยังเห็นคำเตือน:

No client certificate CA names sent

เป็นไปได้ไหมว่านี่คือปัญหา ฉันจะแน่ใจได้อย่างไรว่า nginx ส่งชื่อ CA เหล่านี้

ความพยายามในการแก้ไขปัญหา

ฉันพยายามแก้ไขปัญหาโดยดาวน์โหลด root CA โดยตรงจาก GlobalSign แต่ได้รับข้อผิดพลาดเดียวกัน ฉันอัปเดต root CA บนเซิร์ฟเวอร์ Debian โดยใช้update-ca-certificatesคำสั่ง แต่ไม่มีอะไรเปลี่ยนแปลง อาจเป็นเพราะ CA ที่ส่งมาจากผู้ให้บริการของฉันถูกต้องจึงทำให้ใบรับรองถูกล่ามโซ่สองครั้งซึ่งไม่ได้ช่วยอะไร

0 s:/OU=Domain Control Validated/CN=*.mysite.ca
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

ขั้นตอนถัดไป

โปรดแจ้งให้เราทราบหากมีสิ่งใดที่ฉันสามารถลองได้หรือหากฉันมีการกำหนดค่าทั้งหมดไม่ถูกต้อง


10
AlphaSSL CA - SHA256 - G2ใบรับรองโดเมนของคุณมีการลงนามโดยผู้ออก AlphaSSL CA - G2แต่ห่วงโซ่ของซัพพลายกลาง ฉันเชื่อว่าคุณต้องลบใบรับรองระดับกลางปัจจุบัน ( AlphaSSL CA - G2) และแทนที่ด้วยลายนิ้วมือae:bf:32:c3:c8:32:c7:d7...( AlphaSSL CA - SHA256 - G2) นอกจากนี้คุณไม่GlobalSign Root CAจำเป็นต้องส่ง ลูกค้าต้องรูทความไว้วางใจของพวกเขา (หรือในระดับกลาง)
jww

6
คุณจะสามารถทดสอบสิ่งนี้ในเครื่องด้วย OpenSSL ลองopenssl s_client -connect <server>:<port> -CAfile <GlobalSign Root CA.pem>. คำสั่งควรกรอกVerify OK (0)หรือคล้ายกัน เมื่อคุณได้รับVerify OK (0)เซิร์ฟเวอร์จะได้รับการกำหนดค่าอย่างเหมาะสม (สำหรับปัญหานี้)
jww

6
openssl x509 -in gsalphasha2g2.crt -inform DER -out Alpha-SHA256-G2.pem -outform PEMเมื่อคุณดาวน์โหลดที่กลางใหม่ที่คุณจะต้องแปลงเป็นพีอีเอ็มกับ
jww

สวย. ฉันเชื่อว่ามันใช้งานได้แล้ว ด้วยเหตุผลบางอย่างฉันคิดว่าฉันพยายามรับ SHA 256 แต่ฉันต้องแปลงไม่ถูกต้อง ขอขอบคุณอย่างจริงใจ
Jamie Counsell

1
ใช่สิ่งที่ต้องค้นหาคือคู่ของ Subject-Issuer ที่เดินกลับไปที่รูทหรือ CA แสดง OpenSSL พวกเขาเป็นi:และภายใต้s: s_clientเมื่อคุณมีใบรับรองที่ต้องการแล้วให้เชื่อมต่อทั้งหมดยกเว้นรูท เนื่องจากมีการต่อกันจึงต้องอยู่ในรูปแบบ PEM URL มีประโยชน์ s_clientมันได้รับเก่าพยายามที่จะช่วยเหลือคนที่จะไม่ให้ข้อมูลเพื่อให้เราสามารถมองไปที่มันมีในท้องถิ่น (หากคุณไม่ได้ระบุ URL ฉันจะปิดโหวต)
jww

คำตอบ:


48

jww ถูกต้อง - คุณกำลังอ้างถึงใบรับรองกลางที่ไม่ถูกต้อง

เนื่องจากคุณได้รับใบรับรอง SHA256 คุณจะต้องมีเอกสารกลาง SHA256 คุณสามารถคว้าได้จากที่นี่: http://secure2.alphassl.com/cacert/gsalphasha2g2r1.crt


-3

หากคุณเป็นโหนดการอัปเดตผู้ใช้ linux เป็นเวอร์ชันที่ใหม่กว่าโดยการเรียกใช้

sudo apt update

 sudo apt install build-essential checkinstall libssl-dev

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash

nvm --version

nvm ls

nvm ls-remote

nvm install [version.number]

สิ่งนี้จะช่วยแก้ปัญหาของคุณได้

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