คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
ลักษณะปัญหา
การทำงานแฮนด์เชค 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 และผู้ใช้ Cloud สาธารณะ |
ชุดการเข้ารหัสไม่ตรงกัน | เซิร์ฟเวอร์ไม่รองรับชุดการเข้ารหัสที่ไคลเอ็นต์ใช้ | ผู้ใช้ Private Cloud และผู้ใช้ Cloud สาธารณะ |
ใบรับรองไม่ถูกต้อง | ชื่อโฮสต์ใน URL ที่ไคลเอ็นต์ใช้ไม่ตรงกับชื่อโฮสต์ในใบรับรองที่จัดเก็บไว้ในฝั่งเซิร์ฟเวอร์ | ผู้ใช้ Private Cloud และผู้ใช้ Cloud สาธารณะ |
ชุดใบรับรองที่ไม่สมบูรณ์หรือไม่ถูกต้องจะถูกเก็บไว้ที่ฝั่งไคลเอ็นต์หรือเซิร์ฟเวอร์ | ผู้ใช้ Private Cloud และผู้ใช้ Cloud สาธารณะ | |
ไคลเอ็นต์ส่งใบรับรองที่ไม่ถูกต้องหรือหมดอายุไปยังเซิร์ฟเวอร์หรือใบรับรองจากเซิร์ฟเวอร์ไปยังไคลเอ็นต์ | ผู้ใช้ Private Cloud และผู้ใช้ Cloud สาธารณะ | |
เซิร์ฟเวอร์ที่เปิดใช้ SNI | เซิร์ฟเวอร์แบ็กเอนด์เปิดใช้ Server Name Indication (SNI) แล้ว แต่ไคลเอ็นต์สื่อสารกับเซิร์ฟเวอร์ SNI ไม่ได้ | ผู้ใช้ Private Cloud เท่านั้น |
โปรโตคอลไม่ตรงกัน
แฮนด์เชค TLS/SSL ล้มเหลวหากเซิร์ฟเวอร์ไม่รองรับโปรโตคอลที่ไคลเอ็นต์ใช้ในการเชื่อมต่อขาเข้า (ทางเหนือ) หรือขาออก (ขาออก) ดูข้อมูลเพิ่มเติมที่ การทำความเข้าใจการเชื่อมต่อไปทางเหนือและใต้
การวินิจฉัย
- ตรวจสอบว่าเกิดข้อผิดพลาดที่การเชื่อมต่อ northbound หรือ southbound หรือไม่ ดูคำแนะนำเพิ่มเติมเกี่ยวกับการตัดสินนี้ได้ที่ การระบุที่มาของปัญหา
- เรียกใช้ยูทิลิตี
tcpdump เพื่อรวบรวมข้อมูลเพิ่มเติม ดังนี้
- หากคุณเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
tcpdump
ที่ไคลเอ็นต์หรือเซิร์ฟเวอร์ที่เกี่ยวข้องได้ ไคลเอ็นต์อาจเป็นแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อไปทางเหนือ) หรือตัวประมวลผลข้อความ (สำหรับการเชื่อมต่อขาออกหรือเชื่อมต่อทางใต้) เซิร์ฟเวอร์อาจเป็น Edge Router (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อไปทางทิศเหนือ) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือเชื่อมต่อทางใต้) ขึ้นอยู่กับการดำเนินการของคุณในขั้นตอนที่ 1 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ คุณจะรวบรวมข้อมูล
tcpdump
ได้เฉพาะในแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อเหนือ) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือขาออก) เนื่องจากคุณไม่มีสิทธิ์เข้าถึงเราเตอร์ Edge หรือผู้ประมวลผลข้อมูลข้อความ
tcpdump -i any -s 0 host IP address -w File name
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่งtcpdump
ดูข้อมูล tcpdump ได้ - หากคุณเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
- วิเคราะห์ข้อมูล
tcpdump
โดยใช้เครื่องมือ Wireshark หรือเครื่องมือที่คล้ายกัน - ตัวอย่างการวิเคราะห์
tcpdump โดยใช้ Wireshark มีดังนี้
- ในตัวอย่างนี้ แฮนด์เชค TLS/SSL เกิดขึ้นระหว่างตัวประมวลผลข้อความกับเซิร์ฟเวอร์แบ็กเอนด์ (การเชื่อมต่อขาออกหรือทางใต้)
- ข้อความ #4 ในเอาต์พุต
tcpdump
ด้านล่างแสดงให้เห็นว่าผู้ประมวลผลข้อความ (แหล่งที่มา) ส่งข้อความ " Hello ของไคลเอ็นต์" ไปยังเซิร์ฟเวอร์แบ็กเอนด์ (ปลายทาง)
หากคุณเลือกข้อความ
Client Hello
แสดงว่าผู้ประมวลผลข้อความใช้โปรโตคอล TLSv1.2 ตามที่แสดงด้านล่าง- ข้อความ #5 แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์รับทราบข้อความ "Client Hello" จากผู้ประมวลผลข้อความ
- เซิร์ฟเวอร์แบ็กเอนด์จะส่งการแจ้งเตือนร้ายแรง : ปิดการแจ้งไปยัง ผู้ประมวลผลข้อความ (ข้อความ #6) ทันที ซึ่งหมายความว่าแฮนด์เชค TLS/SSL ล้มเหลวและการเชื่อมต่อจะถูกปิด
การตรวจสอบเพิ่มเติมในข้อความที่ 6 แสดงให้เห็นว่าสาเหตุของแฮนด์เชค TLS/SSL ไม่สำเร็จ คือเซิร์ฟเวอร์แบ็กเอนด์รองรับเฉพาะโปรโตคอล TLSv1.0 ตามที่แสดงด้านล่าง
- เนื่องจากโปรโตคอลที่ผู้ประมวลผลข้อความใช้และเซิร์ฟเวอร์แบ็กเอนด์ใช้ไม่ตรงกัน เซิร์ฟเวอร์แบ็กเอนด์จึงส่งข้อความว่า Fatal Alert Message: Close Notify
ความละเอียด
ตัวประมวลผลข้อความทำงานบน Java 8 และใช้โปรโตคอล TLSv1.2 โดยค่าเริ่มต้น หากเซิร์ฟเวอร์แบ็กเอนด์ไม่รองรับโปรโตคอล TLSv1.2 คุณอาจทำตามขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้เพื่อแก้ปัญหานี้
- อัปเกรดเซิร์ฟเวอร์แบ็กเอนด์เพื่อให้รองรับโปรโตคอล TLSv1.2 ซึ่งเป็นวิธีแก้ปัญหาที่แนะนำเนื่องจากโปรโตคอล TLSv1.2 มีความปลอดภัยมากกว่า
- หากอัปเกรดเซิร์ฟเวอร์แบ็กเอนด์โดยทันทีไม่ได้ด้วยเหตุผลบางประการ คุณสามารถบังคับให้ผู้ประมวลผลข้อความใช้โปรโตคอล 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 ล้มเหลวหรือไม่ หากเซิร์ฟเวอร์ไม่รองรับอัลกอริทึมชุดการเข้ารหัสที่ไคลเอ็นต์ใช้ ไม่ว่าจะที่การเชื่อมต่อขาเข้า (ทางเหนือ) หรือขาออก (ไปทางใต้) ใน Apigee Edge ดูข้อมูลเพิ่มเติมที่ การทำความเข้าใจการเชื่อมต่อไปทางเหนือและใต้
การวินิจฉัย
- ตรวจสอบว่าข้อผิดพลาดเกิดขึ้นที่การเชื่อมต่อ northbound หรือ southbound ดูคำแนะนำเพิ่มเติมในการพิจารณานี้ได้ที่การระบุที่มาของปัญหา
- เรียกใช้ยูทิลิตี
tcpdump เพื่อรวบรวมข้อมูลเพิ่มเติม ดังนี้
- หากคุณเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
tcpdump
ที่ไคลเอ็นต์หรือเซิร์ฟเวอร์ที่เกี่ยวข้องได้ ไคลเอ็นต์อาจเป็นแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อไปทางเหนือ) หรือตัวประมวลผลข้อความ (สำหรับการเชื่อมต่อขาออกหรือเชื่อมต่อทางใต้) เซิร์ฟเวอร์อาจเป็น Edge Router (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อไปทางทิศเหนือ) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือเชื่อมต่อทางใต้) ขึ้นอยู่กับการดำเนินการของคุณในขั้นตอนที่ 1 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ คุณจะรวบรวมข้อมูล
tcpdump
ได้เฉพาะในแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อเหนือ) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือขาออก) เนื่องจากคุณไม่มีสิทธิ์เข้าถึงเราเตอร์ Edge หรือผู้ประมวลผลข้อมูลข้อความ
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 (ปลายทาง)การเลือกข้อความ Hello ของไคลเอ็นต์แสดงว่าแอปพลิเคชันไคลเอ็นต์ใช้โปรโตคอล TLSv1.2
- ข้อความที่ 5 แสดงว่าเราเตอร์ Edge รับทราบข้อความ "Client Hello" จากแอปพลิเคชันไคลเอ็นต์
- เราเตอร์ Edge จะส่งการแจ้งเตือนร้ายแรง : แฮนด์เชคล้มเหลวไปยังแอปพลิเคชันไคลเอ็นต์ (ข้อความที่ 6) ทันที ซึ่งหมายความว่าแฮนด์เชค TLS/SSL ล้มเหลวและการเชื่อมต่อจะถูกปิด
- เมื่อพิจารณาข้อความ #6 เพิ่มเติม ระบบจะแสดงข้อมูลต่อไปนี้
- Edge Router รองรับโปรโตคอล TLSv1.2 ซึ่งหมายความว่าโปรโตคอลจับคู่ระหว่างแอปพลิเคชันไคลเอ็นต์และ Edge Router
อย่างไรก็ตาม เราเตอร์ Edge จะยังคงส่งการแจ้งเตือนร้ายแรง: แฮนด์เชคล้มเหลวไปยังแอปพลิเคชันไคลเอ็นต์ดังที่แสดงในภาพหน้าจอด้านล่าง
- ข้อผิดพลาดอาจเกิดจากปัญหาใดปัญหาหนึ่งต่อไปนี้
- แอปพลิเคชันไคลเอ็นต์ไม่ได้ใช้อัลกอริทึมชุดการเข้ารหัสที่เราเตอร์ Edge รองรับ
- Edge Router มีการเปิดใช้ SNI แต่แอปพลิเคชันไคลเอ็นต์ไม่ส่งชื่อเซิร์ฟเวอร์
- ข้อความ #4 ในเอาต์พุต
tcpdump
จะแสดงอัลกอริทึมชุดการเข้ารหัสที่แอปพลิเคชันไคลเอ็นต์รองรับตามที่แสดงด้านล่าง - รายการอัลกอริทึมชุดการเข้ารหัสที่เราเตอร์ Edge รองรับจะแสดงอยู่ในไฟล์
/opt/nginx/conf.d/0-default.conf
ในตัวอย่างนี้ เราเตอร์ Edge รองรับเฉพาะอัลกอริทึมชุดการเข้ารหัส High Encryption เท่านั้น - แอปพลิเคชันไคลเอ็นต์ไม่ได้ใช้อัลกอริทึมชุดการเข้ารหัส High Encryption ซึ่งความไม่ตรงกันนี้เป็นสาเหตุที่ทำให้แฮนด์เชค TLS/SSL ล้มเหลว
- เนื่องจากเราเตอร์ Edge เปิดใช้อยู่ SNI ให้เลื่อนลงไปที่ข้อความ #4 ในเอาต์พุต
tcpdump
และยืนยันว่าแอปพลิเคชันไคลเอ็นต์ส่งชื่อเซิร์ฟเวอร์อย่างถูกต้อง ดังที่แสดงในรูปด้านล่าง
- หากชื่อนี้ถูกต้อง ก็อนุมานได้ว่าอาจเกิดแฮนด์เชค TLS/SSL ขึ้นเพราะเราเตอร์ Edge ไม่รองรับอัลกอริทึมของชุดการเข้ารหัสที่แอปพลิเคชันไคลเอ็นต์ใช้
- ในตัวอย่างนี้ แฮนด์เชค TLS/SSL เกิดขึ้นระหว่างแอปพลิเคชันไคลเอ็นต์และเราเตอร์ Edge (การเชื่อมต่อทางเหนือ) ระบบรวบรวมเอาต์พุต
ความละเอียด
คุณต้องตรวจสอบว่าไคลเอ็นต์ใช้อัลกอริทึมชุดการเข้ารหัสที่เซิร์ฟเวอร์รองรับ หากต้องการแก้ปัญหาที่อธิบายไว้ในส่วนการวิเคราะห์ก่อนหน้า ให้ดาวน์โหลดและติดตั้งแพ็กเกจ Java Cryptography Extension (JCE) และรวมไว้ในการติดตั้ง Java เพื่อรองรับอัลกอริทึมชุดการเข้ารหัส High Encryption
ใบรับรองไม่ถูกต้อง
แฮนด์เชค TLS/SSL ล้มเหลวในกรณีที่คุณมีใบรับรองที่ไม่ถูกต้องในคีย์สโตร์/ทรัสต์สโตร์ ไม่ว่าจะเป็นที่การเชื่อมต่อขาเข้า (ทางเหนือ) หรือขาออก (ขาออก) ใน Apigee Edge ดูข้อมูลเพิ่มเติมที่ การทำความเข้าใจการเชื่อมต่อไปทางเหนือและใต้
หากปัญหาเกิดขึ้น northbound คุณอาจเห็นข้อความแสดงข้อผิดพลาดที่แตกต่างกันโดยขึ้นอยู่กับสาเหตุที่แท้จริง
ส่วนต่อไปนี้จะแสดงตัวอย่างข้อความแสดงข้อผิดพลาด รวมถึงขั้นตอนในการวินิจฉัยและแก้ไขปัญหานี้
ข้อความแสดงข้อผิดพลาด
คุณอาจเห็นข้อความแสดงข้อผิดพลาดต่างกันไป ขึ้นอยู่กับสาเหตุของแฮนด์เชค 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 ส่วนตัวและระบบคลาวด์สาธารณะ |
เชนใบรับรองไม่สมบูรณ์หรือไม่ถูกต้อง | ชุดใบรับรองไม่สมบูรณ์หรือไม่ถูกต้อง | ผู้ใช้ Edge ส่วนตัวและระบบคลาวด์สาธารณะเท่านั้น |
ใบรับรองที่หมดอายุหรือไม่รู้จักที่ส่งโดยเซิร์ฟเวอร์หรือไคลเอ็นต์ | ใบรับรองที่หมดอายุหรือไม่รู้จักจะถูกส่งมาจากเซิร์ฟเวอร์หรือไคลเอ็นต์ที่อยู่ทางทิศเหนือหรือการเชื่อมต่อทางใต้ | ผู้ใช้ Edge Private Cloud และ Edge Public Cloud |
ชื่อโฮสต์ ไม่ตรงกัน
การวินิจฉัย
- จดชื่อโฮสต์ที่ใช้ใน URL ที่แสดงผลโดยการเรียก Edge Management API ต่อไปนี้
curl -v https://myorg.domain.com/v1/getinfo
ตัวอย่างเช่นcurl -v https://api.enterprise.apigee.com/v1/getinfo
- รับ CN ที่ใช้ในใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ที่ระบุ คุณใช้ Edge Management API ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
-
เรียกดูชื่อใบรับรองในคีย์สโตร์:
หากคุณเป็นผู้ใช้ Private Cloud ให้ใช้ Management API ดังนี้
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
หากคุณเป็นผู้ใช้ Cloud สาธารณะ ให้ใช้ Management API ดังนี้
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
หากคุณเป็นผู้ใช้ Public Cloud
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": "CN=*.domain.com, OU=Domain Control Validated, O=*.domain.com",
- รับใบรับรอง (หากยังไม่มี) ที่มีเรื่อง CN อยู่แล้วแต่ใช้ your-orgyour-domain เป็นชื่ออื่นแล้วอัปโหลดเชนใบรับรองที่สมบูรณ์ไปยังคีย์สโตร์
รายการอ้างอิง
กลุ่มใบรับรองไม่สมบูรณ์หรือไม่ถูกต้อง
การวินิจฉัย
- รับ CN ที่ใช้ในใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ที่ระบุ คุณใช้ Edge Management API ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
-
ดูชื่อใบรับรองในคีย์สโตร์:
หากคุณเป็นผู้ใช้ Private Cloud
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
หากคุณเป็นผู้ใช้ Public Cloud ให้ทำดังนี้
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
หากคุณเป็นผู้ใช้ Cloud Cloud สาธารณะ ให้ทำดังนี้
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 ไม่สำเร็จ
การวินิจฉัย
- ตรวจสอบว่าเกิดข้อผิดพลาดที่การเชื่อมต่อ northbound หรือ southbound หรือไม่ ดูคำแนะนำเพิ่มเติมเกี่ยวกับการตัดสินนี้ได้ที่ การระบุที่มาของปัญหา
- เรียกใช้ยูทิลิตี
tcpdump เพื่อรวบรวมข้อมูลเพิ่มเติม ดังนี้
- หากคุณเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
tcpdump
ที่ไคลเอ็นต์หรือเซิร์ฟเวอร์ที่เกี่ยวข้องได้ ไคลเอ็นต์อาจเป็นแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อไปทางเหนือ) หรือตัวประมวลผลข้อความ (สำหรับการเชื่อมต่อขาออกหรือเชื่อมต่อทางใต้) เซิร์ฟเวอร์อาจเป็น Edge Router (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อไปทางทิศเหนือ) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือเชื่อมต่อทางใต้) ขึ้นอยู่กับการดำเนินการของคุณในขั้นตอนที่ 1 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ คุณจะรวบรวมข้อมูล
tcpdump
ได้เฉพาะในแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อเหนือ) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือขาออก) เนื่องจากคุณไม่มีสิทธิ์เข้าถึงเราเตอร์ Edge หรือผู้ประมวลผลข้อมูลข้อความ
tcpdump -i any -s 0 host IP address -w File name
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่งtcpdump
ดูข้อมูล tcpdump ได้ - หากคุณเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
- วิเคราะห์ข้อมูล
tcpdump
โดยใช้ Wireshark หรือเครื่องมือที่คล้ายกัน - จากเอาต์พุต
tcpdump
ให้ระบุโฮสต์ (ไคลเอ็นต์หรือเซิร์ฟเวอร์) ที่ปฏิเสธใบรับรองในขั้นตอนการยืนยัน - คุณจะเรียกดูใบรับรองที่ส่งจากอีกฝั่งหนึ่งได้จากเอาต์พุต
tcpdump
โดยที่ข้อมูลไม่ได้เข้ารหัส วิธีนี้มีประโยชน์ในการเปรียบเทียบว่าใบรับรองนี้ตรงกับใบรับรองที่มีอยู่ใน Truststore หรือไม่ - ตรวจสอบตัวอย่าง
tcpdump
สำหรับการสื่อสาร SSL ระหว่างผู้ประมวลผลข้อความและเซิร์ฟเวอร์แบ็กเอนด์ตัวอย่าง
tcpdump
ที่แสดงข้อผิดพลาดเกี่ยวกับใบรับรองที่ไม่รู้จัก
- ผู้ประมวลผลข้อความ (ไคลเอ็นต์) จะส่ง "Client Hello" ไปยังเซิร์ฟเวอร์แบ็กเอนด์ (เซิร์ฟเวอร์) ในข้อความ #59
- เซิร์ฟเวอร์แบ็กเอนด์จะส่ง "Server Hello" ไปยังผู้ประมวลผลข้อความในข้อความ #61
- ทั้ง 2 ฝ่ายตรวจสอบโปรโตคอลและอัลกอริทึมชุดการเข้ารหัสที่ใช้ร่วมกัน
- เซิร์ฟเวอร์แบ็กเอนด์จะส่งข้อความ Certificate และ Server Hello Done ไปยัง Message Processor ในข้อความ #68
- ผู้ประมวลผลข้อความจะส่งการแจ้งเตือนร้ายแรง "Description: Certificate Unknown" ในข้อความ #70
- เมื่ออ่านข้อความ #70 แล้ว ไม่มีรายละเอียดเพิ่มเติมนอกเหนือจากข้อความแจ้งเตือนดังที่แสดงด้านล่าง
- ตรวจสอบข้อความ #68 เพื่อรับรายละเอียดเกี่ยวกับใบรับรองที่ส่งโดยเซิร์ฟเวอร์แบ็กเอนด์ ดังที่แสดงในกราฟิกต่อไปนี้
- ใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์และเชนที่สมบูรณ์จะมีอยู่ในส่วน "ใบรับรอง" ดังที่แสดงในรูปภาพด้านบน
- หากพบว่าเราเตอร์ (ทางเหนือ) หรือผู้ประมวลผลข้อมูลข้อความ (ทางเหนือ) ไม่รู้จักใบรับรองตามตัวอย่างที่แสดงด้านบน ให้ทำตามขั้นตอนต่อไปนี้
- รับใบรับรองและเชนที่จัดเก็บใน Truststore ที่ระบุ (ดูการกำหนดค่าโฮสต์เสมือนสำหรับการกำหนดค่าเราเตอร์และปลายทางเป้าหมายสำหรับตัวประมวลผลข้อความ) คุณใช้ 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 ของเราเตอร์ (northbound) หรือ Message Processor (southbound) ตรงกับใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ของแอปพลิเคชันไคลเอ็นต์ (ทางเหนือ) หรือเซิร์ฟเวอร์เป้าหมาย (southbound) หรือใบรับรองที่ได้รับจากเอาต์พุต
tcpdump
หากมีข้อมูลที่ไม่ตรงกัน แสดงว่าการติดต่อผ่าน TLS/SSL ทำไม่สำเร็จ
- รับใบรับรองและเชนที่จัดเก็บใน Truststore ที่ระบุ (ดูการกำหนดค่าโฮสต์เสมือนสำหรับการกำหนดค่าเราเตอร์และปลายทางเป้าหมายสำหรับตัวประมวลผลข้อความ) คุณใช้ API ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
- หากพบว่าแอปพลิเคชันไคลเอ็นต์ (ทางเหนือ) หรือเซิร์ฟเวอร์เป้าหมาย (southbound) ไม่รู้จักใบรับรอง ให้ทำตามขั้นตอนต่อไปนี้
- รับชุดใบรับรองที่สมบูรณ์ซึ่งใช้ในใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ที่ระบุ (ดูการกำหนดค่าโฮสต์เสมือนสำหรับการกำหนดค่าเราเตอร์และปลายทางเป้าหมายสำหรับตัวประมวลผลข้อความ) คุณใช้ 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
-
รับชื่อใบรับรองในคีย์สโตร์:
- ตรวจสอบว่าใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ของเราเตอร์ (northbound) หรือ Message Processor (southbound) ตรงกับใบรับรองที่จัดเก็บไว้ใน Truststore ของแอปพลิเคชันไคลเอ็นต์ (ทางเหนือ) หรือเซิร์ฟเวอร์เป้าหมาย (southbound) หรือใบรับรองที่ได้รับจากเอาต์พุต
tcpdump
หรือไม่ หากข้อมูลไม่ตรงกัน แสดงว่าการติดต่อดังกล่าวเกิดจากแฮนด์เชค SSL ไม่สำเร็จ
- รับชุดใบรับรองที่สมบูรณ์ซึ่งใช้ในใบรับรองที่จัดเก็บไว้ในคีย์สโตร์ที่ระบุ (ดูการกำหนดค่าโฮสต์เสมือนสำหรับการกำหนดค่าเราเตอร์และปลายทางเป้าหมายสำหรับตัวประมวลผลข้อความ) คุณใช้ API ต่อไปนี้เพื่อดูรายละเอียดของใบรับรองได้
- หากพบว่าใบรับรองที่เซิร์ฟเวอร์/ไคลเอ็นต์ส่งหมดอายุ ไคลเอ็นต์/เซิร์ฟเวอร์ที่เป็นผู้รับจะปฏิเสธใบรับรอง และคุณจะเห็นข้อความแจ้งเตือนต่อไปนี้ใน
tcpdump
การแจ้งเตือน (ระดับ: ร้ายแรง, คำอธิบาย: ใบรับรองหมดอายุ)
- ตรวจสอบว่าใบรับรองในคีย์สโตร์ของโฮสต์ที่เหมาะสมหมดอายุแล้ว
ความละเอียด
หากต้องการแก้ไขปัญหาที่ระบุในตัวอย่างข้างต้น ให้อัปโหลดใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ที่ถูกต้องไปยังผู้เชื่อถือในตัวประมวลผลข้อความ
ตารางต่อไปนี้สรุปขั้นตอนในการแก้ไขปัญหาโดยอิงตามสาเหตุของปัญหา
สาเหตุ | คำอธิบาย | ความละเอียด |
ใบรับรองหมดอายุ |
NorthBound
|
อัปโหลดใบรับรองใหม่และเชนที่สมบูรณ์ไปยังคีย์สโตร์ในโฮสต์ที่เหมาะสม |
SouthBound
|
อัปโหลดใบรับรองใหม่และเชนที่สมบูรณ์ไปยังคีย์สโตร์ในโฮสต์ที่เหมาะสม | |
ใบรับรองที่ไม่รู้จัก |
NorthBound
|
อัปโหลดใบรับรองที่ถูกต้องไปยัง Truststore ในโฮสต์ที่เหมาะสม |
SouthBound
|
อัปโหลดใบรับรองที่ถูกต้องไปยัง Truststore ในโฮสต์ที่เหมาะสม |
เซิร์ฟเวอร์ที่เปิดใช้ SNI
ความล้มเหลวของแฮนด์เชค TLS/SSL อาจเกิดขึ้นเมื่อไคลเอ็นต์สื่อสารกับเซิร์ฟเวอร์ที่เปิดใช้ Server Name Indication (SNI) แต่ไคลเอ็นต์ไม่ได้เปิดใช้ SNI ซึ่งอาจเกิดขึ้นที่เส้นเชื่อมต่อทางทิศเหนือหรือทิศใต้ใน Edge
ก่อนอื่นคุณต้องระบุชื่อโฮสต์และหมายเลขพอร์ตของเซิร์ฟเวอร์ที่ใช้และตรวจสอบว่าเปิดใช้ SNI อยู่หรือไม่
การระบุเซิร์ฟเวอร์ที่เปิดใช้ SNI
- เรียกใช้คำสั่ง
openssl
และพยายามเชื่อมต่อกับชื่อโฮสต์ของเซิร์ฟเวอร์ที่เกี่ยวข้อง (Edge Router หรือเซิร์ฟเวอร์แบ็กเอนด์) โดยไม่ส่งชื่อเซิร์ฟเวอร์ ดังที่แสดงด้านล่างopenssl s_client -connect hostname:port
คุณอาจได้รับใบรับรองและบางครั้งคุณอาจเห็นความล้มเหลวในการติดต่อในคำสั่ง openssl ดังที่แสดงด้านล่าง
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 ไม่ได้
การวินิจฉัย
- ตรวจสอบว่าเกิดข้อผิดพลาดที่การเชื่อมต่อ northbound หรือ southbound หรือไม่ ดูคำแนะนำเพิ่มเติมเกี่ยวกับการตัดสินนี้ได้ที่ การระบุที่มาของปัญหา
- เรียกใช้ยูทิลิตี
tcpdump เพื่อรวบรวมข้อมูลเพิ่มเติม ดังนี้
- หากคุณเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
tcpdump
ที่ไคลเอ็นต์หรือเซิร์ฟเวอร์ที่เกี่ยวข้องได้ ไคลเอ็นต์อาจเป็นแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อไปทางเหนือ) หรือตัวประมวลผลข้อความ (สำหรับการเชื่อมต่อขาออกหรือเชื่อมต่อทางใต้) เซิร์ฟเวอร์อาจเป็น Edge Router (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อไปทางทิศเหนือ) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือเชื่อมต่อทางใต้) ขึ้นอยู่กับการดำเนินการของคุณในขั้นตอนที่ 1 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ คุณจะรวบรวมข้อมูล
tcpdump
ได้เฉพาะในแอปไคลเอ็นต์ (สำหรับการเชื่อมต่อขาเข้าหรือการเชื่อมต่อเหนือ) หรือเซิร์ฟเวอร์แบ็กเอนด์ (สำหรับการเชื่อมต่อขาออกหรือขาออก) เนื่องจากคุณไม่มีสิทธิ์เข้าถึงเราเตอร์ Edge หรือผู้ประมวลผลข้อมูลข้อความ
tcpdump -i any -s 0 host IP address -w File name
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่งtcpdump
ดูข้อมูล tcpdump ได้ - หากคุณเป็นผู้ใช้ Private Cloud คุณจะรวบรวมข้อมูล
- วิเคราะห์เอาต์พุต
tcpdump
โดยใช้ Wireshark หรือเครื่องมือที่คล้ายกัน - ตัวอย่างการวิเคราะห์
tcpdump
โดยใช้ Wireshark มีดังนี้- ในตัวอย่างนี้ แฮนด์เชค TLS/SSL เกิดขึ้นระหว่างตัวประมวลผลข้อความ Edge และเซิร์ฟเวอร์แบ็กเอนด์ (การเชื่อมต่อขาออก)
- ข้อความ #4 ในเอาต์พุต
tcpdump
ด้านล่างแสดงให้เห็นว่าผู้ประมวลผลข้อความ (ต้นทาง) ส่งข้อความ "Client Hello" ไปยังเซิร์ฟเวอร์แบ็กเอนด์ (ปลายทาง) - การเลือกข้อความ "Client Hello" แสดงว่าผู้ประมวลผลข้อความใช้โปรโตคอล TLSv1.2
- ข้อความ #4 แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์รับทราบข้อความ "Client Hello" จากผู้ประมวลผลข้อความ
- เซิร์ฟเวอร์แบ็กเอนด์จะส่งการแจ้งเตือนร้ายแรง : แฮนด์เชคล้มเหลวไปยังผู้ประมวลผลข้อความ (ข้อความ #5) ทันที ซึ่งหมายความว่าแฮนด์เชค TLS/SSL ล้มเหลวและการเชื่อมต่อจะถูกปิด
- ตรวจสอบข้อความ #6 เพื่อค้นหาข้อมูลต่อไปนี้
- เซิร์ฟเวอร์แบ็กเอนด์รองรับโปรโตคอล TLSv1.2 ซึ่งหมายความว่าโปรโตคอลที่ตรงกันระหว่างเครื่องมือประมวลผลข้อความและเซิร์ฟเวอร์แบ็กเอนด์
- อย่างไรก็ตาม เซิร์ฟเวอร์แบ็กเอนด์จะยังคงส่งการแจ้งเตือนร้ายแรง: แฮนด์เชคล้มเหลวไปยังผู้ประมวลผลข้อความดังที่แสดงในรูปภาพด้านล่าง
- ข้อผิดพลาดนี้อาจเกิดขึ้นจากสาเหตุข้อใดข้อหนึ่งต่อไปนี้
- ตัวประมวลผลข้อความไม่ได้ใช้อัลกอริทึมชุดการเข้ารหัสที่เซิร์ฟเวอร์แบ็กเอนด์รองรับ
- เซิร์ฟเวอร์แบ็กเอนด์เปิดใช้ SNI อยู่ แต่แอปพลิเคชันไคลเอ็นต์ไม่ส่งชื่อเซิร์ฟเวอร์
- ตรวจสอบข้อความ #3 (สวัสดีไคลเอ็นต์) ในเอาต์พุต
tcpdump
ให้ละเอียดยิ่งขึ้น โปรดทราบว่าส่วนขยาย:server_name ขาดหายไป ตามที่แสดงด้านล่าง - ซึ่งเป็นการยืนยันว่าผู้ประมวลผลข้อความไม่ได้ส่ง server_name ไปยังเซิร์ฟเวอร์แบ็กเอนด์ที่เปิดใช้ SNI
- ซึ่งเป็นสาเหตุของความล้มเหลวในแฮนด์เชค TLS/SSL และเหตุผลที่เซิร์ฟเวอร์แบ็กเอนด์ส่งการแจ้งเตือนร้ายแรง: แฮนด์เชคล้มเหลวไปยังผู้ประมวลผลข้อความ
- ตรวจสอบว่าได้ตั้งค่า
jsse.enableSNIExtension property
ในsystem.properties
เป็น false ในตัวประมวลผลข้อความเพื่อยืนยันว่าไม่ได้เปิดใช้งานตัวประมวลผลข้อความเพื่อสื่อสารกับเซิร์ฟเวอร์ที่เปิดใช้ SNI
ความละเอียด
ทำให้ตัวประมวลผลข้อความสื่อสารกับเซิร์ฟเวอร์ที่เปิดใช้ SNI โดยทำตามขั้นตอนต่อไปนี้
- สร้างไฟล์
/opt/apigee/customer/application/message-processor.properties
(หากยังไม่มี) - เพิ่มบรรทัดต่อไปนี้ในไฟล์นี้
conf_system_jsse.enableSNIExtension=true
- กำหนดเจ้าของไฟล์นี้เป็น
apigee:apigee
:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- รีสตาร์ทเครื่องมือประมวลผลข้อความ
/opt/apigee/apigee-service/bin/apigee-service message-processor restart
- ถ้าคุณมีเครื่องมือประมวลผลข้อความมากกว่า 1 เครื่อง ให้ทำตามขั้นตอนที่ 1 ถึง #4 ซ้ำในเครื่องมือประมวลผลข้อความทั้งหมด
หากคุณหาสาเหตุของแฮนด์เชค TLS/SSL ไม่สำเร็จและแก้ไขปัญหาแล้ว หรือต้องการความช่วยเหลือเพิ่มเติม โปรดติดต่อทีมสนับสนุนของ Apigee Edge แชร์รายละเอียดทั้งหมดเกี่ยวกับปัญหาพร้อมกับเอาต์พุต tcpdump