Score:0

openssl s_client แสดง CONNECT_CR_SRVR_HELLO เฉพาะเมื่อระบุตัวเลือก -servername

ธง tr

ฉันมีการตั้งค่าเซิร์ฟเวอร์ centOS7 ที่เปิดใช้งาน HTTPS ด้วย GitLab/nginx โดยมีบันทึก A ที่ลงทะเบียนบน DNS ที่ชำระเงินและใบรับรองที่ตรวจสอบโดย Let's Encrypt (ฉันจะใช้ gitlab.example.com ที่นี่) ชื่อโดเมนได้รับการทดสอบว่าสามารถเข้าถึงได้ผ่าน ssh และ HTTP ธรรมดาเป็นอย่างน้อย

ด้วย HTTPS ฉันสามารถเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ IP โดยตรงเช่น https://x.x.x.x . แม้ว่าข้อผิดพลาดของใบรับรองที่ไม่ปลอดภัยจะปรากฏขึ้น (เนื่องจากชื่อโดเมนไม่ตรงกัน) หากฉันเลือกที่จะดำเนินการต่อแม้จะมีคำเตือน หน้า gitlab จะแสดงอย่างถูกต้อง

อย่างไรก็ตามหากฉันพยายามเข้าถึงโดยใช้ https://gitlab.example.com ข้อผิดพลาด ERR_SSL_PROTOCOL_ERROR จะปรากฏขึ้น

ฉันได้ลองใช้ openssl s_client เพื่อแก้ปัญหาและได้ผลลัพธ์ดังต่อไปนี้

openssl s_client -เชื่อมต่อ gitlab.example.com:443 -ชื่อเซิร์ฟเวอร์ gitlab.example.com

เชื่อมต่อแล้ว(00000003)
4658671212:ข้อผิดพลาด:1400410B:รูทีน SSL:CONNECT_CR_SRVR_HELLO:หมายเลขเวอร์ชันไม่ถูกต้อง:/AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.120.1/libressl-2.8/ssl/ssl_pkt.c: 386:
---
ไม่มีใบรับรองเพื่อน
---
ไม่มีการส่งชื่อ CA ของใบรับรองไคลเอ็นต์
---
SSL handshake อ่าน 5 ไบต์และเขียน 0 ไบต์
---
ใหม่ (ไม่มี) รหัสคือ (ไม่มี)
ไม่สนับสนุนการเจรจาใหม่ที่ปลอดภัย
การบีบอัด: ไม่มี
การขยายตัว: ไม่มี
ไม่มีการเจรจา ALPN
เซสชัน SSL:
    โปรโตคอล : TLSv1.2
    รหัส : 0000
    รหัสเซสชัน: 
    เซสชัน-ID-ctx: 
    กุญแจหลัก: 
    เวลาเริ่มต้น: 1641487269
    หมดเวลา : 7200 (วินาที)
    ตรวจสอบรหัสส่งคืน: 0 (ตกลง)
---


น่าสนใจ ถ้าฉันไม่รวม -ชื่อเซิร์ฟเวอร์ ตัวเลือก จะไม่มีข้อผิดพลาดและจะได้รับใบรับรองอย่างถูกต้อง การใช้ IP โดยตรงกับพอร์ต 443 จะได้รับใบรับรองอย่างถูกต้องเช่นกัน

ฉันพยายาม google ข้อผิดพลาดเป็นเวลาหลายชั่วโมง แต่ไม่ประสบความสำเร็จ

ฉันลองใช้ curl เพื่อเข้าถึงและได้รับข้อผิดพลาดเดียวกัน (ดูเหมือนว่าข้อมูลนี้มีประโยชน์น้อยกว่าผลลัพธ์ของ openssl s_client ยกเว้นข้อมูลที่ชื่อโดเมนถูกแมปกับที่อยู่ IP อย่างถูกต้อง)

curl --insecure -Lv https://gitlab.example.com
* พยายาม x.x.x.x...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับ gitlab.example.com (x.x.x.x) พอร์ต 443 (#0)
* ALPN ให้บริการ h2
* ALPN ให้บริการ http/1.1
* ตั้งค่าตำแหน่งการตรวจสอบใบรับรองสำเร็จแล้ว:
* ไฟล์ CA: /etc/ssl/cert.pem
  CApath: ไม่มี
* TLSv1.2 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* ข้อผิดพลาด:1400410B:รูทีน SSL:CONNECT_CR_SRVR_HELLO:หมายเลขเวอร์ชันไม่ถูกต้อง
* ปิดการเชื่อมต่อ 0
ขด: (35) ข้อผิดพลาด:1400410B:รูทีน SSL:CONNECT_CR_SRVR_HELLO:หมายเลขเวอร์ชันไม่ถูกต้อง

ไม่มีอะไรปรากฏในบันทึกของ Gitlab และฉันคิดว่าคำขอนั้นไม่ได้มาไกลเกินกว่าขั้นตอนการจับมือกันของ SSL

ฉันติดอยู่ที่จุดนี้ ความช่วยเหลือหรือคำแนะนำใด ๆ เกี่ยวกับวิธีดำเนินการกับปัญหานี้จะได้รับการชื่นชม

Patrick Mevzek avatar
cn flag
คุณดูไฟล์บันทึกของเว็บเซิร์ฟเวอร์ของคุณ (ไม่ใช่แอปพลิเคชัน Gitlab เซิร์ฟเวอร์ที่ตอบรับที่พอร์ต 443) หรือไม่ คุณยังสามารถเพิ่ม `--verbose` เพื่อม้วนงอเพื่อให้มีรายละเอียดการจับมือทั้งหมด คุณใช้ openssl เวอร์ชันใด อาจเป็นปัญหา TLS 1.0 vs 1.1 vs 1.2 vs 1.3 โปรดดูตัวเลือก `s_client` ของ `-tls1_2` เป็นต้น
cr001 avatar
tr flag
เท่าที่ฉันเข้าใจ บันทึกของ Gitlab มีทุกอย่าง รวมถึงเซิร์ฟเวอร์ nginx นอกจากนี้ "v" ในตัวเลือก -Lv สำหรับ curl ของฉันยังเป็นชวเลขของตัวเลือก --verbose

โพสต์คำตอบ

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