502 बैड गेटवे - चेन में खुद हस्ताक्षर किया हुआ सर्टिफ़िकेट

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

समस्या का ब्यौरा

क्लाइंट ऐप्लिकेशन को Edge माइक्रोगेटवे में एपीआई कॉल के रिस्पॉन्स के तौर पर, Bad Gateway के साथ 502 का एचटीटीपी रिस्पॉन्स कोड मिलता है.

इसके अलावा, edgemicro configure निर्देश चलाने पर, एडमिन को self signed certificate in certificate chain गड़बड़ी का मैसेज दिखेगा.

गड़बड़ी का मैसेज

क्लाइंट को यह जवाब दिखेगा:

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' }

संभावित कारण

वजह ब्यौरा समस्या हल करने के लिए निर्देश
टारगेट सर्वर, खुद हस्ताक्षर किया हुआ सर्टिफ़िकेट देता है Edge माइक्रोगेटवे टारगेट सर्वर के सर्टिफ़िकेट की पुष्टि करेगा. अगर इस पर भरोसा नहीं किया जा सकता है, तो यह रनटाइम की गड़बड़ी दिखाएगा. Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता
Apigee Edge Management Server, खुद हस्ताक्षर किए गए सर्टिफ़िकेट का इस्तेमाल करता है पहली बार Edge माइक्रोगेटवे को कॉन्फ़िगर करने पर, यह बूटस्ट्रैप करने के लिए TLS पर Apigee Edge से कनेक्ट हो जाएगा. अगर Edge खुद हस्ताक्षर किया हुआ सर्टिफ़िकेट दिखाता है, तो यह फ़ेल हो जाएगा. Edge Private Cloud के उपयोगकर्ता

वजह: टारगेट सर्वर, खुद हस्ताक्षर किया हुआ सर्टिफ़िकेट देता है

अगर टारगेट सर्वर दक्षिण की ओर कनेक्शन पर खुद से हस्ताक्षर किया गया सर्टिफ़िकेट दिखाता है, तो Edge माइक्रोगेटवे डिफ़ॉल्ट रूप से यह गड़बड़ी बढ़ाएगा. ऐसा इसलिए होगा, क्योंकि यह खुद हस्ताक्षर किए गए सर्टिफ़िकेट पर भरोसा नहीं करता.

संक्रमण की जांच

आपको लॉग (/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 माइक्रोगेटवे को टारगेट सर्वर से खुद हस्ताक्षर किया गया सर्टिफ़िकेट मिला है. इसकी पुष्टि करने के लिए, यह तरीका अपनाएं:

  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 सर्टिफ़िकेट पाने के लिए, उस टीम के साथ काम करें जिसके पास टारगेट सर्वर का मालिकाना हक है. इस सर्टिफ़िकेट को भरोसेमंद सर्टिफ़िकेट देने वाली संस्था (सीए) से हस्ताक्षर किया जाना चाहिए.
  2. अगर ऐसा नहीं किया जा सकता, तो Edge माइक्रोगेटवे में खुद से हस्ताक्षर किए गए सर्टिफ़िकेट को अनुमति देने के लिए, इनमें से कोई एक तरीका अपनाएं.

    पहला विकल्प: सिस्टम प्रॉपर्टी सेट करें, ताकि EDGE माइक्रोगेटवे सभी सर्टिफ़िकेट पर भरोसा कर सके

    1. अगर डॉकर का इस्तेमाल किया जा रहा है, तो ऐसे CA का इस्तेमाल करना देखें जो Node.js के लिए भरोसेमंद नहीं है
    2. इसके अलावा, रूट CA फ़ाइल को पॉइंट करते हुए, NODE_EXTRA_CA_CERTS नाम का एनवायरमेंट वैरिएबल एक्सपोर्ट किया जा सकता है.

      इस जानकारी को Node.js की आधिकारिक वेबसाइट पर दर्ज किया गया है.

    दूसरा विकल्प: Edge Microgateway YAML कॉन्फ़िगरेशन फ़ाइल को कॉन्फ़िगर करें, ताकि उस टारगेट सर्वर के लिए उस खास सर्टिफ़िकेट पर भरोसा किया जा सके

    1. पक्का करें कि आपके पास टारगेट सर्वर का सर्टिफ़िकेट (या चेन) PEM फ़ॉर्मैट में हो. दूसरे सर्टिफ़िकेट फ़ॉर्मैट को PEM में बदलने के लिए, सर्टिफ़िकेट को काम करने वाले फ़ॉर्मैट में बदलना में दिए गए निर्देशों का पालन करें.
    2. अगर सर्टिफ़िकेट की चेन है, तो पक्का करें कि सर्टिफ़िकेट सही क्रम में हों. लीफ़ सर्टिफ़िकेट हमेशा पहले होना चाहिए, उसके बाद इंटरमीडिएट सर्टिफ़िकेट, और उसके बाद रूट सर्टिफ़िकेट होना चाहिए. सर्टिफ़िकेट की चेन की पुष्टि करना में, इस बारे में ज़्यादा जानकारी दी गई है.

      यहां दिए गए उदाहरण में, हमने untrusted-root.badssl.com के लिए भरोसेमंद CA फ़ाइल कॉन्फ़िगर की है.

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

    इसे कॉन्फ़िगर करने के निर्देश भी Edge माइक्रोगेटवे मॉड्यूल - 1-वे और 2-वे साउथबाउंड TLS वीडियो में कॉन्फ़िगर किए गए हैं. ज़्यादा जानकारी के लिए Edge माइक्रोगेटवे सर्वर पर एसएसएल को कॉन्फ़िगर करना देखें.

अगर समस्या अब भी बनी रहती है, तो गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है पर जाएं.

वजह: Apigee Edge Management Server, खुद हस्ताक्षर किए गए सर्टिफ़िकेट का इस्तेमाल करता है

पहली बार एज माइक्रोगेटवे सेट अप किए जाने पर, आपको edgemicro configure या edgemicro private configure निर्देश देने होंगे. यह निर्देश क्लस्टर को बूटस्ट्रैप कर देगा और यह ज़रूरी जानकारी डाउनलोड करने के लिए, Apigee Edge से संपर्क करेगा.

Edge Private Cloud के लिए, मैनेजमेंट सर्वर का यूआरएल, -m आर्ग्युमेंट से तय किया जाता है. अगर आपने मैनेजमेंट सर्वर के लिए TLS चालू किया है, तो EDGE माइक्रोगेटवे मैनेजमेंट सर्वर से मिले सर्टिफ़िकेट की पुष्टि करने की कोशिश करेगा.

Edge Private Cloud के लिए, edgemicro configure कमांड का एक उदाहरण इस तरह है:

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. अगर मैनेजमेंट सर्वर के पास खुद ही हस्ताक्षर किया गया सर्टिफ़िकेट है, तो इस समस्या की वजह इसी वजह से है.

रिज़ॉल्यूशन

  1. एक सही TLS सर्टिफ़िकेट पाने के लिए, उस टीम के साथ काम करें जिसके पास टारगेट सर्वर का मालिकाना हक है. इस सर्टिफ़िकेट को भरोसेमंद सर्टिफ़िकेट देने वाली संस्था (सीए) से हस्ताक्षर किया जाना चाहिए.
  2. अगर ऐसा नहीं किया जा सकता, तो Edge माइक्रोगेटवे में खुद ही हस्ताक्षर किए गए सर्टिफ़िकेट को अनुमति देने के लिए ये काम करें.

  3. एज माइक्रोगेटवे को सभी सर्टिफ़िकेट पर भरोसा करने की अनुमति देने के लिए, सिस्टम प्रॉपर्टी सेट करें.
  4. अगर डॉकर का इस्तेमाल किया जा रहा है, तो ऐसे CA का इस्तेमाल करना देखें जो Node.js के लिए भरोसेमंद नहीं है.
  5. इसके अलावा, रूट CA फ़ाइल पर ले जाने वाला, NODE_EXTRA_CA_CERTS नाम का एक एनवायरमेंट वैरिएबल एक्सपोर्ट करें.इसे Node.js की आधिकारिक वेबसाइट पर दर्ज किया गया है.

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करनी होगी

अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो गड़बड़ी से जुड़ी यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें:

  • लॉग फ़ाइलें: डिफ़ॉल्ट फ़ोल्डर /var/tmp है, लेकिन इसे मुख्य config.yaml फ़ाइल (logging > dir parameter) में बदला जा सकता है. हमारा सुझाव है कि Apigee Edge Support को लॉग फ़ाइलें उपलब्ध कराने से पहले, log > level को info में बदलें.
  • कॉन्फ़िगरेशन फ़ाइल: Edge माइक्रोगेटवे का मुख्य कॉन्फ़िगरेशन, डिफ़ॉल्ट Edge माइक्रोगेटवे फ़ोल्डर $HOME/.edgemicro में YAML फ़ाइल में मौजूद है. पहले, default.yaml नाम की एक डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल होती है. इसके बाद, हर एनवायरमेंट ORG-ENV-config.yaml के लिए एक फ़ाइल बनाई जाती है. जिस संगठन और एनवायरमेंट पर असर पड़ा है उसके लिए, इस फ़ाइल को पूरा अपलोड करें.

    रेफ़रंस के लिए दस्तावेज़

    Edge API को ऐक्सेस करने के लिए TLS का इस्तेमाल करने के लिए, Edge यूज़र इंटरफ़ेस (यूआई) कॉन्फ़िगर करें