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

ตัวอย่างการตอบกลับข้อผิดพลาดที่พบบ่อย 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' }

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

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

สาเหตุ: เซิร์ฟเวอร์เป้าหมายแสดงใบรับรองที่ลงนามด้วยตนเอง

หาก ใบรับรองที่ลงนามด้วยตนเองจะแสดงโดยเซิร์ฟเวอร์เป้าหมายที่ ไปทางทิศใต้ แล้ว 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. หากเชนใบรับรองของเซิร์ฟเวอร์เป้าหมายมีการลงนามด้วยตนเองจริงๆ นี่จึงเป็นสาเหตุที่ ถึงปัญหา

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

    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. หากทำไม่ได้ ให้พิจารณาใช้ตัวเลือกต่อไปนี้เพื่ออนุญาตการลงนามด้วยตนเอง ใบรับรองใน 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 - กำหนดค่าวิดีโอ TLS แบบ 2 ทางและทิศใต้แบบ 2 ทาง โปรดดู การกําหนดค่า SSL ในเซิร์ฟเวอร์ Edge Microgateway เพื่อดูข้อมูลเพิ่มเติม

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

สาเหตุ: เซิร์ฟเวอร์การจัดการ Apigee Edge ใช้ใบรับรองที่ลงนามด้วยตนเอง

เมื่อตั้งค่า 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

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

{ 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 ที่ลงชื่อด้วยตนเอง
  2. ดูเหมือนว่าผู้ดูแลระบบ Apigee Edge ได้ให้ใบรับรองแล้ว และมีสำเนาไฟล์อยู่
  3. หรือเรียกใช้คำสั่งต่อไปนี้เพื่อรับข้อมูลเกี่ยวกับใบรับรอง
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. หากเซิร์ฟเวอร์การจัดการมีใบรับรองแบบ Self- Signing สาเหตุของปัญหานี้ ปัญหา

ความละเอียด

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