502 Bad Gateway - ใบรับรองที่ลงชื่อด้วยตนเองในเชน

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์จะได้รับรหัสตอบกลับ HTTP ของ 502 พร้อมข้อความ Bad Gateway เป็นการตอบกลับสำหรับการเรียก API ใน Edge Microgateway

หรือผู้ดูแลระบบจะได้รับข้อผิดพลาด self signed certificate in certificate chain เมื่อเรียกใช้คำสั่ง edgemicro configure

ข้อความแสดงข้อผิดพลาด

ไคลเอ็นต์จะเห็นข้อความตอบกลับต่อไปนี้

HTTP/1.1 502 Bad Gateway

ตัวอย่างที่พบบ่อยของการตอบสนองต่อข้อผิดพลาดมีดังนี้

{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}
{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}

หรือข้อผิดพลาดนี้อาจเกิดขึ้นเมื่อเรียกใช้ edgemicro configure

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

สาเหตุที่เป็นไปได้

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาที่ใช้กับ
เซิร์ฟเวอร์เป้าหมายแสดงใบรับรองแบบ Self-signed Edge Microgateway จะยืนยันใบรับรองของเซิร์ฟเวอร์เป้าหมาย และหากไม่เชื่อถือ เซิร์ฟเวอร์ก็จะเกิดข้อผิดพลาดรันไทม์ ผู้ใช้ Edge Public และ Private Cloud
เซิร์ฟเวอร์การจัดการ Edge ของ Apigee ใช้ใบรับรองที่ลงนามด้วยตนเอง เมื่อกำหนดค่า Edge Microgateway เป็นครั้งแรก จะมีการเชื่อมต่อกับ Apigee Edge ผ่าน TLS เพื่อเริ่มต้น ถ้า Edge แสดงใบรับรองที่ลงนามด้วยตนเอง ใบรับรองนี้จะล้มเหลว ผู้ใช้ Edge Private Cloud

สาเหตุ: เซิร์ฟเวอร์เป้าหมายแสดงใบรับรองแบบ Self-signed

หากเซิร์ฟเวอร์เป้าหมายแสดง ใบรับรองแบบ Self-signed ที่การเชื่อมต่อ ทางใต้ Edge Microgateway จะเพิ่มข้อผิดพลาดนี้โดยค่าเริ่มต้นเพราะไม่เชื่อถือใบรับรองที่ลงชื่อด้วยตนเอง

การวินิจฉัย

คุณอาจพบข้อผิดพลาดต่อไปนี้ในบันทึก (/var/tmp/edgemicro-`hostname`- *.log)

2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80-
b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate
chain][SELF_SIGNED_CERT_IN_CHAIN][]

รหัสข้อผิดพลาด SELF_SIGNED_CERT_IN_CHAIN บ่งบอกว่า Edge Microgateway มีแนวโน้มที่จะได้รับใบรับรองที่ลงชื่อด้วยตนเองจากเซิร์ฟเวอร์เป้าหมายเป็นอย่างมาก หากต้องการตรวจสอบ ให้ทำตามขั้นตอนต่อไปนี้

  1. เรียกใช้คำสั่ง openssl ต่อไปนี้เพื่อยืนยันเชนใบรับรองของเซิร์ฟเวอร์เป้าหมาย
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. หากเชนใบรับรองของเซิร์ฟเวอร์เป้าหมายลงชื่อด้วยตนเอง แสดงว่าเป็นสาเหตุของปัญหา

    ในตัวอย่างต่อไปนี้ คุณจะเห็นว่าเซิร์ฟเวอร์เป้าหมายมีใบรับรองแบบ Self-signed

    echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
    
    depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority
    verify error:num=19:self signed certificate in certificate chain
    verify return:0
    DONE
    

ความละเอียด

  1. ทำงานร่วมกับทีมที่เป็นเจ้าของเซิร์ฟเวอร์เป้าหมายเพื่อจัดหาใบรับรอง TLS ที่เหมาะสมซึ่งลงนามโดยผู้ออกใบรับรอง (CA) ที่เชื่อถือได้
  2. หากทำไม่ได้ ให้พิจารณาตัวเลือกต่อไปนี้เพื่ออนุญาตใบรับรองแบบ Self-signed ใน Edge Microgateway

    ตัวเลือกที่ 1: ตั้งค่าพร็อพเพอร์ตี้ของระบบเพื่ออนุญาตให้ Edge Microgateway เชื่อถือใบรับรองทั้งหมด

    1. หากคุณใช้ Docker โปรดดู การใช้ CA ที่ Node.js ไม่เชื่อถือ
    2. หรือไม่เช่นนั้น ให้ส่งออกตัวแปรสภาพแวดล้อมชื่อ NODE_EXTRA_CA_CERTS ซึ่งชี้ไปยังไฟล์ CA รูท

      ข้อมูลนี้มีบันทึกอยู่ในเว็บไซต์ทางการของ Node.js

    ตัวเลือกที่ 2: กำหนดค่าไฟล์การกำหนดค่า Edge Microgateway YAML ให้เชื่อถือใบรับรองนั้นสำหรับเซิร์ฟเวอร์เป้าหมาย

    1. ตรวจสอบว่าคุณมีใบรับรอง (หรือเชน) ของเซิร์ฟเวอร์เป้าหมายในรูปแบบ PEM หากต้องการแปลงใบรับรองรูปแบบอื่นๆ เป็น PEM ให้ทำตามวิธีการใน การแปลงใบรับรองเป็นรูปแบบที่รองรับ
    2. หากมีชุดใบรับรอง ให้ตรวจสอบว่าใบรับรองอยู่ในลำดับที่ถูกต้อง โดยควรใส่ใบรับรอง Leaf เป็นอันดับแรก ตามด้วยใบรับรองกลาง และใบรับรองรูท มีคำอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้ใน เชนใบรับรองการตรวจสอบ

      ในตัวอย่างต่อไปนี้ เราได้กำหนดค่าไฟล์ CA ที่เชื่อถือสำหรับ untrusted-root.badssl.com

      edgemicro:
      ...
      targets:
        - host: 'untrusted-root.badssl.com'
          ssl:
            client
              ca: /opt/apigee/certs/untrusted-root.pem
      

    ดูวิธีการกำหนดค่านี้ได้ใน Edge Microgateway Module - กำหนดค่า TLS แบบทางเดียวและ 2 ทาง โปรดดูข้อมูลเพิ่มเติมที่ การกำหนดค่า SSL ในเซิร์ฟเวอร์ Edge Microgateway

หากยังพบปัญหาอยู่ ให้ไปที่ต้องรวบรวมข้อมูลการวินิจฉัย

สาเหตุ: Apigee Edge Management Server ใช้ใบรับรองที่ลงนามด้วยตนเอง

เมื่อตั้งค่า Edge Microgateway เป็นครั้งแรก คำสั่งหนึ่งที่คุณต้องใช้คือ edgemicro configure หรือ edgemicro private configure คำสั่งนี้จะเปิดเครื่องคลัสเตอร์ และจะติดต่อ Apigee Edge เพื่อดาวน์โหลดข้อมูลที่จำเป็น

สำหรับ Edge Private Cloud แล้ว URL ของเซิร์ฟเวอร์การจัดการจะกำหนดโดยอาร์กิวเมนต์ -m หากคุณเปิดใช้ TLS สำหรับเซิร์ฟเวอร์การจัดการ Edge Microgateway จะพยายามยืนยันใบรับรองที่เซิร์ฟเวอร์การจัดการแสดง

ตัวอย่างคำสั่ง edgemicro configure สำหรับ Edge Private Cloud มีดังนี้

edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443

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

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

การวินิจฉัย

  1. ในกรณีนี้ เซิร์ฟเวอร์การจัดการ (management.apigee-dev.net) อาจส่งคืนใบรับรอง TLS แบบ Self-signed
  2. อาจเป็นไปได้ว่าผู้ดูแลระบบ Apigee Edge ของคุณได้มอบใบรับรองและมีสำเนาใบรับรองนั้นไว้
  3. หรือเรียกใช้คำสั่งต่อไปนี้เพื่อรับข้อมูลเกี่ยวกับใบรับรอง:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. หากเซิร์ฟเวอร์การจัดการมีใบรับรองแบบ Self-signed สาเหตุของปัญหานี้

ความละเอียด

  1. ทำงานร่วมกับทีมที่เป็นเจ้าของเซิร์ฟเวอร์เป้าหมายเพื่อจัดหาใบรับรอง TLS ที่เหมาะสมซึ่งลงนามโดยผู้ออกใบรับรอง (CA) ที่เชื่อถือได้
  2. หากทำไม่ได้ ให้ดำเนินการดังต่อไปนี้เพื่ออนุญาตใบรับรองแบบ Self-signed ใน Edge Microgateway

  3. ตั้งค่าคุณสมบัติของระบบเพื่ออนุญาตให้ Edge Microgateway เชื่อถือใบรับรองทั้งหมด
  4. หากคุณใช้ Docker โปรดดู การใช้ CA ที่ Node.js ไม่เชื่อถือ
  5. หรือไม่เช่นนั้น ให้ส่งออกตัวแปรสภาพแวดล้อมชื่อ NODE_EXTRA_CA_CERTS ซึ่งชี้ไปยังไฟล์ CA รูท ซึ่งบันทึกอยู่ในเว็บไซต์อย่างเป็นทางการของ Node.js

ต้องรวบรวมข้อมูลการวินิจฉัย

หากปัญหายังคงอยู่แม้ว่าจะทำตามวิธีการข้างต้นแล้ว ให้รวบรวมข้อมูลการวินิจฉัยต่อไปนี้แล้วติดต่อทีมสนับสนุนของ Apigee Edge

  • ไฟล์บันทึก: โฟลเดอร์เริ่มต้นคือ /var/tmp แต่อาจลบล้างในไฟล์ config.yaml หลัก (logging > dir parameter) ขอแนะนําให้เปลี่ยน log > level เป็น info ก่อนจะส่งไฟล์บันทึกให้กับการสนับสนุนของ Apigee Edge
  • ไฟล์การกำหนดค่า: การกำหนดค่าหลักของ Edge Microgateway อยู่ในไฟล์ YAML ในโฟลเดอร์ Edge Microgateway เริ่มต้น $HOME/.edgemicro มีไฟล์การกำหนดค่าเริ่มต้นชื่อ default.yaml และมีไฟล์การกำหนดค่าเริ่มต้นอีกไฟล์หนึ่งสำหรับแต่ละสภาพแวดล้อม ORG-ENV-config.yaml โปรดอัปโหลดไฟล์นี้แบบเต็มสำหรับองค์กรและสภาพแวดล้อมที่ได้รับผลกระทบ

    เอกสารอ้างอิง

    กำหนดค่า Edge UI เพื่อใช้ TLS ในการเข้าถึง Edge API