Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं. जानकारी
समस्या का ब्यौरा
क्लाइंट ऐप्लिकेशन को एपीआई कॉल के रिस्पॉन्स के तौर पर, गड़बड़ी कोड messaging.adaptors.http.flow.SslHandshakeFailed
के साथ 503 Service Unavailable
का एचटीटीपी स्टेटस कोड मिलता है.
गड़बड़ी का मैसेज
क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:
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" } } }
संभावित कारण
आपको गड़बड़ी कोड messaging.adaptors.http.flow.SslHandshakeFailed
के साथ स्टेटस कोड 503 Service Unavailable
मिल सकता है. यह कई वजहों से हो सकता है. इसकी वजह यह है कि Apigee Edge के Message प्रोसेसर और बैकएंड सर्वर के बीच एसएसएल हैंडशेक करने की प्रोसेस के दौरान, सिस्टम में गड़बड़ी हुई. आम तौर पर, faultstring
में गड़बड़ी का मैसेज, किसी ऐसी बड़ी समस्या के बारे में बताता है जिसकी वजह से यह गड़बड़ी हुई है.
faultstring
में गड़बड़ी के मैसेज के आधार पर, आपको
समस्या को हल करने के लिए सही तकनीकों का इस्तेमाल करना होगा. इस प्लेबुक में बताया गया है कि अगर आपको 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
दिखता है,
तो इस गड़बड़ी को कैसे हल किया जा सकता है.
यह गड़बड़ी Apigee Edge के मैसेज प्रोसेसर और बैकएंड सर्वर के बीच एसएसएल हैंडशेक करने की प्रोसेस के दौरान होती है:
- अगर Apigee Edge के मैसेज प्रोसेसर का truststore है, तो:
- इसमें ऐसी सर्टिफ़िकेट चेन शामिल हो जो बैकएंड सर्वर के पूरे सर्टिफ़िकेट की चेन से मेल न खाती हो या
- इसमें बैकएंड सर्वर की पूरी सर्टिफ़िकेट चेन शामिल नहीं है
- अगर बैकएंड सर्वर से प्रज़ेंट की गई सर्टिफ़िकेट चेन है:
- इसमें पूरी तरह क्वालिफ़ाइड डोमेन नेम (FQDN) शामिल है, जो टारगेट एंडपॉइंट में दिए गए होस्ट नेम से मेल नहीं खाता
- इसमें एक गलत या अधूरी सर्टिफ़िकेट चेन है
इस समस्या की ये वजहें हो सकती हैं:
वजह | ब्यौरा | समस्या हल करने के लिए निर्देश |
---|---|---|
Messages प्रोसेसर के ट्रस्टस्टोर में गलत/अधूरे सर्टिफ़िकेट या सर्टिफ़िकेट चेन | Apigee Edge के Message प्रोसेसर के ट्रस्टस्टोर में सेव किया गया सर्टिफ़िकेट और/या उसकी चेन, बैकएंड सर्वर के सर्टिफ़िकेट की चेन से मेल नहीं खाती या उसमें बैकएंड सर्वर की पूरी सर्टिफ़िकेट चेन शामिल नहीं है. | Edge के निजी और सार्वजनिक क्लाउड के उपयोगकर्ता |
बैकएंड सर्वर के सर्टिफ़िकेट और टारगेट एंडपॉइंट में मौजूद होस्ट नेम, एफ़क्यूडीएन से मेल नहीं खाता | बैकएंड सर्वर से मिलने वाले सर्टिफ़िकेट में एक FQDN होता है, जो टारगेट एंडपॉइंट में दिए गए होस्ट नेम से मेल नहीं खाता. | Edge के निजी और सार्वजनिक क्लाउड के उपयोगकर्ता |
बैकएंड सर्वर से मिला सर्टिफ़िकेट या गलत/अधूरे सर्टिफ़िकेट | बैकएंड सर्वर से मिली सर्टिफ़िकेट चेन गलत है या अधूरी है. | Edge के निजी और सार्वजनिक क्लाउड के उपयोगकर्ता |
निदान के सामान्य चरण
इस गड़बड़ी का पता लगाने के लिए, नीचे दिए गए किसी टूल/तकनीक का इस्तेमाल करें:
एपीआई मॉनिटरिंग
प्रोसेस #1: एपीआई मॉनिटरिंग का इस्तेमाल करना
एपीआई मॉनिटरिंग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:
- सही भूमिका वाले उपयोगकर्ता के तौर पर, Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में साइन इन करें.
उस संगठन पर जाएं जिसमें आपको समस्या की जांच करनी है.
- विश्लेषण करें > एपीआई की निगरानी करना > जांच करें पेज पर जाएं.
- वह खास समयसीमा चुनें जिसमें आपने गड़बड़ियां देखी थीं.
समय के हिसाब से गलत कोड प्लॉट करें.
वह सेल चुनें जिसमें गड़बड़ी कोड
messaging.adaptors.http.flow.SslHandshakeFailed
है, जैसा कि नीचे दिखाया गया है:गड़बड़ी कोड
messaging.adaptors.http.flow.SslHandshakeFailed
के बारे में जानकारी नीचे दिखाई गई है:लॉग देखें पर क्लिक करें और पूरे न हो पाने वाले अनुरोध की लाइन को बड़ा करें.
- लॉग विंडो से, नीचे दी गई जानकारी पर ध्यान दें:
- मैसेज आईडी का अनुरोध करना
- स्थिति कोड:
503
- गलत इस्तेमाल का सोर्स:
target
- गलत कोड:
messaging.adaptors.http.flow.SslHandshakeFailed
ट्रेस
प्रोसेस #2: ट्रेस टूल का इस्तेमाल करना
ट्रेस टूल का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- ट्रेस सेशन को चालू करें या फिर
503 Service Unavailable
गड़बड़ी कोड के साथ,messaging.adaptors.http.flow.SslHandshakeFailed
आने का इंतज़ार करें या- अगर समस्या को फिर से बनाया जा सकता है, तो समस्या को फिर से दिखाने के लिए एपीआई कॉल करें
503 Service Unavailable
पक्का करें कि FlowInfos दिखाएं चालू है:
- सफल न होने वाले अनुरोधों में से किसी एक को चुनें और ट्रेस की जांच करें.
- ट्रेस के अलग-अलग फ़ेज़ में नेविगेट करें और पता लगाएं कि गड़बड़ी कहां हुई थी.
आम तौर पर, आपको टारगेट अनुरोध फ़्लो शुरू होने के चरण के बाद गड़बड़ी दिखेगी. इसका उदाहरण नीचे दिया गया है:
- ट्रेस में से इन वैल्यू को नोट करें:
- गड़बड़ी:
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
की वैल्यू से पता चलता है कि एसएसएल हैंडशेक काम नहीं कर सका, क्योंकि Apigee Edge का मैसेज प्रोसेसर, बैकएंड सर्वर के सर्टिफ़िकेट की पुष्टि नहीं कर सका.
- गड़बड़ी:
- ट्रेस में AX (Analytics डेटा रिकॉर्ड किया गया) फ़ेज़ पर जाएं और उस पर क्लिक करें.
नीचे की ओर स्क्रोल करके, फ़ेज़ की जानकारी वाले गड़बड़ी के हेडर सेक्शन पर जाएं और 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 ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:
- अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो एचटीटीपी
503 Service Unavailable
के बारे में अहम जानकारी तय करने के लिए, NGINX ऐक्सेस लॉग का इस्तेमाल कर सकते हैं. NGINX ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- यह देखने के लिए खोजें कि किसी खास अवधि (अगर यह समस्या पहले हुई है) के दौरान, गड़बड़ी कोड
messaging.adaptors.http.flow.SslHandshakeFailed
के साथ कोई503
गड़बड़ी तो नहीं है या503
से जुड़े ऐसे अनुरोध हैं जो अब भी पूरे नहीं हो पा रहे हैं. अगर आपको X-Apigee-fault-code में,
messaging.adaptors.http.flow.SslHandshakeFailed
की वैल्यू से मेल खाने वाली कोई503
गड़बड़ी दिखती है, तो X-Apigee-fault-source की वैल्यू तय करें.NGINX ऐक्सेस लॉग से 503 गड़बड़ी का नमूना:
NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में X-Apigee-fault-code और X-Apigee-fault-source के लिए ये वैल्यू दी गई हैं:
हेडर वैल्यू X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
X-Apigee-fault-source target
मैसेज प्रोसेसर के लॉग
प्रोसेस #4: मैसेज प्रोसेसर लॉग का इस्तेमाल करना
- एपीआई मॉनिटरिंग, ट्रेस टूल या NGINX ऐक्सेस लॉग का इस्तेमाल करके, पूरे न हो पाने वाले अनुरोधों में से किसी एक का मैसेज आईडी तय करें. इसके बारे में सामान्य तरीके से बताया गया है.
मैसेज प्रोसेसर लॉग (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) में जाकर, अनुरोध वाले किसी खास मैसेज आईडी को खोजें. आपको यह गड़बड़ी दिख सकती है:org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1
NIOThread@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ऊपर दी गई गड़बड़ी से पता चलता है कि मैसेज प्रोसेसर और बैकएंड सर्वर के बीच एसएसएल हैंडशेक काम नहीं कर सका.
इसके बाद, नीचे दिखाए गए स्टैक ट्रेस के साथ एक अपवाद लागू होगा:
org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1
NIOThread@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 target
at 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
इससे पता चलता है कि Apigee Edge के मैसेज प्रोसेसर के तौर पर, एसएसएल हैंडशेक काम नहीं कर सका. ऐसा इसलिए हुआ, क्योंकि यह बैकएंड सर्वर के सर्टिफ़िकेट की पुष्टि नहीं कर सका.
वजह: Message प्रोसेसर के ट्रस्टस्टोर में गलत/अधूरे सर्टिफ़िकेट या सर्टिफ़िकेट चेन
संक्रमण की जांच
- एपीआई मॉनिटरिंग, ट्रेस टूल या NGINX ऐक्सेस लॉग का इस्तेमाल करके मिली गड़बड़ी के लिए, फ़ॉल कोड, गड़बड़ी का सोर्स तय करें. इस बारे में गड़बड़ी की जानकारी पाने के सामान्य तरीके में बताया गया है.
- अगर गलत कोड
messaging.adaptors.http.flow.SslHandshakeFailed
है, तो इनमें से किसी एक तरीके का इस्तेमाल करके गड़बड़ी के मैसेज का पता लगाएं: - ट्रेस टूल का इस्तेमाल करके, error.cause को ढूंढें. इसके बारे में गड़बड़ी की जानकारी पाने के सामान्य तरीके में बताया गया है
- मैसेज प्रोसेसर लॉग का इस्तेमाल करके, अपवाद का पता लगाने के लिए सामान्य तरीके से जानें में बताया गया है
- अपने एपीआई कॉल के दौरान गड़बड़ी के जवाब में दिए गए
faultstring
को ढूंढें, जैसा कि गड़बड़ी के मैसेज में दिखाया गया है - अगर गड़बड़ी का मैसेज
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
है, तो इसका मतलब है कि एसएसएल हैंडशेक काम नहीं कर सका. इसकी वजह यह है कि Apigee Edge का मैसेज प्रोसेसर, बैकएंड सर्वर के सर्टिफ़िकेट की पुष्टि नहीं कर सका.
इस समस्या को दो चरणों में डीबग किया जा सकता है:
- पहला चरण: बैकएंड सर्वर की सर्टिफ़िकेट चेन तय करना
- चरण 2: Message प्रोसेसर के ट्रस्टस्टोर में स्टोर की गई सर्टिफ़िकेट चेन की तुलना करें
पहला चरण
पहला चरण: बैकएंड सर्वर का सर्टिफ़िकेट चेन तय करना
बैकएंड सर्वर की सर्टिफ़िकेट चेन तय करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:
openssl
बैकएंड सर्वर के होस्ट नेम के लिए, openssl
कमांड को इस तरह लागू करें:
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
ऊपर दिए गए निर्देश के आउटपुट से सर्टिफ़िकेट चेन को नोट करें:
openएसएसएल कमांड आउटपुट से सैंपल बैकएंड सर्वर सर्टिफ़िकेट चेन:
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
- अगर आप सार्वजनिक क्लाउड उपयोगकर्ता हैं, तो बैकएंड सर्वर पर टीसीपी/आईपी पैकेट कैप्चर करें.
- अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो आपके पास बैकएंड सर्वर या मैसेज प्रोसेसर पर टीसीपी/आईपी पैकेट कैप्चर करने का विकल्प होता है. आम तौर पर, इन्हें बैकएंड सर्वर पर कैप्चर करें, क्योंकि पैकेट बैकएंड सर्वर पर डिक्रिप्ट किए जाते हैं.
टीसीपी/आईपी पैकेट कैप्चर करने के लिए, यहां दिए गए tcpdump कमांड का इस्तेमाल करें:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
वायर शार्क टूल या इससे मिलते-जुलते टूल का इस्तेमाल करके, टीसीपी/आईपी पैकेट का विश्लेषण करें.
Tcpdump का सैंपल विश्लेषण
- पैकेट #43: मैसेज प्रोसेसर (सोर्स) ने बैकएंड सर्वर (डेस्टिनेशन) पर
Client Hello
मैसेज भेजा. - पैकेट #44: बैकएंड सर्वर, मैसेज प्रोसेसर से
Client Hello
मैसेज मिलने की सूचना देता है. - पैकेट #45: बैकएंड सर्वर अपने सर्टिफ़िकेट के साथ
Server Hello
मैसेज भेजता है. - पैकेट #46: मैसेज प्रोसेसर,
Server Hello
मैसेज और सर्टिफ़िकेट की रसीद स्वीकार करता है. पैकेट #47: मैसेज प्रोसेसर एक
FIN, ACK
मैसेज भेजता है. इसके बाद, Packet #48 मेंRST, ACK
मैसेज भेजा जाता है.इससे पता चलता है कि मैसेज प्रोसेसर से बैकएंड सर्वर सर्टिफ़िकेट की पुष्टि नहीं हो सकी. इसकी वजह यह है कि Message प्रोसेसर के पास ऐसा कोई सर्टिफ़िकेट नहीं है जो बैकएंड सर्वर के सर्टिफ़िकेट से मेल खाता हो. इसके अलावा, वह अपने (मैसेज प्रोसेसर के) ट्रस्टस्टोर में उपलब्ध सर्टिफ़िकेट के साथ बैकएंड सर्वर के सर्टिफ़िकेट पर भरोसा नहीं कर सकता. ऐसा इसलिए होता है.
आपके पास वापस जाकर, Packet #45 की समीक्षा करने और बैकएंड सर्वर से भेजी गई सर्टिफ़िकेट चेन तय करने का विकल्प है
- इस उदाहरण में, यह देखा जा सकता है कि सर्वर ने
common name (CN) = mocktarget.apigee.net
वाला लीफ़ सर्टिफ़िकेट भेजा है. इसके बादCN= GTS CA 1D4
वाला इंटरमीडिएट सर्टिफ़िकेट भेजा गया है. साथ ही,CN = GTX Root R1
वाला रूट सर्टिफ़िकेट भेजा गया है.
अगर आपने यह पक्का कर लिया है कि सर्वर के सर्टिफ़िकेशन की पुष्टि नहीं हो पाई है, तो दूसरा चरण: बैकएंड सर्वर के सर्टिफ़िकेट और Message प्रोसेसर के ट्रस्टस्टोर में सेव किए गए सर्टिफ़िकेट की तुलना करें पर जाएं.
- पैकेट #43: मैसेज प्रोसेसर (सोर्स) ने बैकएंड सर्वर (डेस्टिनेशन) पर
दूसरा चरण
दूसरा चरण: Message प्रोसेसर के ट्रस्टस्टोर में सेव किए गए बैकएंड सर्वर के सर्टिफ़िकेट और सर्टिफ़िकेट की तुलना करना
- बैकएंड सर्वर की सर्टिफ़िकेट चेन तय करना.
- मैसेज प्रोसेसर के ट्रस्टस्टोर में सेव किए गए सर्टिफ़िकेट का पता लगाने के लिए
नीचे दिया गया तरीका अपनाएं:
TargetEndpoint
केSSLInfo
सेक्शन मेंTrustStore
एलिमेंट से ट्रस्टस्टोर का रेफ़रंस नाम पाएं.आइए,
TargetEndpoint
कॉन्फ़िगरेशन में मौजूदSSLInfo
सेक्शन का एक सैंपल देखें:<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 के यूज़र इंटरफ़ेस (यूआई) में, परिवेश > रेफ़रंस चुनें. खास ट्रस्टस्टोर रेफ़रंस के लिए, रेफ़रंस कॉलम में मौजूद नाम नोट करें. यह आपके ट्रस्टस्टोर का नाम होगा.
ऊपर दिए गए उदाहरण में ट्रस्टस्टोर का नाम यह है:
myCompanyTruststoreRef:
myCompanyTruststore
नीचे दिए गए एपीआई का इस्तेमाल करके, ट्रस्टस्टोर में सेव किए गए सर्टिफ़िकेट पाएं (पिछले चरण में तय किया गया):
कीस्टोर या ट्रस्टस्टोर के लिए सभी सर्टिफ़िकेट पाएं. यह एपीआई, किसी खास ट्रस्टस्टोर के सभी सर्टिफ़िकेट की सूची बनाता है.
सार्वजनिक क्लाउड उपयोगकर्ता:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
प्राइवेट क्लाउड उपयोगकर्ता:
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 का इस्तेमाल करें में बताया गया है
सैंपल आउटपुट:
ट्रस्टस्टोर
myCompanyTruststore
के उदाहरण के सर्टिफ़िकेट ये हैं:[ "serverCert" ]
-
किसी कीस्टोर या 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"
प्राइवेट क्लाउड उपयोगकर्ता
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",
पुष्टि करें कि पहले चरण में मिला सर्वर सर्टिफ़िकेट और तीसरे चरण में मिले ट्रस्टस्टोर में सेव किए गए सर्टिफ़िकेट से मेल खाता हो. अगर वे आपस में मेल नहीं खातीं, तो इसी वजह से समस्या हो रही है.
ऊपर दिए गए उदाहरण से, आइए एक बार में एक सर्टिफ़िकेट पर नज़र डालें:
- लीफ़ सर्टिफ़िकेट:
बैकएंड सर्वर से:
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
Messages प्रोसेसर (क्लाइंट) के ट्रस्टस्टोर से:
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
ट्रस्टस्टोर में सेव किया गया लीफ़ सर्टिफ़िकेट, बैकएंड सर्वर के सर्टिफ़िकेट से मेल खाता है.
- इंटरमीडिएट सर्टिफ़िकेट:
बैकएंड सर्वर से:
s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
Messages प्रोसेसर (क्लाइंट) के ट्रस्टस्टोर से:
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
ट्रस्टस्टोर में सेव किया गया इंटरमीडिएट सर्टिफ़िकेट, बैकएंड सर्वर के सर्टिफ़िकेट से मेल खाता है.
- रूट सर्टिफ़िकेट:
बैकएंड सर्वर से:
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 प्रोसेसर के ट्रस्टस्टोर में रूट सर्टिफ़िकेट पूरी तरह से मौजूद नहीं है.
ट्रस्टस्टोर में रूट सर्टिफ़िकेट मौजूद नहीं होने की वजह से, मैसेज प्रोसेसर नीचे दिए गए अपवाद को दिखाता है:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
और क्लाइंट ऐप्लिकेशन को गड़बड़ी कोड
messaging.adaptors.http.flow.SslHandshakeFailed
के साथ503 Service Unavailable
दिखाता है.
- लीफ़ सर्टिफ़िकेट:
रिज़ॉल्यूशन
- पक्का करें कि आपके पास बैकएंड सर्वर की पूरी और सही सर्टिफ़िकेट चेन हो.
- अगर आप पब्लिक क्लाउड के उपयोगकर्ता हैं, तो सर्टिफ़िकेट को Apigee Edge के Message प्रोसेसर ट्रस्टस्टोर में अपडेट करने के लिए, Cloud के लिए TLS सर्टिफ़िकेट अपडेट करें में दिए गए निर्देशों का पालन करें.
- अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो सर्टिफ़िकेट को Apigee Edge के Message प्रोसेसर ट्रस्टस्टोर में अपडेट करने के लिए, Private Cloud के लिए TLS सर्टिफ़िकेट अपडेट करें में दिए गए निर्देशों का पालन करें.
वजह: बैकएंड सर्वर के सर्टिफ़िकेट और टारगेट एंडपॉइंट में मौजूद होस्ट नेम, 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
दिखाती है.
संक्रमण की जांच
- एपीआई प्रॉक्सी में उस खास टारगेट एंडपॉइंट की जांच करें जिसमें इस गड़बड़ी को देखा जा रहा है.
साथ ही, बैकएंड सर्वर के होस्ट नेम को नोट करें:
सैंपल टारगेटएंडपॉइंट:
<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
है. नीचे दिखाए गए
openssl
कमांड का इस्तेमाल करके, बैकएंड सर्वर के सर्टिफ़िकेट में FQDN की पहचान करें:openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
उदाहरण के लिए:
openssl s_client -connect backend.company.com:443
Certificate chain
सेक्शन की जांच करें और लीफ़ सर्टिफ़िकेट के सब्जेक्ट में, CN के हिस्से के तौर पर बताए गए FQDN को नोट करें.Certificate chain 0 s:/
CN=backend.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ऊपर दिए गए उदाहरण में, बैकएंड सर्वर का एफ़क्यूडीएन
backend.apigee.net
है.- अगर पहले चरण से मिले बैकएंड सर्वर का होस्ट नेम और दूसरे चरण से मिला FQDN मैच नहीं करता, तो यही गड़बड़ी की वजह है.
- ऊपर दिए गए उदाहरण में, टारगेट एंडपॉइंट में होस्ट नेम
backend.company.com
है. हालांकि, बैकएंड सर्वर के सर्टिफ़िकेट में FQDN का नामbackend.apigee.net
है. दोनों मेल नहीं खाते, इसलिए आपको यह गड़बड़ी मिली है.
रिज़ॉल्यूशन
इस समस्या को ठीक करने के लिए, यहां दिए गए तरीकों में से किसी एक का इस्तेमाल किया जा सकता है:
सही FQDN
बैकएंड सर्वर के कीस्टोर को सही FQDN, मान्य और पूरे सर्टिफ़िकेट चेन के साथ अपडेट करें:
- अगर आपके पास सही FQDN वाला बैकएंड सर्वर सर्टिफ़िकेट नहीं है, तो किसी सही सीए (सर्टिफ़िकेट अथॉरिटी) से सही सर्टिफ़िकेट खरीदें.
पुष्टि करें कि आपके पास बैकएंड सर्वर की सर्टिफ़िकेट चेन है, जो मान्य हो और पूरी हो.
- जब आपके पास मान्य और पूरी सर्टिफ़िकेट चेन हो, जिसमें लीफ़ या इकाई के सर्टिफ़िकेट में बैकएंड सर्वर का सही FQDN हो, जो टारगेट एंडपॉइंट में दिए गए होस्ट नेम से मेल खाता हो, तो सर्टिफ़िकेट की पूरी चेन के साथ बैकएंड कीस्टोर को अपडेट करें.
सही बैकएंड सर्वर
टारगेट एंडपॉइंट को सही बैकएंड सर्वर के होस्ट नेम के साथ अपडेट करें:
- अगर टारगेट एंडपॉइंट में होस्ट नेम की जानकारी गलत है, तो टारगेट एंडपॉइंट को अपडेट करें. ऐसा करने से, बैकएंड सर्वर के सर्टिफ़िकेट में मौजूद 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
को नोट करें.openएसएसएल कमांड आउटपुट से सैंपल बैकएंड सर्वर सर्टिफ़िकेट चेन:
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 - पुष्टि करें कि आपके पास सही और पूरी सर्टिफ़िकेट चेन है, जैसा कि सर्टिफ़िकेट की पुष्टि करने की चेन में बताया गया है.
अगर आपके पास बैकएंड सर्वर के लिए मान्य और पूरे सर्टिफ़िकेट की चेन नहीं है, तो इसी वजह से यह समस्या हो रही है.
ऊपर दिखाए गए सैंपल बैकएंड सर्वर के सर्टिफ़िकेट चेन में, रूट सर्टिफ़िकेट मौजूद नहीं है. इसलिए, आपको यह गड़बड़ी मिलती है.
रिज़ॉल्यूशन
मान्य और पूरे सर्टिफ़िकेट चेन के साथ बैकएंड सर्वर का कीस्टोर अपडेट करें:
पुष्टि करें कि आपके पास बैकएंड सर्वर की मान्य और पूरी सर्टिफ़िकेट चेन है.
- बैकएंड सर्वर के कीस्टोर में जाकर, सर्टिफ़िकेट की मान्य और पूरी चेन को अपडेट करें.
अगर समस्या अब भी बनी रहती है, तो गड़बड़ी की जानकारी इकट्ठा करनी होगी पर जाएं.
ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करनी होगी
अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो गड़बड़ी से जुड़ी यह जानकारी इकट्ठा करें और Apigee Edge की सहायता टीम से संपर्क करें:
- अगर आप सार्वजनिक क्लाउड का इस्तेमाल करते हैं, तो यह जानकारी दें:
- संगठन का नाम
- परिवेश का नाम
- एपीआई प्रॉक्सी का नाम
- गड़बड़ी को फिर से सामने लाने के लिए,
curl
निर्देश पूरा करें - गड़बड़ी दिखाने वाली ट्रेस फ़ाइल
openssl
निर्देश का आउटपुट:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- बैकएंड सर्वर पर कैप्चर किए गए टीसीपी/आईपी पैकेट
- अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो यह जानकारी दें:
- गड़बड़ी का पूरा मैसेज देखा गया
- एपीआई प्रॉक्सी बंडल
- गड़बड़ी दिखाने वाली ट्रेस फ़ाइल
- मैसेज प्रोसेसर के लॉग
/opt/apigee/var/log/edge-message-processor/logs/system.log
openssl
निर्देश का आउटपुट:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- बैकएंड सर्वर या मैसेज प्रोसेसर पर कैप्चर किए गए टीसीपी/आईपी पैकेट.
- किसी कीस्टोर या ट्रस्टस्टोर एपीआई के लिए सभी सर्टिफ़िकेट पाएं का आउटपुट किसी कीस्टोर या Truststore एपीआई से सर्टिफ़िकेट की जानकारी पाएं का इस्तेमाल करके मिले हर सर्टिफ़िकेट की जानकारी भी.
References
- सर्टिफ़िकेट चेन ऑफ़ ट्रस्ट
- OpenSSL कमांड