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

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

ลักษณะปัญหา

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

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

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

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

HTTP/1.1 502 Bad Gateway

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

{"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
เซิร์ฟเวอร์การจัดการ Apigee Edge ใช้ใบรับรองแบบ Self-signed เมื่อกำหนดค่า Edge Microgateway เป็นครั้งแรก ระบบจะเชื่อมต่อกับ Apigee Edge ผ่าน TLS เพื่อเริ่มต้นระบบ หาก Edge แสดงใบรับรองแบบ Self-signed การดำเนินการนี้จะล้มเหลว ผู้ใช้ Edge Private Cloud

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

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

การวินิจฉัย

คุณอาจเห็นข้อผิดพลาดต่อไปนี้ในบันทึก (/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 มี แนวโน้มสูงที่จะได้รับใบรับรองแบบ Self-signed จากเซิร์ฟเวอร์เป้าหมาย หากต้องการยืนยัน ให้ทำตามขั้นตอนต่อไปนี้

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

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

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

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

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

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

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

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

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

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

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

สาเหตุ: เซิร์ฟเวอร์การจัดการ Apigee Edge ใช้ใบรับรองแบบ Self-signed

เมื่อตั้งค่า 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 ที่เหมาะสมซึ่งลงนามโดยa ผู้ออกใบรับรอง (CA) ที่เชื่อถือได้
  2. หากทำไม่ได้ ให้ทำดังต่อไปนี้เพื่ออนุญาตใบรับรองแบบ Self-signed ใน Edge Microgateway

  3. ตั้งค่าพร็อพเพอร์ตี้ของระบบเพื่ออนุญาตให้ Edge Microgateway เชื่อถือใบรับรองทั้งหมด
  4. หากคุณใช้ Docker โปรดดู การใช้ CA ที่ Node.js ไม่เชื่อถือ
  5. หากไม่ได้ใช้ Docker ให้ส่งออกตัวแปรสภาพแวดล้อมที่ชื่อ 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 ให้อัปโหลดไฟล์นี้แบบเต็มสำหรับองค์กรและสภาพแวดล้อมที่ได้รับผลกระทบ

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

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