คุณกำลังดูเอกสารประกอบ Apigee Edge
  ไปที่
     เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
    แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ 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
    เทคนิคที่เหมาะสมในการแก้ไขปัญหา Playbook นี้อธิบายวิธีแก้ปัญหา
    ข้อผิดพลาดนี้ หากคุณเห็นข้อความแสดงข้อผิดพลาด 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 ระหว่างตัวประมวลผลข้อความของ Apigee Edge กับ เซิร์ฟเวอร์แบ็กเอนด์ ดังนี้
- หาก Truststore ของโปรแกรมประมวลผลข้อความของ Apigee Edge มีลักษณะดังนี้
        
- มีเชนใบรับรองที่ไม่ตรงกับใบรับรองทั้งหมดของเซิร์ฟเวอร์แบ็กเอนด์ กลุ่มใบรับรอง OR
 - ไม่มีเชนใบรับรองทั้งหมดของเซิร์ฟเวอร์แบ็กเอนด์
 
 - หากเชนใบรับรองที่เซิร์ฟเวอร์แบ็กเอนด์แสดง ให้ทําดังนี้
        
- มี ชื่อโดเมนที่ผ่านการรับรองแบบเต็ม (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
- ลงชื่อเข้าใช้ Apigee Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
 เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา
        - ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
 - เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
 พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
messaging.adaptors.http.flow.SslHandshakeFailedตามที่แสดง ด้านล่าง
ข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
messaging.adaptors.http.flow.SslHandshakeFailedจะแสดงเป็น แสดงอยู่ด้านล่าง
คลิกดูบันทึก และขยายแถวสำหรับคำขอที่ล้มเหลว
        - จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
          
- รหัสข้อความคำขอ
 - รหัสสถานะ: 
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 ล้มเหลว เนื่องจาก Message Processor ของ Apigee Edge ไม่สามารถตรวจสอบความถูกต้องของเซิร์ฟเวอร์แบ็กเอนด์ ใบรับรอง 
 - ข้อผิดพลาด:  
 - ไปที่ระยะ AX (Analytics Data Recorded) ในการติดตามและคลิก
 เลื่อนลงไปที่ส่วนส่วนหัวข้อผิดพลาดเกี่ยวกับรายละเอียดเฟส และระบุ ของ 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-code
ส่วนหัว ค่า X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
บันทึกของผู้ประมวลผลข้อความ
ขั้นตอนที่ 4: การใช้บันทึกโปรแกรมประมวลผลข้อความ
- กำหนดรหัสข้อความของหนึ่งในคำขอที่ล้มเหลวโดยใช้การตรวจสอบ API, เครื่องมือการติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
 ค้นหารหัสข้อความของคำขอในบันทึกเครื่องมือประมวลผลข้อความ (
/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 ระหว่างตัวประมวลผลข้อความล้มเหลว และเซิร์ฟเวอร์แบ็กเอนด์
ตามด้วยข้อยกเว้นของสแต็กเทรซโดยละเอียดดังที่แสดงด้านล่าง
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 ล้มเหลวเนื่องจากตัวประมวลผลข้อความของ Apigee Edge ตรวจสอบใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้
สาเหตุ: ใบรับรองหรือชุดใบรับรองใน Truststore ของ Message Processor ไม่ถูกต้อง/ไม่สมบูรณ์
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาด แหล่งที่มาของข้อผิดพลาดสำหรับข้อผิดพลาดที่พบโดยใช้ API การตรวจสอบ เครื่องมือการติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในหัวข้อทั่วไป ขั้นตอนการวินิจฉัย
 - หาก Fault Code คือ 
messaging.adaptors.http.flow.SslHandshakeFailedให้ทำดังนี้ ให้ระบุข้อความแสดงข้อผิดพลาดด้วยวิธีใดวิธีหนึ่งต่อไปนี้ - ค้นหา error.cause โดยใช้เครื่องมือติดตามตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
 - ค้นหาข้อยกเว้นโดยใช้บันทึกโปรแกรมประมวลผลข้อความตามที่อธิบายใน ขั้นตอนการวิเคราะห์ทั่วไป
 - ค้นหา 
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 ล้มเหลว เนื่องจาก Message Processor ของ Apigee Edge ยืนยันเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้ ใบรับรอง 
คุณแก้ไขข้อบกพร่องปัญหานี้ได้ 2 ระยะ ดังนี้
- ระยะที่ 1: กำหนดเชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์
 - ระยะที่ 2: เปรียบเทียบเชนใบรับรองที่จัดเก็บไว้ใน Truststore ของตัวประมวลผลข้อความ
 
ระยะที่ 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: โปรเซสเซอร์ข้อความ (แหล่งที่มา) ส่ง
                      
Client Helloไปยังเซิร์ฟเวอร์แบ็กเอนด์ (ปลายทาง) - แพ็กเก็ต #44: เซิร์ฟเวอร์แบ็กเอนด์รับทราบการรับ
                      
Client Helloข้อความจาก Message Processor - แพ็กเก็ต #45: เซิร์ฟเวอร์แบ็กเอนด์จะส่ง 
Server Helloพร้อมกับใบรับรองของข้อความนั้น - แพ็คเก็ตที่ 46: ผู้ประมวลผลข้อความรับทราบว่าได้รับ
                      
Server Helloข้อความและใบรับรอง แพ็กเก็ต #47: โปรแกรมประมวลผลข้อความจะส่ง
FIN, ACKข้อความตามด้วยRST, ACKในแพ็กเก็ต #48ซึ่งหมายความว่าการตรวจสอบใบรับรองเซิร์ฟเวอร์แบ็กเอนด์โดย ตัวประมวลผลข้อความล้มเหลว เนื่องจากเครื่องมือประมวลผลข้อความไม่มี ใบรับรองที่ตรงกับใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์หรือไม่เชื่อถือ ใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์กับใบรับรองที่มีอยู่ใน Truststore (ผู้ประมวลผลข้อมูลข้อความ)
คุณกลับไปตรวจสอบแพ็กเก็ต #45 และตรวจสอบใบรับรองได้ เชนที่ส่งโดยเซิร์ฟเวอร์แบ็กเอนด์
                    - ในตัวอย่างนี้ คุณจะเห็นว่าเซิร์ฟเวอร์ส่งใบรับรอง Leaf
                      ด้วย 
common name (CN) = mocktarget.apigee.netตามด้วย ใบรับรองกลางที่มีCN= GTS CA 1D4และใบรับรองรูท ด้วยCN = GTX Root R1 
หากคุณแน่ใจว่าการยืนยันการรับรองของเซิร์ฟเวอร์ไม่ผ่านการตรวจสอบ ไปที่ระยะที่ 2: เปรียบเทียบใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์ และใบรับรองที่เก็บไว้ใน Truststore ของ Message Processor
- แพ็กเก็ตที่ 43: โปรเซสเซอร์ข้อความ (แหล่งที่มา) ส่ง
                      
 
ระยะที่ 2
ระยะที่ 2: เปรียบเทียบใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์กับใบรับรองที่จัดเก็บไว้ใน Truststore ของเครื่องมือประมวลผลข้อความ
- กำหนดเชนใบรับรองของเซิร์ฟเวอร์แบ็กเอนด์
 - ระบุใบรับรองที่จัดเก็บไว้ใน Truststore ของตัวประมวลผลข้อความโดยใช้
            ขั้นตอนต่อไปนี้
            
รับชื่อการอ้างอิง 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 ใน Edge UI ให้เลือกสภาพแวดล้อม > ข้อมูลอ้างอิง จดชื่อใน คอลัมน์ข้อมูลอ้างอิงสำหรับข้อมูลอ้างอิง Truststore ที่เฉพาะเจาะจง นี่คือ ชื่อ 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จะแสดงชื่อเรื่องและผู้ออกดังนี้ใบแจ้ง/ใบรับรองหน่วยงาน:
"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 หากไม่ตรงกัน นั่นคือ ของปัญหานี้
จากตัวอย่างที่แสดงด้านบน เราจะมาดูใบรับรองทีละใบ
- ใบรับรอง Leaf:
              
จากเซิร์ฟเวอร์แบ็กเอนด์ ให้ทำดังนี้
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",
ใบรับรอง Leaf ที่จัดเก็บไว้ใน 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
ไม่มีใบรับรองรูทใน Message Processor Truststore
 เนื่องจากไม่มีใบรับรองรูทใน Truststore โปรแกรมประมวลผลข้อความมีข้อยกเว้นต่อไปนี้
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ไปยังลูกค้า แอปพลิเคชัน
- ใบรับรอง Leaf:
              
 
ความละเอียด
- ตรวจสอบว่าคุณมีชุดใบรับรองที่เหมาะสมและครบถ้วนของเซิร์ฟเวอร์แบ็กเอนด์
 - หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดทำตามวิธีการใน อัปเดตใบรับรอง TLS สำหรับระบบคลาวด์เพื่ออัปเดตใบรับรองเป็นของ Apigee Edge Truststore ของตัวประมวลผลข้อความ
 - หากคุณเป็นผู้ใช้ Private Cloud ให้ทำตามวิธีการใน อัปเดตใบรับรอง TLS สำหรับ Private Cloud เพื่ออัปเดตใบรับรองเป็น Truststore ของ Apigee Edge สำหรับ Message Processor
 
สาเหตุ: 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 ที่ถูกต้องของ เซิร์ฟเวอร์แบ็กเอนด์ในใบรับรอง Leaf หรือเอนทิตีที่เหมือนกับชื่อโฮสต์ ที่ระบุในปลายทางเป้าหมาย ให้อัปเดตคีย์สโตร์ของแบ็กเอนด์ด้วยฟังก์ชัน ชุดใบรับรองที่สมบูรณ์
 
เซิร์ฟเวอร์แบ็กเอนด์ที่ถูกต้อง
อัปเดตปลายทางเป้าหมายด้วยชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ที่ถูกต้อง
- หากมีการระบุชื่อโฮสต์ไม่ถูกต้องในปลายทางเป้าหมาย ให้อัปเดต ปลายทางปลายทางให้มีชื่อโฮสต์ที่ถูกต้องซึ่งตรงกับ 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เพื่อทำให้เกิดข้อผิดพลาดซ้ำ - ไฟล์การติดตามที่แสดงข้อผิดพลาด
 เอาต์พุตของคำสั่ง
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- แพ็กเก็ต TCP/IP ที่บันทึกในเซิร์ฟเวอร์แบ็กเอนด์
 
 - หากคุณเป็นผู้ใช้ Private Cloud ให้ระบุข้อมูลต่อไปนี้
        
- สังเกตข้อความแสดงข้อผิดพลาดทั้งหมด
 - แพ็กเกจพร็อกซี API
 - ไฟล์การติดตามที่แสดงข้อผิดพลาด
 - บันทึกสำหรับผู้ประมวลผลข้อมูลข้อความ 
/opt/apigee/var/log/edge-message-processor/logs/system.log - เอาต์พุตของคำสั่ง 
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_# - แพ็กเก็ต TCP/IP ที่บันทึกในเซิร์ฟเวอร์แบ็กเอนด์หรือ Message Processor
 - เอาต์พุตของ รับใบรับรองทั้งหมดสำหรับ Keystore หรือ Truststore API รวมถึงรายละเอียดของ ใบรับรองแต่ละใบที่ได้จากการใช้ รับรายละเอียดใบรับรองจาก Keystore หรือ Truststore API
 
 
ข้อมูลอ้างอิง
- ใบรับรองสายความน่าเชื่อถือ
 - คำสั่ง OpenSSL