คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
ลักษณะปัญหา
การแฮนด์เชค TLS/SSL ล้มเหลวเกิดขึ้นเมื่อไคลเอ็นต์และเซิร์ฟเวอร์ไม่สามารถสร้างการสื่อสารโดยใช้โปรโตคอล TLS/SSL เมื่อข้อผิดพลาดนี้เกิดขึ้นใน Apigee Edge แอปพลิเคชันไคลเอ็นต์จะได้รับสถานะ HTTP 503 พร้อมข้อความบริการไม่พร้อมใช้งาน คุณจะเห็นข้อผิดพลาดนี้หลังจากการเรียก API ที่เกิดแฮนด์เชค TLS/SSL ไม่สำเร็จ
ข้อความแสดงข้อผิดพลาด
HTTP/1.1 503 Service Unavailable
คุณยังเห็นข้อความแสดงข้อผิดพลาดนี้ได้เมื่อแฮนด์เชค TLS/SSL ไม่สำเร็จ
Received fatal alert: handshake_failure
สาเหตุที่เป็นไปได้
TLS (Transport Layer Security ซึ่งมี SSL เป็นรุ่นก่อนหน้า) เป็นเทคโนโลยีความปลอดภัยมาตรฐานสำหรับ การสร้างลิงก์ที่เข้ารหัสระหว่างเว็บเซิร์ฟเวอร์กับเว็บไคลเอ็นต์ เช่น เบราว์เซอร์หรือแอป แฮนด์เชคคือกระบวนการที่ช่วยให้ไคลเอ็นต์และเซิร์ฟเวอร์ TLS/SSL สร้างชุดคีย์ลับ ที่ใช้ในการสื่อสารได้ ในระหว่างกระบวนการนี้ ไคลเอ็นต์และเซิร์ฟเวอร์จะทำสิ่งต่อไปนี้
- ตกลงเวอร์ชันของโปรโตคอลที่จะใช้
- เลือกอัลกอริทึมการเข้ารหัสที่จะใช้
- ตรวจสอบสิทธิ์ซึ่งกันและกันโดยการแลกเปลี่ยนและตรวจสอบใบรับรองดิจิทัล
หากแฮนด์เชค TLS/SSL สำเร็จ ไคลเอ็นต์และเซิร์ฟเวอร์ TLS/SSL จะโอนข้อมูลไปยังกันและกันอย่างปลอดภัย
มิฉะนั้น หากการแฮนด์เชค TLS/SSL ไม่สำเร็จ ระบบจะสิ้นสุดการเชื่อมต่อและไคลเอ็นต์จะได้รับ503 Service Unavailableข้อผิดพลาด
สาเหตุที่อาจทำให้แฮนด์เชค TLS/SSL ไม่สำเร็จมีดังนี้
| สาเหตุ | คำอธิบาย | ใครสามารถทำตามขั้นตอนการแก้ปัญหาได้บ้าง |
|---|---|---|
| โปรโตคอลไม่ตรงกัน | เซิร์ฟเวอร์ไม่รองรับโปรโตคอลที่ไคลเอ็นต์ใช้ | ผู้ใช้ Private Cloud และ Public Cloud |
| ชุดการเข้ารหัสไม่ตรงกัน | เซิร์ฟเวอร์ไม่รองรับชุดการเข้ารหัสที่ไคลเอ็นต์ใช้ | ผู้ใช้ Private Cloud และ Public Cloud |
| ใบรับรองไม่ถูกต้อง | ชื่อโฮสต์ใน URL ที่ไคลเอ็นต์ใช้ไม่ตรงกับชื่อโฮสต์ในใบรับรอง ที่จัดเก็บไว้ที่ฝั่งเซิร์ฟเวอร์ | ผู้ใช้ Private Cloud และ Public Cloud |
| มีการจัดเก็บกลุ่มใบรับรองที่ไม่สมบูรณ์หรือไม่ถูกต้องไว้ที่ฝั่งไคลเอ็นต์หรือเซิร์ฟเวอร์ | ผู้ใช้ Private Cloud และ Public Cloud | |
| ไคลเอ็นต์ส่งใบรับรองที่ไม่ถูกต้องหรือหมดอายุไปยังเซิร์ฟเวอร์ หรือเซิร์ฟเวอร์ส่งใบรับรองที่ไม่ถูกต้องหรือหมดอายุไปยังไคลเอ็นต์ | ผู้ใช้ Private Cloud และ Public Cloud | |
| เซิร์ฟเวอร์ที่เปิดใช้ SNI | เซิร์ฟเวอร์แบ็กเอนด์เปิดใช้การระบุชื่อเซิร์ฟเวอร์ (SNI) แต่ไคลเอ็นต์สื่อสารกับเซิร์ฟเวอร์ SNI ไม่ได้ | ผู้ใช้ Private Cloud เท่านั้น |
โปรโตคอล ไม่ตรงกัน
การแฮนด์เชค TLS/SSL ล้มเหลวจะเกิดขึ้นหากเซิร์ฟเวอร์ไม่รองรับโปรโตคอลที่ไคลเอ็นต์ใช้ในการเชื่อมต่อขาเข้า (Northbound) หรือขาออก (Southbound) ดูเพิ่มเติม ทำความเข้าใจการเชื่อมต่อขาเข้าและขาออก
การวินิจฉัย
- ตรวจสอบว่าข้อผิดพลาดเกิดขึ้นกับการเชื่อมต่อขาขึ้นหรือขาลง ดูคำแนะนำเพิ่มเติมเกี่ยวกับการพิจารณานี้ได้ที่ การระบุแหล่งที่มาของปัญหา
- เรียกใช้ยูทิลิตี
tcpdump เพื่อรวบรวมข้อมูลเพิ่มเติม
- หากเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
tcpdumpได้ที่ไคลเอ็นต์หรือเซิร์ฟเวอร์ที่เกี่ยวข้อง ไคลเอ็นต์อาจเป็นแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อที่มุ่งหน้าไปยังเซิร์ฟเวอร์) หรือตัวประมวลผลข้อความ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อที่มุ่งหน้าไปยังไคลเอ็นต์) เซิร์ฟเวอร์อาจเป็นเราเตอร์ Edge (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อขาขึ้น) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อขาลง) โดยขึ้นอยู่กับการพิจารณาจากขั้นตอนที่ 1 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ คุณจะรวบรวมข้อมูล
tcpdumpได้เฉพาะในแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อที่มุ่งหน้าไปยังเซิร์ฟเวอร์) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อที่มุ่งหน้าไปยังไคลเอ็นต์) เนื่องจากคุณไม่มีสิทธิ์เข้าถึง Edge Router หรือ Message Processor
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่งtcpdump -i any -s 0 host IP address -w File name
tcpdumpได้ที่ข้อมูล tcpdump - หากเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
- วิเคราะห์
tcpdumpข้อมูลโดยใช้เครื่องมือ Wireshark หรือเครื่องมือที่คล้ายกัน - ตัวอย่างการวิเคราะห์
tcpdump โดยใช้ Wireshark มีดังนี้
- ในตัวอย่างนี้ การแฮนด์เชค TLS/SSL ไม่สำเร็จเกิดขึ้นระหว่าง Message Processor กับ เซิร์ฟเวอร์แบ็กเอนด์ (การเชื่อมต่อขาออกหรือการเชื่อมต่อที่ส่งจากเซิร์ฟเวอร์ไปยังอุปกรณ์)
- ข้อความ #4 ใน
tcpdumpเอาต์พุตด้านล่างแสดงให้เห็นว่า Message Processor (แหล่งที่มา) ส่งข้อความ "Client Hello" ไปยังเซิร์ฟเวอร์แบ็กเอนด์ (ปลายทาง)

หากเลือก
Client Helloข้อความจะแสดงว่า Message Processor ใช้โปรโตคอล TLSv1.2 ดังที่แสดงด้านล่าง
- ข้อความ #5 แสดงให้เห็นว่าเซิร์ฟเวอร์แบ็กเอนด์รับทราบข้อความ "Client Hello" จาก Message Processor
- เซิร์ฟเวอร์แบ็กเอนด์จะส่งการแจ้งเตือนร้ายแรง : ปิดการแจ้งเตือนไปยัง Message Processor (ข้อความ #6) ทันที ซึ่งหมายความว่าแฮนด์เชค TLS/SSL ไม่สำเร็จและระบบจะปิดการเชื่อมต่อ
เมื่อดูข้อความ #6 เพิ่มเติมจะเห็นว่าสาเหตุที่การแฮนด์เชค TLS/SSL ล้มเหลวเป็นเพราะเซิร์ฟเวอร์แบ็กเอนด์รองรับเฉพาะโปรโตคอล TLSv1.0 ดังที่แสดงด้านล่าง

- เนื่องจากโปรโตคอลที่ใช้โดย Message Processor และเซิร์ฟเวอร์แบ็กเอนด์ไม่ตรงกัน เซิร์ฟเวอร์แบ็กเอนด์จึงส่งข้อความ Fatal Alert Message: Close Notify
ความละเอียด
Message Processor ทำงานบน Java 8 และใช้โปรโตคอล TLSv1.2 โดยค่าเริ่มต้น หากเซิร์ฟเวอร์แบ็กเอนด์ไม่รองรับโปรโตคอล TLSv1.2 คุณสามารถทำตามขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้เพื่อแก้ไขปัญหานี้
- อัปเกรดเซิร์ฟเวอร์แบ็กเอนด์ให้รองรับโปรโตคอล TLSv1.2 นี่คือโซลูชันที่แนะนำเนื่องจาก โปรโตคอล TLSv1.2 ปลอดภัยกว่า
- หากคุณอัปเกรดเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้ในทันทีด้วยเหตุผลบางประการ คุณสามารถ
บังคับให้ Message Processor ใช้โปรโตคอล TLSv1.0 เพื่อสื่อสารกับ
เซิร์ฟเวอร์แบ็กเอนด์ได้โดยทำตามขั้นตอนต่อไปนี้
- หากไม่ได้ระบุเซิร์ฟเวอร์เป้าหมายในคำจำกัดความ TargetEndpoint ของพร็อกซี ให้ตั้งค่า
องค์ประกอบ
Protocolเป็นTLSv1.0ดังที่แสดง ด้านล่าง<TargetEndpoint name="default"> … <HTTPTargetConnection> <SSLInfo> <Enabled>true</Enabled> <Protocols> <Protocol>TLSv1.0</Protocol> </Protocols> </SSLInfo> <URL>https://myservice.com</URL> </HTTPTargetConnection> … </TargetEndpoint> - หากคุณกำหนดค่า เซิร์ฟเวอร์เป้าหมายสำหรับพร็อกซี ให้ใช้ Management API นี้เพื่อตั้งค่าโปรโตคอลเป็น TLSv1.0 ในการกำหนดค่าเซิร์ฟเวอร์เป้าหมาย ที่เฉพาะเจาะจง
- หากไม่ได้ระบุเซิร์ฟเวอร์เป้าหมายในคำจำกัดความ TargetEndpoint ของพร็อกซี ให้ตั้งค่า
องค์ประกอบ
การเข้ารหัสไม่ตรงกัน
คุณอาจเห็นข้อผิดพลาดในการแฮนด์เชค TLS/SSL หากอัลกอริทึมชุดการเข้ารหัสที่ไคลเอ็นต์ใช้ไม่ได้รับการรองรับจากเซิร์ฟเวอร์ในการเชื่อมต่อขาเข้า (Northbound) หรือขาออก (Southbound) ใน Apigee Edge ดูเพิ่มเติมที่ ทำความเข้าใจการเชื่อมต่อขาเข้าและขาออก
การวินิจฉัย
- ตรวจสอบว่าข้อผิดพลาดเกิดขึ้นที่การเชื่อมต่อขาเข้าหรือขาออก ดูคำแนะนำเพิ่มเติมเกี่ยวกับการพิจารณานี้ได้ที่ การระบุ แหล่งที่มาของปัญหา
- เรียกใช้ยูทิลิตี
tcpdump เพื่อรวบรวมข้อมูลเพิ่มเติม
- หากเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
tcpdumpได้ที่ไคลเอ็นต์หรือเซิร์ฟเวอร์ที่เกี่ยวข้อง ไคลเอ็นต์อาจเป็นแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อที่มุ่งหน้าไปยังเซิร์ฟเวอร์) หรือตัวประมวลผลข้อความ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อที่มุ่งหน้าไปยังไคลเอ็นต์) เซิร์ฟเวอร์อาจเป็นเราเตอร์ Edge (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อขาขึ้น) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อขาลง) โดยขึ้นอยู่กับการพิจารณาจากขั้นตอนที่ 1 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ คุณจะรวบรวมข้อมูล
tcpdumpได้เฉพาะในแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อที่มุ่งหน้าไปยังเซิร์ฟเวอร์) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อที่มุ่งหน้าไปยังไคลเอ็นต์) เนื่องจากคุณไม่มีสิทธิ์เข้าถึง Edge Router หรือ Message Processor
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่งtcpdump -i any -s 0 host IP address -w File name
tcpdumpได้ที่ข้อมูล tcpdump - หากเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
- วิเคราะห์
tcpdumpโดยใช้เครื่องมือ Wireshark หรือเครื่องมืออื่นๆ ที่คุณคุ้นเคย - ต่อไปนี้คือตัวอย่างการวิเคราะห์เอาต์พุต
tcpdumpโดยใช้ Wireshark- ในตัวอย่างนี้ แฮนด์เชค TLS/SSL ไม่สำเร็จระหว่างแอปพลิเคชันไคลเอ็นต์กับเราเตอร์ Edge (การเชื่อมต่อขาขึ้น) ระบบรวบรวมเอาต์พุต
tcpdumpในเราเตอร์ Edge ข้อความ #4 ในเอาต์พุต
tcpdumpด้านล่างแสดงว่าแอปพลิเคชันไคลเอ็นต์ (แหล่งที่มา) ส่งข้อความ "Client Hello" ไปยัง Edge Router (ปลายทาง)
การเลือกข้อความ Client Hello แสดงว่าแอปพลิเคชันไคลเอ็นต์ใช้โปรโตคอล TLSv1.2

- ข้อความ #5 แสดงว่า Edge Router รับทราบข้อความ "Client Hello" จาก แอปพลิเคชันไคลเอ็นต์
- เราเตอร์ Edge จะส่งการแจ้งเตือนร้ายแรง : การแฮนด์เชคล้มเหลวไปยัง แอปพลิเคชันไคลเอ็นต์ทันที (ข้อความ #6) ซึ่งหมายความว่าแฮนด์เชค TLS/SSL ไม่สำเร็จและระบบจะปิดการเชื่อมต่อ
- การดูรายละเอียดเพิ่มเติมในข้อความ #6 จะแสดงข้อมูลต่อไปนี้
- Edge Router รองรับโปรโตคอล TLSv1.2 ซึ่งหมายความว่าโปรโตคอลจะตรงกัน ระหว่างแอปพลิเคชันไคลเอ็นต์กับเราเตอร์ Edge
อย่างไรก็ตาม เราเตอร์ Edge ยังคงส่ง Fatal Alert: Handshake Failure ไปยังแอปพลิเคชันไคลเอ็นต์ตามที่แสดงในภาพหน้าจอด้านล่าง

- ข้อผิดพลาดอาจเกิดจากปัญหาอย่างใดอย่างหนึ่งต่อไปนี้
- แอปพลิเคชันไคลเอ็นต์ไม่ได้ใช้อัลกอริทึมชุดการเข้ารหัสที่ Edge Router รองรับ
- Edge Router เปิดใช้ SNI แล้ว แต่แอปพลิเคชันไคลเอ็นต์ไม่ได้ส่งชื่อเซิร์ฟเวอร์
- ข้อความ #4 ใน
tcpdumpเอาต์พุตแสดงรายการอัลกอริทึมชุดการเข้ารหัสที่แอปพลิเคชันไคลเอ็นต์รองรับ ดังที่แสดงด้านล่าง
- รายการอัลกอริทึมชุดการเข้ารหัสที่ Edge Router รองรับจะแสดงอยู่ในไฟล์
/opt/nginx/conf.d/0-default.confในตัวอย่างนี้ Edge Router รองรับเฉพาะอัลกอริทึมชุดการเข้ารหัสที่มีการเข้ารหัสสูง - แอปพลิเคชันไคลเอ็นต์ไม่ได้ใช้อัลกอริทึมชุดการเข้ารหัสที่มีการเข้ารหัสสูง ความไม่ตรงกันนี้เป็นสาเหตุที่ทำให้แฮนด์เชค TLS/SSL ไม่สำเร็จ
- เนื่องจาก Edge Router เปิดใช้ SNI ให้เลื่อนลงไปที่ข้อความ #4 ในเอาต์พุต
tcpdumpและ ยืนยันว่าแอปพลิเคชันไคลเอ็นต์ส่งชื่อเซิร์ฟเวอร์อย่างถูกต้อง ดังที่แสดงใน รูปด้านล่าง

- หากชื่อนี้ถูกต้อง คุณจะสรุปได้ว่าการแฮนด์เชค TLS/SSL ไม่สำเร็จ เนื่องจากอัลกอริทึมชุดการเข้ารหัสที่แอปพลิเคชันไคลเอ็นต์ใช้ไม่ได้รับการรองรับจาก เราเตอร์ Edge
- ในตัวอย่างนี้ แฮนด์เชค TLS/SSL ไม่สำเร็จระหว่างแอปพลิเคชันไคลเอ็นต์กับเราเตอร์ Edge (การเชื่อมต่อขาขึ้น) ระบบรวบรวมเอาต์พุต
ความละเอียด
คุณต้องตรวจสอบว่าไคลเอ็นต์ใช้อัลกอริทึมชุดการเข้ารหัสที่เซิร์ฟเวอร์รองรับ หากต้องการแก้ปัญหาที่อธิบายไว้ในส่วนการวินิจฉัยก่อนหน้า ให้ดาวน์โหลดและติดตั้งแพ็กเกจ Java Cryptography Extension (JCE) แล้วรวมไว้ในการติดตั้ง Java เพื่อรองรับอัลกอริทึมชุดการเข้ารหัสที่มีการเข้ารหัสสูง
ใบรับรองไม่ถูกต้อง
การแฮนด์เชค TLS/SSL จะล้มเหลวหากคุณมีใบรับรองที่ไม่ถูกต้องในที่เก็บคีย์/ที่เก็บที่เชื่อถือได้ ไม่ว่าจะในการเชื่อมต่อขาเข้า (Northbound) หรือขาออก (Southbound) ใน Apigee Edge ดูเพิ่มเติม ทำความเข้าใจการเชื่อมต่อขาเข้าและขาออก
หากปัญหาเกิดจากต้นทาง คุณอาจเห็นข้อความแสดงข้อผิดพลาดที่แตกต่างกัน ขึ้นอยู่กับสาเหตุที่แท้จริง
ส่วนต่อไปนี้แสดงตัวอย่างข้อความแสดงข้อผิดพลาดและขั้นตอนในการวินิจฉัยและแก้ไขปัญหานี้
ข้อความแสดงข้อผิดพลาด
คุณอาจเห็นข้อความแสดงข้อผิดพลาดที่แตกต่างกันไปตามสาเหตุที่ทำให้การแฮนด์เชค TLS/SSL ล้มเหลว ต่อไปนี้คือตัวอย่างข้อความแสดงข้อผิดพลาดที่คุณอาจเห็นเมื่อเรียกพร็อกซี API
* SSL certificate problem: Invalid certificate chain * Closing connection 0 curl: (60) SSL certificate problem: Invalid certificate chain More details here: http://curl.haxx.se/docs/sslcerts.html
สาเหตุที่เป็นไปได้
สาเหตุที่พบบ่อยของปัญหานี้มีดังนี้
| สาเหตุ | คำอธิบาย | ใครสามารถทำตามขั้นตอนการแก้ปัญหาได้บ้าง |
| ชื่อโฮสต์ไม่ตรงกัน |
ชื่อโฮสต์ที่ใช้ใน URL และใบรับรองในที่เก็บคีย์ของเราเตอร์ไม่ตรงกัน ตัวอย่างเช่น ความไม่ตรงกันจะเกิดขึ้นหากชื่อโฮสต์ที่ใช้ใน URL คือ myorg.domain.com ขณะที่
ใบรับรองมีชื่อโฮสต์ใน CN เป็น CN=something.domain.com.
|
ผู้ใช้ Edge Private และ Public Cloud |
| ห่วงโซ่ใบรับรองไม่สมบูรณ์หรือไม่ถูกต้อง | ห่วงโซ่ใบรับรองไม่สมบูรณ์หรือไม่ถูกต้อง | ผู้ใช้ Edge Private และ Public Cloud เท่านั้น |
| เซิร์ฟเวอร์หรือไคลเอ็นต์ส่งใบรับรองที่หมดอายุหรือที่ไม่รู้จัก | เซิร์ฟเวอร์หรือไคลเอ็นต์จะส่งใบรับรองที่หมดอายุหรือไม่รู้จักที่การเชื่อมต่อขาขึ้นหรือขาลง | ผู้ใช้ Edge Private Cloud และ Edge Public Cloud |
ชื่อโฮสต์ ไม่ตรงกัน
การวินิจฉัย
- จดชื่อโฮสต์ที่ใช้ใน URL ที่การเรียก API การจัดการ Edge ต่อไปนี้ส่งคืน
ตัวอย่างcurl -v https://myorg.domain.com/v1/getinfo
curl -v https://api.enterprise.apigee.com/v1/getinfo
- รับ CN ที่ใช้ในใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ที่เฉพาะเจาะจง คุณใช้ API การจัดการ Edge ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
-
รับชื่อใบรับรองในที่เก็บคีย์:
หากคุณเป็นผู้ใช้ Private Cloud ให้ใช้ Management API ดังนี้
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ให้ใช้ Management API ดังนี้curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
ดูรายละเอียดของใบรับรองในที่เก็บคีย์โดยใช้ Edge Management API
หากคุณเป็นผู้ใช้ Private Cloud ให้ทำดังนี้
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ให้ทำดังนี้curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
ตัวอย่างใบรับรอง::
"certInfo": [ { "basicConstraints": "CA:FALSE", "expiryDate": 1456258950000, "isValid": "No", "issuer": "SERIALNUMBER=07969287, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O=\"GoDaddy.com, Inc.\", L=Scottsdale, ST=Arizona, C=US", "publicKey": "RSA Public Key, 2048 bits", "serialNumber": "07:bc:a7:39:03:f1:56", "sigAlgName": "SHA1withRSA", "subject": "CN=something.domain.com, OU=Domain Control Validated, O=something.domain.com", "validFrom": 1358287055000, "version": 3 },
ชื่อเรื่องในใบรับรองหลักมี CN เป็น
something.domain.com.เนื่องจากชื่อโฮสต์ที่ใช้ใน URL ของคำขอ API (ดูขั้นตอนที่ 1 ด้านบน) และชื่อเรื่อง ในใบรับรองไม่ตรงกัน คุณจึงได้รับการเชื่อมต่อ TLS/SSL ที่ล้มเหลว
-
รับชื่อใบรับรองในที่เก็บคีย์:
ความละเอียด
คุณแก้ไขปัญหานี้ได้ 2 วิธีต่อไปนี้
- ขอรับใบรับรอง (หากยังไม่มี) ที่ CN ของ Subject มีใบรับรองไวลด์การ์ด
จากนั้นอัปโหลดเชนใบรับรองใหม่ที่สมบูรณ์ไปยังคีย์สโตร์ เช่น
"subject": "CN=*.domain.com, OU=Domain Control Validated, O=*.domain.com",
- รับใบรับรอง (หากยังไม่มี) ที่มี CN ของ Subject อยู่แล้ว แต่ให้ใช้ your-orgyour-domain เป็นชื่ออื่นของ Subject จากนั้นอัปโหลดห่วงโซ่ใบรับรองที่สมบูรณ์ ไปยังคีย์สโตร์
ข้อมูลอ้างอิง
ห่วงโซ่ใบรับรองไม่สมบูรณ์หรือไม่ถูกต้อง
การวินิจฉัย
- รับ CN ที่ใช้ในใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ที่เฉพาะเจาะจง คุณใช้ API การจัดการ Edge ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
-
รับชื่อใบรับรองในที่เก็บคีย์:
หากคุณเป็นผู้ใช้ Private Cloud
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ให้ทำดังนี้curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
ดูรายละเอียดของใบรับรองในที่เก็บคีย์:
หากคุณเป็นผู้ใช้ Private Cloud
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ให้ทำดังนี้curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
- ตรวจสอบใบรับรองและเชนของใบรับรอง และยืนยันว่าใบรับรองเป็นไปตาม หลักเกณฑ์ที่ระบุไว้ในบทความ วิธีการทำงานของเชนใบรับรองเพื่อให้แน่ใจว่าเป็นเชนใบรับรองที่สมบูรณ์และยังใช้ได้อยู่ หากกลุ่มใบรับรองที่จัดเก็บไว้ในที่เก็บคีย์ไม่สมบูรณ์หรือไม่ถูกต้อง คุณจะเห็นข้อผิดพลาดในการแฮนด์เชค TLS/SSL
- กราฟิกต่อไปนี้แสดงตัวอย่างใบรับรองที่มีห่วงโซ่ใบรับรองที่ไม่ถูกต้อง ซึ่งใบรับรองระดับกลางและใบรับรองรูทไม่ตรงกัน
ตัวอย่างใบรับรองระดับกลางและใบรับรองรูทที่ผู้ออกและ เรื่องไม่ตรงกัน

-
รับชื่อใบรับรองในที่เก็บคีย์:
ความละเอียด
- ขอรับใบรับรอง (หากยังไม่มี) ที่มีเชนใบรับรองที่สมบูรณ์และถูกต้อง
- เรียกใช้คำสั่ง openssl ต่อไปนี้เพื่อยืนยันว่าห่วงโซ่ใบรับรองถูกต้องและ
สมบูรณ์
openssl verify -CAfile root-cert -untrusted intermediate-cert main-cert
- อัปโหลดชุดใบรับรองที่ตรวจสอบแล้วไปยังคีย์สโตร์
ใบรับรองที่หมดอายุหรือไม่รู้จัก ซึ่งเซิร์ฟเวอร์หรือไคลเอ็นต์ส่งมา
หากเซิร์ฟเวอร์/ไคลเอ็นต์ส่งใบรับรองที่ไม่ถูกต้อง/หมดอายุที่การเชื่อมต่อขาออก หรือขาเข้า ปลายทางอีกด้าน (เซิร์ฟเวอร์/ไคลเอ็นต์) จะปฏิเสธใบรับรอง ซึ่งทำให้การแฮนด์เชค TLS/SSL ไม่สำเร็จ
การวินิจฉัย
- ตรวจสอบว่าข้อผิดพลาดเกิดขึ้นกับการเชื่อมต่อขาเข้าหรือขาออก ดูคำแนะนำเพิ่มเติมเกี่ยวกับการพิจารณานี้ได้ที่ การระบุแหล่งที่มาของปัญหา
- เรียกใช้ยูทิลิตี
tcpdump เพื่อรวบรวมข้อมูลเพิ่มเติม
- หากเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
tcpdumpได้ที่ไคลเอ็นต์หรือเซิร์ฟเวอร์ที่เกี่ยวข้อง ไคลเอ็นต์อาจเป็นแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อที่มุ่งหน้าไปยังเซิร์ฟเวอร์) หรือตัวประมวลผลข้อความ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อที่มุ่งหน้าไปยังไคลเอ็นต์) เซิร์ฟเวอร์อาจเป็นเราเตอร์ Edge (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อขาขึ้น) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อขาลง) โดยขึ้นอยู่กับการพิจารณาจากขั้นตอนที่ 1 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ คุณจะรวบรวมข้อมูล
tcpdumpได้เฉพาะในแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อที่มุ่งหน้าไปยังเซิร์ฟเวอร์) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อที่มุ่งหน้าไปยังไคลเอ็นต์) เนื่องจากคุณไม่มีสิทธิ์เข้าถึง Edge Router หรือ Message Processor
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่งtcpdump -i any -s 0 host IP address -w File name
tcpdumpได้ที่ข้อมูล tcpdump - หากเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
- วิเคราะห์
tcpdumpข้อมูลโดยใช้ Wireshark หรือเครื่องมือที่คล้ายกัน - จากเอาต์พุต
tcpdumpให้ระบุโฮสต์ (ไคลเอ็นต์หรือเซิร์ฟเวอร์) ที่ปฏิเสธ ใบรับรองในขั้นตอนการยืนยัน - คุณสามารถดึงใบรับรองที่ส่งจากอีกฝั่งได้จากเอาต์พุต
tcpdumpหากข้อมูลไม่ได้เข้ารหัส ซึ่งจะเป็นประโยชน์ในการเปรียบเทียบว่าใบรับรองนี้ตรงกับใบรับรองที่มีอยู่ใน Truststore หรือไม่ - ดูตัวอย่าง
tcpdumpสำหรับการสื่อสาร SSL ระหว่าง Message Processor กับ เซิร์ฟเวอร์แบ็กเอนด์ตัวอย่าง
tcpdumpที่แสดงข้อผิดพลาด "ไม่รู้จักใบรับรอง"
- Message Processor (ไคลเอ็นต์) จะส่ง "Client Hello" ไปยังเซิร์ฟเวอร์แบ็กเอนด์ (เซิร์ฟเวอร์) ในข้อความ #59
- เซิร์ฟเวอร์แบ็กเอนด์จะส่ง "Server Hello" ไปยัง Message Processor ในข้อความ #61
- โดยจะตรวจสอบอัลกอริทึมโปรโตคอลและชุดการเข้ารหัสที่ใช้ร่วมกัน
- เซิร์ฟเวอร์แบ็กเอนด์จะส่งข้อความใบรับรองและ Server Hello Done ไปยัง Message Processor ในข้อความ #68
- Message Processor จะส่งการแจ้งเตือนร้ายแรง "Description: Certificate Unknown" ในข้อความ #70
- เมื่อดูข้อความ #70 เพิ่มเติม จะไม่พบรายละเอียดอื่นนอกเหนือจากข้อความแจ้งเตือนตามที่แสดงด้านล่าง

- ตรวจสอบข้อความ #68 เพื่อดูรายละเอียดเกี่ยวกับใบรับรองที่ส่งโดยเซิร์ฟเวอร์แบ็กเอนด์
ตามที่แสดงในกราฟิกต่อไปนี้

- ใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์และชุดใบรับรองที่สมบูรณ์ทั้งหมดจะพร้อมใช้งาน ในส่วน "ใบรับรอง" ดังที่แสดงในรูปภาพด้านบน
- หากเราเตอร์ (ขาออก) หรือ
Message Processor (ขาเข้า) พบว่าใบรับรองไม่รู้จัก ดังตัวอย่างที่แสดงไว้ด้านบน ให้ทำตามขั้นตอนต่อไปนี้
- รับใบรับรองและเชนของใบรับรองที่จัดเก็บไว้ใน Truststore ที่เฉพาะเจาะจง (ดู
การกำหนดค่าโฮสต์เสมือนสำหรับเราเตอร์และการกำหนดค่าปลายทางเป้าหมายสำหรับ
Message Processor) คุณใช้ API ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
-
รับชื่อใบรับรองใน Truststore:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs
-
ดูรายละเอียดของใบรับรองใน Truststore:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs/cert-name
-
รับชื่อใบรับรองใน Truststore:
- ตรวจสอบว่าใบรับรองที่จัดเก็บไว้ใน Truststore ของเราเตอร์ (ขาเข้า) หรือ
Message Processor (ขาออก) ตรงกับใบรับรองที่จัดเก็บไว้ใน
Keystore ของแอปพลิเคชันไคลเอ็นต์ (ขาเข้า) หรือเซิร์ฟเวอร์เป้าหมาย (ขาออก) หรือ
ใบรับรองที่ได้จากเอาต์พุต
tcpdumpหากมีข้อมูลไม่ตรงกัน นั่นคือสาเหตุที่ทำให้แฮนด์เชค TLS/SSL ไม่สำเร็จ
- รับใบรับรองและเชนของใบรับรองที่จัดเก็บไว้ใน Truststore ที่เฉพาะเจาะจง (ดู
การกำหนดค่าโฮสต์เสมือนสำหรับเราเตอร์และการกำหนดค่าปลายทางเป้าหมายสำหรับ
Message Processor) คุณใช้ API ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
- หากแอปพลิเคชันไคลเอ็นต์ (ขาขึ้น)
หรือเซิร์ฟเวอร์เป้าหมาย (ขาลง) ระบุว่าใบรับรองไม่รู้จัก ให้ทำตามขั้นตอนต่อไปนี้
- รับเชนใบรับรองที่สมบูรณ์ซึ่งใช้ในใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ที่เฉพาะเจาะจง
(ดูการกำหนดค่าโฮสต์เสมือนสำหรับเราเตอร์และการกำหนดค่าปลายทางเป้าหมาย
สำหรับการกำหนดค่า Message Processor) คุณใช้ API ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
-
รับชื่อใบรับรองในคีย์สโตร์:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
ดูรายละเอียดของใบรับรองในคีย์สโตร์
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
-
รับชื่อใบรับรองในคีย์สโตร์:
- ตรวจสอบว่าใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ของเราเตอร์ (ขาเข้า) หรือ
Message Processor (ขาออก) ตรงกับใบรับรองที่จัดเก็บไว้ใน Truststore ของ
แอปพลิเคชันไคลเอ็นต์ (ขาเข้า) หรือเซิร์ฟเวอร์เป้าหมาย (ขาออก) หรือใบรับรองที่
ได้รับจากเอาต์พุต
tcpdumpหากมีข้อมูลไม่ตรงกัน นั่นคือสาเหตุที่ทำให้แฮนด์เชค SSL ไม่สำเร็จ
- รับเชนใบรับรองที่สมบูรณ์ซึ่งใช้ในใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ที่เฉพาะเจาะจง
(ดูการกำหนดค่าโฮสต์เสมือนสำหรับเราเตอร์และการกำหนดค่าปลายทางเป้าหมาย
สำหรับการกำหนดค่า Message Processor) คุณใช้ API ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
- หากพบว่าใบรับรองที่เซิร์ฟเวอร์/ไคลเอ็นต์ส่งมาหมดอายุแล้ว ไคลเอ็นต์/เซิร์ฟเวอร์ที่รับจะปฏิเสธใบรับรอง และคุณจะเห็นข้อความแจ้งต่อไปนี้ใน
tcpdumpการแจ้งเตือน (ระดับ: ร้ายแรง, คำอธิบาย: ใบรับรองหมดอายุ)
- ตรวจสอบว่าใบรับรองในที่เก็บคีย์ของโฮสต์ที่เหมาะสมหมดอายุแล้ว
ความละเอียด
หากต้องการแก้ไขปัญหาที่ระบุไว้ในตัวอย่างข้างต้น ให้อัปโหลดใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ที่ถูกต้องไปยัง Truststore ใน Message Processor
ตารางต่อไปนี้สรุปขั้นตอนในการแก้ไขปัญหาตามสาเหตุของปัญหา
| สาเหตุ | คำอธิบาย | วิธีแก้ปัญหา |
| ใบรับรองหมดอายุ |
NorthBound
|
อัปโหลดใบรับรองใหม่และชุดใบรับรองที่สมบูรณ์ไปยังคีย์สโตร์ในโฮสต์ที่เหมาะสม |
SouthBound
|
อัปโหลดใบรับรองใหม่และชุดใบรับรองที่สมบูรณ์ไปยังคีย์สโตร์ในโฮสต์ที่เหมาะสม | |
| ใบรับรองที่ไม่รู้จัก |
NorthBound
|
อัปโหลดใบรับรองที่ถูกต้องไปยัง Truststore ในโฮสต์ที่เหมาะสม |
SouthBound
|
อัปโหลดใบรับรองที่ถูกต้องไปยัง Truststore ในโฮสต์ที่เหมาะสม |
เปิดใช้ SNI เซิร์ฟเวอร์
การแฮนด์เชค TLS/SSL อาจล้มเหลวเมื่อไคลเอ็นต์สื่อสารกับเซิร์ฟเวอร์ที่เปิดใช้การระบุชื่อเซิร์ฟเวอร์ (SNI) แต่ไคลเอ็นต์ไม่ได้เปิดใช้ SNI ซึ่งอาจเกิดขึ้นในการเชื่อมต่อขาขึ้นหรือขาลงใน Edge
ก่อนอื่นคุณต้องระบุชื่อโฮสต์และหมายเลขพอร์ตของเซิร์ฟเวอร์ที่ใช้ และตรวจสอบว่า เปิดใช้ SNI หรือไม่
การระบุเซิร์ฟเวอร์ที่เปิดใช้ SNI
- เรียกใช้คำสั่ง
opensslแล้วลองเชื่อมต่อกับชื่อโฮสต์ของเซิร์ฟเวอร์ที่เกี่ยวข้อง (Edge Router หรือเซิร์ฟเวอร์แบ็กเอนด์) โดยไม่ต้องส่งชื่อเซิร์ฟเวอร์ ดังที่แสดงด้านล่าง คุณอาจได้รับใบรับรองและบางครั้งอาจพบว่าการแฮนด์เชคไม่สำเร็จใน คำสั่ง openssl ดังที่แสดงด้านล่างopenssl s_client -connect hostname:port
CONNECTED(00000003) 9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
- เรียกใช้คำสั่ง
opensslแล้วลองเชื่อมต่อกับชื่อโฮสต์ของเซิร์ฟเวอร์ที่เกี่ยวข้อง (เราเตอร์ Edge หรือเซิร์ฟเวอร์แบ็กเอนด์) โดยส่งชื่อเซิร์ฟเวอร์ตามที่แสดงด้านล่างopenssl s_client -connect hostname:port -servername hostname
- หากคุณได้รับข้อผิดพลาดในการแฮนด์เชคในขั้นตอนที่ 1 หรือได้รับใบรับรองที่แตกต่างกันในขั้นตอนที่ 1 และ ขั้นตอนที่ 2 แสดงว่าเซิร์ฟเวอร์ที่ระบุเปิดใช้ SNI
เมื่อระบุว่าเซิร์ฟเวอร์เปิดใช้ SNI แล้ว ให้ทำตามขั้นตอนด้านล่างเพื่อ ตรวจสอบว่าการแฮนด์เชค TLS/SSL ล้มเหลวเกิดจากไคลเอ็นต์สื่อสารกับ เซิร์ฟเวอร์ SNI ไม่ได้หรือไม่
การวินิจฉัย
- ตรวจสอบว่าข้อผิดพลาดเกิดขึ้นกับการเชื่อมต่อขาเข้าหรือขาออก ดูคำแนะนำเพิ่มเติมเกี่ยวกับการพิจารณานี้ได้ที่ การระบุแหล่งที่มาของปัญหา
- เรียกใช้ยูทิลิตี
tcpdump เพื่อรวบรวมข้อมูลเพิ่มเติม
- หากเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
tcpdumpได้ที่ไคลเอ็นต์หรือเซิร์ฟเวอร์ที่เกี่ยวข้อง ไคลเอ็นต์อาจเป็นแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อที่มุ่งหน้าไปยังเซิร์ฟเวอร์) หรือตัวประมวลผลข้อความ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อที่มุ่งหน้าไปยังไคลเอ็นต์) เซิร์ฟเวอร์อาจเป็นเราเตอร์ Edge (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อขาขึ้น) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อขาลง) โดยขึ้นอยู่กับการพิจารณาจากขั้นตอนที่ 1 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ คุณจะรวบรวมข้อมูล
tcpdumpได้เฉพาะในแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อที่มุ่งหน้าไปยังเซิร์ฟเวอร์) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือการเชื่อมต่อที่มุ่งหน้าไปยังไคลเอ็นต์) เนื่องจากคุณไม่มีสิทธิ์เข้าถึง Edge Router หรือ Message Processor
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่งtcpdump -i any -s 0 host IP address -w File name
tcpdumpได้ที่ ข้อมูล tcpdump - หากเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
- วิเคราะห์เอาต์พุต
tcpdumpโดยใช้ Wireshark หรือเครื่องมือที่คล้ายกัน - ตัวอย่างการวิเคราะห์
tcpdumpโดยใช้ Wireshark มีดังนี้- ในตัวอย่างนี้ แฮนด์เชค TLS/SSL ไม่สำเร็จระหว่าง Edge Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์ (การเชื่อมต่อขาออก)
- ข้อความ #4 ใน
tcpdumpเอาต์พุตด้านล่างแสดงให้เห็นว่า Message Processor (แหล่งที่มา) ส่ง ข้อความ "Client Hello" ไปยังเซิร์ฟเวอร์แบ็กเอนด์ (ปลายทาง)
- การเลือกข้อความ "Client Hello" แสดงให้เห็นว่า Message
Processor ใช้โปรโตคอล TLSv1.2

- ข้อความ #4 แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์รับทราบข้อความ "Client Hello" จาก Message Processor
- เซิร์ฟเวอร์แบ็กเอนด์จะส่งการแจ้งเตือนร้ายแรง : การแฮนด์เชค ล้มเหลวไปยัง Message Processor (ข้อความ #5) ทันที ซึ่งหมายความว่าแฮนด์เชค TLS/SSL ไม่สำเร็จและระบบจะปิดการเชื่อมต่อ
- โปรดอ่านข้อความ #6 เพื่อดูข้อมูลต่อไปนี้
- เซิร์ฟเวอร์แบ็กเอนด์รองรับโปรโตคอล TLSv1.2 ซึ่งหมายความว่าโปรโตคอล ตรงกันระหว่าง Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์
- อย่างไรก็ตาม เซิร์ฟเวอร์แบ็กเอนด์จะยังคงส่งการแจ้งเตือนร้ายแรง: แฮนด์เชค
ล้มเหลวไปยัง Message Processor ตามที่แสดงในรูปด้านล่าง

- ข้อผิดพลาดนี้อาจเกิดจากสาเหตุข้อใดข้อหนึ่งต่อไปนี้
- Message Processor ไม่ใช้อัลกอริทึมชุดการเข้ารหัสที่เซิร์ฟเวอร์แบ็กเอนด์รองรับ
- เซิร์ฟเวอร์แบ็กเอนด์เปิดใช้ SNI แต่แอปพลิเคชันไคลเอ็นต์ไม่ได้ส่งชื่อเซิร์ฟเวอร์
- ตรวจสอบข้อความ #3 (Client Hello) ในเอาต์พุต
tcpdumpโดยละเอียด โปรดทราบว่าไม่มี ส่วนขยาย: server_name ดังที่แสดงด้านล่าง
- ซึ่งยืนยันว่า Message Processor ไม่ได้ส่ง server_name ไปยังเซิร์ฟเวอร์แบ็กเอนด์ที่เปิดใช้ SNI
- นี่คือสาเหตุที่ทำให้การแฮนด์เชค TLS/SSL ล้มเหลว และเป็นเหตุผลที่เซิร์ฟเวอร์แบ็กเอนด์ ส่งการแจ้งเตือนร้ายแรง: การแฮนด์เชคไม่สำเร็จไปยังตัวประมวลผลข้อความ
- ตรวจสอบว่าได้ตั้งค่า
jsse.enableSNIExtension propertyในsystem.propertiesเป็น "false" ใน Message Processor เพื่อยืนยันว่าไม่ได้เปิดใช้ Message Processor เพื่อสื่อสารกับเซิร์ฟเวอร์ที่เปิดใช้ SNI
ความละเอียด
เปิดใช้ Message Processor ให้สื่อสารกับเซิร์ฟเวอร์ที่เปิดใช้ SNI โดยทำตามขั้นตอนต่อไปนี้
- สร้างไฟล์
/opt/apigee/customer/application/message-processor.properties(หากยังไม่มี) - เพิ่มบรรทัดต่อไปนี้ลงในไฟล์นี้
conf_system_jsse.enableSNIExtension=true - เปลี่ยนเจ้าของไฟล์นี้เป็น
apigee:apigeeโดยใช้คำสั่ง chown ดังนี้chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- รีสตาร์ทตัวประมวลผลข้อความ
/opt/apigee/apigee-service/bin/apigee-service message-processor restart
- หากมี Message Processor มากกว่า 1 รายการ ให้ทำขั้นตอนที่ 1 ถึง 4 ซ้ำใน Message Processor ทั้งหมด
หากไม่สามารถระบุสาเหตุที่ทำให้ TLS/SSL Handshake ล้มเหลว
และแก้ไขปัญหาหรือต้องการความช่วยเหลือเพิ่มเติม โปรดติดต่อทีมสนับสนุนของ Apigee Edge แชร์รายละเอียดทั้งหมดเกี่ยวกับปัญหาพร้อมกับ
เอาต์พุต tcpdump