คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์จะได้รับรหัสสถานะ HTTP 503 Service Unavailable พร้อมรหัสข้อผิดพลาด messaging.adaptors.http.flow.SslHandshakeFailed เป็นการตอบกลับสำหรับการเรียก API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์จะได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 503 Service Unavailable
นอกจากนี้ คุณอาจเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้
{
"fault":{
"faultstring":"SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
"detail":{
"errorcode":"messaging.adaptors.http.flow.SslHandshakeFailed"
}
}
}สาเหตุที่เป็นไปได้
คุณอาจได้รับรหัสสถานะ 503 Service Unavailable พร้อมรหัสข้อผิดพลาด
messaging.adaptors.http.flow.SslHandshakeFailed เนื่องจากกระบวนการแฮนด์เชค SSL
ระหว่าง Message Processor ของ Apigee Edge กับเซิร์ฟเวอร์แบ็กเอนด์ล้มเหลวด้วยเหตุผลหลายประการ ข้อความแสดงข้อผิดพลาดfaultstring มักจะระบุ
สาเหตุระดับสูงที่เป็นไปได้ซึ่งทำให้เกิดข้อผิดพลาดนี้
คุณต้องใช้เทคนิคที่เหมาะสมเพื่อแก้ปัญหาโดยขึ้นอยู่กับข้อความแสดงข้อผิดพลาดที่พบใน faultstring
เพลย์บุ๊กนี้จะอธิบายวิธีแก้ปัญหา
ข้อผิดพลาดนี้หากคุณเห็นข้อความแสดงข้อผิดพลาดSSL Handshake failed
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification
path to requested target ในfaultstring
ข้อผิดพลาดนี้เกิดขึ้นในระหว่างกระบวนการแฮนด์เชค SSL ระหว่าง Message Processor ของ Apigee Edge กับ เซิร์ฟเวอร์แบ็กเอนด์
- หาก truststore ของ Message Processor ของ Apigee Edge มีลักษณะดังนี้
- มีเชนใบรับรองที่ไม่ตรงกับเชนใบรับรองที่สมบูรณ์ของเซิร์ฟเวอร์แบ็กเอนด์ หรือ
- ไม่มีเชนใบรับรองที่สมบูรณ์ของเซิร์ฟเวอร์แบ็กเอนด์
- หากเชนใบรับรองที่เซิร์ฟเวอร์แบ็กเอนด์แสดงมีลักษณะดังนี้
- มี ชื่อโดเมนที่สมบูรณ์ในตัวเอง (FQDN) ซึ่งไม่ตรงกับชื่อโฮสต์ที่ระบุใน ปลายทางเป้าหมาย
- มีชุดใบรับรองที่ไม่ถูกต้องหรือไม่สมบูรณ์
สาเหตุที่เป็นไปได้ของปัญหานี้มีดังนี้
| สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้ได้กับ |
|---|---|---|
| ใบรับรองหรือกลุ่มใบรับรองไม่ถูกต้อง/ไม่สมบูรณ์ใน Truststore ของ Message Processor | ใบรับรองและ/หรือเชนของใบรับรองที่จัดเก็บไว้ใน Truststore ของ Message Processor ของ Apigee Edge ไม่ตรงกับเชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ หรือไม่มีเชนใบรับรองที่สมบูรณ์ของเซิร์ฟเวอร์แบ็กเอนด์ | ผู้ใช้ Edge Private และ Public Cloud |
| FQDN ในใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์และชื่อโฮสต์ในปลายทางเป้าหมายไม่ตรงกัน | ใบรับรองที่เซิร์ฟเวอร์แบ็กเอนด์แสดงมี FQDN ที่ไม่ตรงกับชื่อโฮสต์ที่ระบุในปลายทางเป้าหมาย | ผู้ใช้ Edge Private และ Public Cloud |
| เซิร์ฟเวอร์แบ็กเอนด์แสดงใบรับรองหรือเชนใบรับรองที่ไม่ถูกต้อง/ไม่สมบูรณ์ | กลุ่มใบรับรองที่เซิร์ฟเวอร์แบ็กเอนด์แสดงไม่ถูกต้องหรือไม่สมบูรณ์ | ผู้ใช้ Edge Private และ Public Cloud |
ขั้นตอนการวินิจฉัยที่พบบ่อย
ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
ขั้นตอนที่ 1: การใช้การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนไปใช้องค์กรที่คุณต้องการตรวจสอบปัญหา
- ไปที่หน้าวิเคราะห์ > การตรวจสอบ API > ตรวจสอบ
- เลือกกรอบเวลาที่เฉพาะเจาะจงซึ่งคุณพบข้อผิดพลาด
พล็อตรหัสข้อบกพร่องเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
messaging.adaptors.http.flow.SslHandshakeFailedดังที่แสดง ด้านล่าง
ข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
messaging.adaptors.http.flow.SslHandshakeFailedจะแสดง ดังที่แสดงด้านล่าง
คลิกดูบันทึก แล้วขยายแถวสำหรับคำขอที่ไม่สำเร็จ
- จากหน้าต่างบันทึก ให้จดรายละเอียดต่อไปนี้
- รหัสข้อความคำขอ
- รหัสสถานะ:
503 - แหล่งที่มาของข้อผิดพลาด:
target - รหัสข้อบกพร่อง:
messaging.adaptors.http.flow.SslHandshakeFailed
Trace
ขั้นตอนที่ 2: การใช้เครื่องมือติดตาม
วิธีวิเคราะห์ข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้เซสชันการติดตามและอย่างใดอย่างหนึ่งต่อไปนี้
- รอให้เกิดข้อผิดพลาด
503 Service Unavailableที่มีรหัสข้อผิดพลาดmessaging.adaptors.http.flow.SslHandshakeFailedหรือ - หากทำให้เกิดปัญหาซ้ำได้ ให้ทำการเรียก API เพื่อทำให้เกิดปัญหาซ้ำ
503 Service Unavailable
- รอให้เกิดข้อผิดพลาด
ตรวจสอบว่าได้เปิดใช้แสดง FlowInfo ทั้งหมดแล้ว

- เลือกคำขอที่ล้มเหลวรายการใดรายการหนึ่ง แล้วตรวจสอบการติดตาม
- ไปยังส่วนต่างๆ ของการติดตาม และค้นหาจุดที่เกิดข้อผิดพลาด
โดยปกติแล้ว คุณจะเห็นข้อผิดพลาดหลังจากเฟสเริ่มโฟลว์คำขอเป้าหมาย ดังที่แสดงด้านล่าง

- จดค่าต่อไปนี้จากร่องรอย
- ข้อผิดพลาด:
SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target - error.cause:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target - error.class:
com.apigee.errors.http.server.ServiceUnavailableException - ค่าของข้อผิดพลาด
SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetแสดงว่า SSL Handshake ไม่สำเร็จ เนื่องจาก Message Processor ของ Apigee Edge ตรวจสอบใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้
- ข้อผิดพลาด:
- ไปที่เฟส AX (บันทึกข้อมูลวิเคราะห์) ในการติดตาม แล้วคลิก
เลื่อนลงไปที่ส่วนส่วนหัวของข้อผิดพลาดในรายละเอียดของเฟส และระบุค่าของ X-Apigee-fault-code และ X-Apigee-fault-source และ X-Apigee-Message-ID ตามที่แสดงด้านล่าง

- จดค่าของ X-Apigee-fault-code, X-Apigee-fault-source และ X-Apigee-Message-ID
| ส่วนหัวของข้อผิดพลาด | ค่า |
|---|---|
| X-Apigee-fault-code | messaging.adaptors.http.flow.SslHandshakeFailed |
| X-Apigee-fault-source | target |
| X-Apigee-Message-ID | MESSAGE_ID |
NGINX
ขั้นตอนที่ 3: การใช้บันทึกการเข้าถึง NGINX
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- หากเป็นผู้ใช้ Private Cloud คุณจะใช้บันทึกการเข้าถึง NGINX เพื่อระบุ
ข้อมูลสำคัญเกี่ยวกับ HTTP
503 Service Unavailableได้ ตรวจสอบบันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- ค้นหาว่ามี
503ข้อผิดพลาดที่มีรหัสข้อผิดพลาดmessaging.adaptors.http.flow.SslHandshakeFailedในช่วงระยะเวลาที่เฉพาะเจาะจง (หากปัญหาเกิดขึ้นใน อดีต) หรือมีคำขอใดที่ยังคงล้มเหลวด้วย503หรือไม่ หากพบ
503ข้อผิดพลาดที่มีX-Apigee-fault-code ตรงกับ ค่าของmessaging.adaptors.http.flow.SslHandshakeFailedให้ พิจารณาค่าของ X-Apigee-fault-sourceตัวอย่างข้อผิดพลาด 503 จากบันทึกการเข้าถึงของ NGINX
รายการตัวอย่างจากบันทึกการเข้าถึง NGINX ด้านบนมีค่าต่อไปนี้สำหรับ X-Apigee-fault-code และ X-Apigee-fault-source:
ส่วนหัว ค่า X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
บันทึกของ Message Processor
ขั้นตอนที่ 4: การใช้บันทึกของ Message Processor
- กำหนดรหัสข้อความของคำขอที่ล้มเหลวรายการใดรายการหนึ่งโดยใช้การตรวจสอบ API, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวินิจฉัยทั่วไป
ค้นหารหัสข้อความคำขอที่เฉพาะเจาะจงในบันทึกของ Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log) คุณอาจเห็นข้อผิดพลาดต่อไปนี้org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context.handshakeFailed() : SSLClientChannel[Connected: Remote:X.X.X.X:443 Local:192.168.194.140:55102]@64596 useCount=1 bytesRead=0 bytesWritten=0 age=233ms lastIO=233ms isOpen=true handshake failed, message: General SSLEngine problemข้อผิดพลาดข้างต้นแสดงว่าแฮนด์เชค SSL ไม่สำเร็จระหว่าง Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์
จากนั้นจะมีการยกเว้นพร้อมด้วยสแต็กเทรซโดยละเอียดดังที่แสดงด้านล่าง
org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onException() : RequestWriteListener.onException(HTTPRequest@1522922c) javax.net.ssl.SSLHandshakeException: General SSLEngine problem at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478) at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535) ... <snipped> Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem at sun.security.ssl.Alerts.getSSLException(Alerts.java:203) at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728) ... <snipped>Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302) ... <snipped>โปรดทราบว่าการแฮนด์เชคไม่สำเร็จเกิดจากสาเหตุต่อไปนี้
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetซึ่งบ่งชี้ว่าแฮนด์เชค SSL ไม่สำเร็จเนื่องจาก Message Processor ของ Apigee Edge ตรวจสอบใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้
สาเหตุ: ใบรับรองหรือกลุ่มใบรับรองไม่ถูกต้อง/ไม่สมบูรณ์ใน Truststore ของ Message Processor
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาด แหล่งที่มาของข้อผิดพลาดสำหรับข้อผิดพลาดที่พบโดยใช้การตรวจสอบ API เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวินิจฉัยที่พบบ่อย
- หากรหัสข้อผิดพลาดคือ
messaging.adaptors.http.flow.SslHandshakeFailedให้ ระบุข้อความแสดงข้อผิดพลาดโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้ - ค้นหา error.cause โดยใช้เครื่องมือติดตามตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยทั่วไป
- ค้นหายกเว้นโดยใช้บันทึก Message Processor ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยที่พบบ่อย
- ค้นหา
faultstringจากการตอบกลับข้อผิดพลาดในการเรียก API ดังที่เห็นใน ข้อความแสดงข้อผิดพลาด - หากข้อความแสดงข้อผิดพลาดคือ
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"แสดงว่า SSL Handshake ไม่สำเร็จ เนื่องจาก Message Processor ของ Apigee Edge ไม่สามารถตรวจสอบใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ ได้
คุณสามารถแก้ไขข้อบกพร่องของปัญหานี้ได้ 2 ระยะ ดังนี้
- ระยะที่ 1: กำหนดเชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์
- ระยะที่ 2: เปรียบเทียบห่วงโซ่ใบรับรองที่จัดเก็บไว้ใน Truststore ของ Message Processor
ระยะที่ 1
ระยะที่ 1: กำหนดเชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์
ใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อกำหนดห่วงโซ่ใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์
openssl
เรียกใช้opensslคำสั่งกับชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์
ดังนี้
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
จดบันทึกชุดใบรับรองจากเอาต์พุตของคำสั่งด้านบน
ตัวอย่างเชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์จากเอาต์พุตจากคำสั่ง openssl:
Certificate chain 0 s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
tcpdump
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ให้บันทึกแพ็กเก็ต TCP/IP ในเซิร์ฟเวอร์แบ็กเอนด์
- หากเป็นผู้ใช้ Private Cloud คุณจะบันทึกแพ็กเก็ต TCP/IP ในเซิร์ฟเวอร์แบ็กเอนด์หรือ Message Processor ได้ ขอแนะนำให้บันทึกใน เซิร์ฟเวอร์แบ็กเอนด์เนื่องจากแพ็กเก็ตจะได้รับการถอดรหัสในเซิร์ฟเวอร์แบ็กเอนด์
ใช้คำสั่ง tcpdump ต่อไปนี้เพื่อบันทึกแพ็กเก็ต TCP/IP
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
วิเคราะห์แพ็กเก็ต TCP/IP โดยใช้เครื่องมือ Wireshark หรือเครื่องมือที่คล้ายกันที่คุณคุ้นเคย
ตัวอย่างการวิเคราะห์ Tcpdump
- แพ็กเก็ต #43: Message Processor (แหล่งที่มา) ส่งข้อความ
Client Helloไปยังเซิร์ฟเวอร์แบ็กเอนด์ (ปลายทาง) - แพ็กเก็ต #44: เซิร์ฟเวอร์แบ็กเอนด์ตอบรับการรับ
Client Helloข้อความจาก Message Processor - แพ็กเก็ต #45: เซิร์ฟเวอร์แบ็กเอนด์ส่งข้อความ
Server Helloพร้อมกับใบรับรอง - แพ็กเก็ต #46: Message Processor รับทราบการรับ
Server Helloข้อความและใบรับรอง แพ็กเก็ต #47: ตัวประมวลผลข้อความจะส่งข้อความ
FIN, ACKตามด้วยRST, ACKในแพ็กเก็ต #48ซึ่งบ่งชี้ว่าการตรวจสอบใบรับรองเซิร์ฟเวอร์แบ็กเอนด์โดย Message Processor ไม่สำเร็จ เนื่องจาก Message Processor ไม่มีใบรับรองที่ตรงกับใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ หรือไม่สามารถเชื่อถือใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ด้วยใบรับรองที่มีอยู่ใน Truststore ของ Message Processor
คุณสามารถย้อนกลับไปตรวจสอบแพ็กเก็ต #45 และพิจารณาห่วงโซ่ใบรับรอง ที่เซิร์ฟเวอร์แบ็กเอนด์ส่งมา
- ในตัวอย่างนี้ คุณจะเห็นว่าเซิร์ฟเวอร์ได้ส่งใบรับรองลีฟ
พร้อมด้วย
common name (CN) = mocktarget.apigee.netตามด้วย ใบรับรองกลางที่มีCN= GTS CA 1D4และใบรับรองรูท ที่มีCN = GTX Root R1
หากคุณทราบว่าการตรวจสอบใบรับรองของเซิร์ฟเวอร์ไม่สำเร็จ ให้ ไปที่ระยะที่ 2: เปรียบเทียบใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ กับใบรับรองที่จัดเก็บไว้ใน Truststore ของ Message Processor
- แพ็กเก็ต #43: Message Processor (แหล่งที่มา) ส่งข้อความ
ระยะที่ 2
ระยะที่ 2: เปรียบเทียบใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์กับใบรับรองที่จัดเก็บไว้ใน Truststore ของ Message Processor
- กำหนดกลุ่มใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์
- ระบุใบรับรองที่จัดเก็บไว้ใน Truststore ของ Message Processor โดยใช้
ขั้นตอนต่อไปนี้
รับชื่ออ้างอิง Truststore จากองค์ประกอบ
TrustStoreในส่วนSSLInfoในTargetEndpointมาดูตัวอย่างส่วน
SSLInfoในการกำหนดค่าTargetEndpointกัน<TargetEndpoint name="default"> ... <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKey</KeyAlias> <TrustStore> ref://myCompanyTrustStoreRef </TrustStore> </SSLInfo> </HTTPTargetConnection> ... </TargetEndpoint>- ในตัวอย่างด้านบน ชื่ออ้างอิง
TrustStoreคือmyCompanyTruststoreRef ใน UI ของ Edge ให้เลือกสภาพแวดล้อม > ข้อมูลอ้างอิง จดชื่อในคอลัมน์ข้อมูลอ้างอิงสำหรับการอ้างอิง Truststore ที่เฉพาะเจาะจง ซึ่งจะเป็นชื่อที่เก็บที่เชื่อถือได้ ของคุณ
ในตัวอย่างด้านบน ชื่อ Truststore คือ
myCompanyTruststoreRef:
myCompanyTruststore
รับใบรับรองที่จัดเก็บไว้ใน Truststore (กำหนดไว้ในขั้นตอนก่อนหน้า) โดยใช้ API ต่อไปนี้
รับใบรับรองทั้งหมดสำหรับคีย์สโตร์หรือ Truststore API นี้แสดงรายการใบรับรองทั้งหมด ใน Truststore ที่เฉพาะเจาะจง
ผู้ใช้ระบบคลาวด์สาธารณะ:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
ผู้ใช้ Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
สถานที่:
- ORGANIZATION_NAME คือชื่อองค์กร
- ENVIRONMENT_NAME คือชื่อของสภาพแวดล้อม
- KEYSTORE_NAME คือชื่อของที่เก็บคีย์
- $TOKEN จะตั้งค่าเป็นโทเค็นเพื่อการเข้าถึง OAuth 2.0 ตามที่อธิบายไว้ใน รับโทเค็นเพื่อการเข้าถึง OAuth 2.0
- ตัวเลือก
curlที่ใช้ในตัวอย่างนี้อธิบายไว้ใน ใช้ curl
ตัวอย่างเอาต์พุต:
ใบรับรองจาก Truststore ตัวอย่าง
myCompanyTruststoreมีดังนี้[ "serverCert" ]
-
ดูรายละเอียดใบรับรองสำหรับใบรับรองที่เฉพาะเจาะจงจาก Keystore หรือ Truststore
API นี้จะแสดงข้อมูลเกี่ยวกับใบรับรองที่เฉพาะเจาะจงใน
Truststore ที่เฉพาะเจาะจง
ผู้ใช้ระบบคลาวด์สาธารณะ:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
ผู้ใช้ Private Cloud
curl -v -X GET http://MANAGEMENT_HOST:PORT_#>/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
สถานที่:
- ORGANIZATION_NAME คือชื่อองค์กร
- ENVIRONMENT_NAME คือชื่อของสภาพแวดล้อม
- KEYSTORE_NAME คือชื่อของที่เก็บคีย์
- CERT_NAME คือชื่อของใบรับรอง
- $TOKEN จะตั้งค่าเป็นโทเค็นเพื่อการเข้าถึง OAuth 2.0 ตามที่อธิบายไว้ใน รับโทเค็นเพื่อการเข้าถึง OAuth 2.0
- ตัวเลือก
curlที่ใช้ในตัวอย่างนี้อธิบายไว้ใน ใช้ curl
ตัวอย่างเอาต์พุต
รายละเอียดของ
serverCertจะแสดงเรื่องและผู้ออกใบรับรองดังนี้ใบรับรอง Leaf/Entity:
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
ใบรับรองระดับกลาง:
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
ตรวจสอบว่าใบรับรองเซิร์ฟเวอร์จริงที่ได้รับในขั้นตอนที่ 1 และใบรับรอง ที่จัดเก็บไว้ใน Truststore ที่ได้รับในขั้นตอนที่ 3 ตรงกัน หากไม่ตรงกัน แสดงว่านั่นคือ สาเหตุของปัญหา
จากตัวอย่างที่แสดงด้านบน เรามาดูใบรับรองทีละรายการกัน
- ใบรับรอง
จากเซิร์ฟเวอร์แบ็กเอนด์
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
จาก Truststore ของ Message Processor (ไคลเอ็นต์)
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
ใบรับรองลีดที่จัดเก็บไว้ใน Truststore ตรงกับใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์
- ใบรับรองกลาง:
จากเซิร์ฟเวอร์แบ็กเอนด์
s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
จาก Truststore ของ Message Processor (ไคลเอ็นต์)
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
ใบรับรองกลางที่จัดเก็บไว้ใน Truststore ตรงกับใบรับรองของ เซิร์ฟเวอร์แบ็กเอนด์
- ใบรับรองรูท:
จากเซิร์ฟเวอร์แบ็กเอนด์
s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
ไม่มีใบรับรองรูทใน Truststore ของ Message Processor เลย
เนื่องจากไม่มีใบรับรองรูทใน Truststore Message Processor จึงแสดงข้อยกเว้นต่อไปนี้
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
และส่งกลับ
503 Service Unavailableพร้อมรหัสข้อผิดพลาดmessaging.adaptors.http.flow.SslHandshakeFailedไปยังแอปพลิเคชันไคลเอ็นต์
- ใบรับรอง
ความละเอียด
- ตรวจสอบว่าคุณมีเชนใบรับรองที่ถูกต้องและสมบูรณ์ของเซิร์ฟเวอร์แบ็กเอนด์
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ให้ทำตามวิธีการใน อัปเดตใบรับรอง TLS สำหรับระบบคลาวด์เพื่ออัปเดตใบรับรองไปยัง Trust Store ของตัวประมวลผลข้อความของ Apigee Edge
- หากคุณเป็นผู้ใช้ Private Cloud ให้ทำตามวิธีการใน อัปเดตใบรับรอง TLS สำหรับ Private Cloud เพื่ออัปเดตใบรับรองเป็น ที่เก็บที่เชื่อถือของ Message Processor ของ Apigee Edge
สาเหตุ: FQDN ในใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์และชื่อโฮสต์ในปลายทางเป้าหมายไม่ตรงกัน
หากเซิร์ฟเวอร์แบ็กเอนด์แสดงห่วงโซ่ใบรับรองที่มี FQDN ซึ่งไม่ตรงกับ
ชื่อโฮสต์ที่ระบุในปลายทางเป้าหมาย โปรแกรมประมวลผลข้อความของ Apigee Edge จะแสดงข้อผิดพลาด
SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification
path to requested target
การวินิจฉัย
- ตรวจสอบปลายทางเป้าหมายที่เฉพาะเจาะจงในพร็อกซี API ที่คุณพบข้อผิดพลาดนี้
และจดชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์
ตัวอย่าง TargetEndpoint:
<TargetEndpoint name="default"> … <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://backend.company.com/resource</URL> </HTTPTargetConnection> </TargetEndpoint>ในตัวอย่างข้างต้น ชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์คือ
backend.company.com ระบุ FQDN ในใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์โดยใช้คำสั่ง
opensslดังที่แสดงด้านล่างopenssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
เช่น
openssl s_client -connect backend.company.com:443
ตรวจสอบส่วน
Certificate chainและจด FQDN ที่ระบุเป็น ส่วนหนึ่งของ CN ในเรื่องของใบรับรองลีฟCertificate chain 0 s:/
CN=backend.apigee.neti:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1ในตัวอย่างข้างต้น FQDN ของเซิร์ฟเวอร์แบ็กเอนด์คือ
backend.apigee.net- หากชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ที่ได้จากขั้นตอนที่ 1 และ FQDN ที่ได้จาก ขั้นตอนที่ 2 ไม่ตรงกัน นั่นคือสาเหตุของข้อผิดพลาด
- ในตัวอย่างที่กล่าวถึงข้างต้น ชื่อโฮสต์ในปลายทางเป้าหมายคือ
backend.company.comอย่างไรก็ตาม ชื่อ FQDN ในใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ คือbackend.apigee.netเนื่องจากไม่ตรงกัน คุณจึงได้รับข้อผิดพลาดนี้
ความละเอียด
คุณแก้ไขปัญหานี้ได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
FQDN ที่ถูกต้อง
อัปเดตคลังคีย์ของเซิร์ฟเวอร์แบ็กเอนด์ด้วย FQDN ที่ถูกต้อง ใบรับรองที่ถูกต้องและสมบูรณ์ เชน:
- หากคุณไม่มีใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ที่มี FQDN ที่ถูกต้อง ให้จัดหาใบรับรองที่เหมาะสมจาก CA (ผู้ออกใบรับรอง) ที่เหมาะสม
ตรวจสอบว่าคุณมี เชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ที่ถูกต้องและสมบูรณ์
- เมื่อมีห่วงโซ่ใบรับรองที่ถูกต้องและสมบูรณ์พร้อม FQDN ที่ถูกต้องของ เซิร์ฟเวอร์แบ็กเอนด์ในใบรับรองแบบลีฟหรือใบรับรองเอนทิตีที่เหมือนกับชื่อโฮสต์ ที่ระบุไว้ในปลายทางเป้าหมาย ให้อัปเดตที่เก็บคีย์ของแบ็กเอนด์ด้วย ห่วงโซ่ใบรับรองที่สมบูรณ์
เซิร์ฟเวอร์แบ็กเอนด์ที่ถูกต้อง
อัปเดตปลายทางเป้าหมายด้วยชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ที่ถูกต้อง
- หากระบุชื่อโฮสต์ในปลายทางเป้าหมายไม่ถูกต้อง ให้อัปเดต ปลายทางเป้าหมายให้มีชื่อโฮสต์ที่ถูกต้องซึ่งตรงกับ FQDN ในใบรับรองของเซิร์ฟเวอร์ แบ็กเอนด์
บันทึกการเปลี่ยนแปลงในพร็อกซี API
ในตัวอย่างที่กล่าวถึงข้างต้น หากระบุชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ไม่ถูกต้อง คุณสามารถแก้ไขได้โดยใช้ FQDN จากใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ ซึ่งก็คือ
backend.apigee.netดังนี้<TargetEndpoint name="default"> … <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://backend.apigee.net/resource</URL> </HTTPTargetConnection> </TargetEndpoint>
สาเหตุ: เซิร์ฟเวอร์แบ็กเอนด์แสดงใบรับรองหรือกลุ่มใบรับรองที่ไม่ถูกต้อง/ไม่สมบูรณ์
การวินิจฉัย
- รับห่วงโซ่ใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์โดยการเรียกใช้คำสั่ง
opensslกับชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ดังนี้openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
จด
Certificate chainจากเอาต์พุตของคำสั่งด้านบนตัวอย่างเชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์จากเอาต์พุตจากคำสั่ง openssl:
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 - ตรวจสอบว่าคุณมีเชนใบรับรองที่ถูกต้องและสมบูรณ์ตามที่อธิบายไว้ใน การตรวจสอบเชนใบรับรอง
หากคุณไม่มีห่วงโซ่ใบรับรองที่สมบูรณ์และถูกต้องสำหรับเซิร์ฟเวอร์แบ็กเอนด์ นั่นคือสาเหตุของปัญหานี้
ในกลุ่มใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ตัวอย่างที่แสดงด้านบน ไม่มีใบรับรองรูท ดังนั้นคุณจึงได้รับข้อผิดพลาดนี้
ความละเอียด
อัปเดตที่เก็บคีย์ของเซิร์ฟเวอร์แบ็กเอนด์ด้วยกลุ่มใบรับรองที่ถูกต้องและครบถ้วนสมบูรณ์
ตรวจสอบว่าคุณมีเชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ที่ถูกต้องและสมบูรณ์
- อัปเดตกลุ่มใบรับรองที่ถูกต้องและสมบูรณ์ในคีย์สโตร์ของเซิร์ฟเวอร์แบ็กเอนด์
หากยังพบปัญหาอยู่ โปรดไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
หากยังพบปัญหาเดิมอยู่แม้จะทำตามวิธีการข้างต้นแล้ว โปรดรวบรวมข้อมูลการวินิจฉัยต่อไปนี้และติดต่อทีมสนับสนุนของ Apigee Edge
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ทำตามคำสั่ง
curlให้เสร็จสมบูรณ์เพื่อจำลองข้อผิดพลาด - ไฟล์การย้ายข้อมูลที่แสดงข้อผิดพลาด
เอาต์พุตของคำสั่ง
opensslopenssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- แพ็กเก็ต TCP/IP ที่บันทึกในเซิร์ฟเวอร์แบ็กเอนด์
- หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
- ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบ
- แพ็กเกจพร็อกซี API
- ไฟล์การย้ายข้อมูลที่แสดงข้อผิดพลาด
- บันทึกของ Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log - เอาต์พุตของคำสั่ง
opensslopenssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_# - แพ็กเก็ต TCP/IP ที่บันทึกไว้ในเซิร์ฟเวอร์แบ็กเอนด์หรือ Message Processor
- เอาต์พุตของ Get all certificates for a keystore or truststore API and also the details of each certificate obtained using Get Cert Details from a Keystore or Truststore API.
ข้อมูลอ้างอิง
- ห่วงโซ่ความน่าเชื่อถือของใบรับรอง
- คำสั่ง OpenSSL