आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
समस्या का ब्यौरा
एपीआई कॉल के जवाब में, क्लाइंट ऐप्लिकेशन को 503 Service Unavailable एचटीटीपी स्टेटस कोड मिलता है. साथ ही, गड़बड़ी का कोड messaging.adaptors.http.flow.SslHandshakeFailed मिलता है.
गड़बड़ी का मैसेज
क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:
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"
}
}
}संभावित कारण
आपको स्टेटस कोड 503 Service Unavailable और गड़बड़ी कोड messaging.adaptors.http.flow.SslHandshakeFailed मिल सकता है. ऐसा कई वजहों से हो सकता है. जैसे, Apigee Edge के मैसेज प्रोसेसर और बैकएंड सर्वर के बीच एसएसएल हैंडशेक की प्रोसेस पूरी न हो पाने की वजह से. गड़बड़ी के मैसेज में, 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 में गड़बड़ी का मैसेज faultstring दिखता है, तो इस गड़बड़ी को ठीक करने का तरीका जानें.
यह गड़बड़ी, Apigee Edge के मैसेज प्रोसेसर और बैकएंड सर्वर के बीच एसएसएल हैंडशेक प्रोसेस के दौरान होती है:
- अगर Apigee Edge के मैसेज प्रोसेसर के truststore में:
- इसमें ऐसी सर्टिफ़िकेट चेन शामिल है जो बैकएंड सर्वर की पूरी सर्टिफ़िकेट चेन से मेल नहीं खाती या
- इसमें बैकएंड सर्वर की पूरी सर्टिफ़िकेट चेन शामिल नहीं है
- अगर बैकएंड सर्वर से मिली सर्टिफ़िकेट चेन:
- इसमें पूरी तरह क्वालिफ़ाइड डोमेन नेम (एफ़क्यूडीएन) शामिल है, जो टारगेट एंडपॉइंट में बताए गए होस्ट नेम से मेल नहीं खाता
- इसमें गलत या अधूरी सर्टिफ़िकेट चेन शामिल है
इस समस्या की ये वजहें हो सकती हैं:
| वजह | ब्यौरा | इनके लिए समस्या हल करने के निर्देश |
|---|---|---|
| Message Processor के ट्रस्टस्टोर में गलत/अधूरा सर्टिफ़िकेट या सर्टिफ़िकेट चेन मौजूद है | Apigee Edge के मैसेज प्रोसेसर के ट्रस्टस्टोर में सेव किया गया सर्टिफ़िकेट और/या उसकी चेन, बैकएंड सर्वर के सर्टिफ़िकेट चेन से मेल नहीं खाती या उसमें बैकएंड सर्वर की पूरी सर्टिफ़िकेट चेन शामिल नहीं है. | Edge Private और Public Cloud के उपयोगकर्ता |
| बैकएंड सर्वर के सर्टिफ़िकेट में मौजूद एफ़क्यूडीएन और टारगेट एंडपॉइंट में मौजूद होस्टनेम का मेल न खाना | बैकएंड सर्वर ने जो सर्टिफ़िकेट दिया है उसमें मौजूद एफ़क्यूडीएन, टारगेट एंडपॉइंट में दिए गए होस्ट नेम से मेल नहीं खाता. | Edge Private और Public Cloud के उपयोगकर्ता |
| बैकएंड सर्वर ने गलत/अधूरा सर्टिफ़िकेट या सर्टिफ़िकेट चेन दी है | बैकएंड सर्वर ने जो सर्टिफ़िकेट चेन दी है वह गलत है या अधूरी है. | Edge Private और Public Cloud के उपयोगकर्ता |
गड़बड़ी का पता लगाने के सामान्य चरण
इस गड़बड़ी का पता लगाने के लिए, इनमें से किसी टूल/तकनीक का इस्तेमाल करें:
एपीआई मॉनिटरिंग
पहली प्रक्रिया: एपीआई मॉनिटरिंग का इस्तेमाल करना
एपीआई मॉनिटरिंग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में, सही भूमिका वाले उपयोगकर्ता के तौर पर साइन इन करें.
उस संगठन पर स्विच करें जिसमें आपको समस्या की जांच करनी है.
- विश्लेषण करें > एपीआई मॉनिटरिंग > जांच करें पेज पर जाएं.
- वह समयावधि चुनें जिसमें आपको गड़बड़ियां दिखीं.
समय के हिसाब से गड़बड़ी का कोड प्लॉट करें.
वह सेल चुनें जिसमें गड़बड़ी का कोड
messaging.adaptors.http.flow.SslHandshakeFailedमौजूद है. जैसा कि नीचे दिखाया गया है:
गड़बड़ी के कोड
messaging.adaptors.http.flow.SslHandshakeFailedके बारे में जानकारी, यहां दिखाई गई है:
लॉग देखें पर क्लिक करें और पूरे न हो पाने वाले अनुरोध की लाइन को बड़ा करें.
- लॉग विंडो में, यह जानकारी नोट करें:
- अनुरोध मैसेज आईडी
- स्टेटस कोड:
503 - गड़बड़ी का सोर्स:
target - गड़बड़ी का कोड:
messaging.adaptors.http.flow.SslHandshakeFailed
ट्रेस
दूसरी प्रक्रिया: Trace टूल का इस्तेमाल करना
ट्रेस टूल का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- ट्रेस सेशन चालू करें. इसके बाद, इनमें से कोई एक काम करें
- गड़बड़ी कोड
messaging.adaptors.http.flow.SslHandshakeFailedवाली503 Service Unavailableगड़बड़ी होने का इंतज़ार करें या - अगर आपको समस्या का पता चल गया है, तो समस्या को फिर से ठीक करने के लिए एपीआई कॉल करें
503 Service Unavailable
- गड़बड़ी कोड
पक्का करें कि Show all 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 Data Recorded) फ़ेज़ पर जाएं और उस पर क्लिक करें.
नीचे की ओर स्क्रोल करके, फ़ेज़ की जानकारी देने वाले गड़बड़ी के हेडर सेक्शन पर जाएं. इसके बाद, नीचे दिखाए गए तरीके से 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
तीसरी प्रक्रिया: NGINX के ऐक्सेस लॉग का इस्तेमाल करना
NGINX ऐक्सेस लॉग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो NGINX के ऐक्सेस लॉग का इस्तेमाल करके, एचटीटीपी
503 Service Unavailableके बारे में अहम जानकारी का पता लगाया जा सकता है. NGINX के ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- खोजें कि क्या किसी खास समयावधि के दौरान, गड़बड़ी कोड
503messaging.adaptors.http.flow.SslHandshakeFailedवाली कोई गड़बड़ी हुई है (अगर समस्या पहले हुई थी) या क्या अब भी503वाली कोई गड़बड़ी हो रही है. अगर आपको X-Apigee-fault-code से मेल खाने वाली
503गड़बड़ियां मिलती हैं, तोmessaging.adaptors.http.flow.SslHandshakeFailedकी वैल्यू का पता लगाएं. इसके बाद, X-Apigee-fault-source की वैल्यू का पता लगाएं.NGINX के ऐक्सेस लॉग में मौजूद 503 गड़बड़ी का उदाहरण:
NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में, X-Apigee-fault-code और X-Apigee-fault-source के लिए ये वैल्यू दी गई हैं:
हेडर वैल्यू X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
मैसेज प्रोसेसर के लॉग
चौथी प्रक्रिया: मैसेज प्रोसेसर के लॉग का इस्तेमाल करना
- एपीआई मॉनिटरिंग, ट्रेस टूल या NGINX ऐक्सेस लॉग का इस्तेमाल करके, अनुरोध पूरा न होने की वजह बताने वाले मैसेज का आईडी पता करें. इसके बारे में गड़बड़ी का पता लगाने के सामान्य तरीके में बताया गया है.
मैसेज प्रोसेसर के लॉग (
/opt/apigee/var/log/edge-message-processor/logs/system.log) में, अनुरोध के मैसेज आईडी को खोजें. आपको यह गड़बड़ी दिख सकती है:org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@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-1NIOThread@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 targetat 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 का मैसेज प्रोसेसर, बैकएंड सर्वर के सर्टिफ़िकेट की पुष्टि नहीं कर सका.
वजह: मैसेज प्रोसेसर के ट्रस्टस्टोर में गलत/अधूरा सर्टिफ़िकेट या सर्टिफ़िकेट चेन
संक्रमण की जांच
- एपीआई मॉनिटरिंग, ट्रेस टूल या NGINX ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी के लिए गड़बड़ी कोड और गड़बड़ी का सोर्स पता करें. इसके बारे में गड़बड़ी का पता लगाने के सामान्य तरीके में बताया गया है.
- अगर गड़बड़ी का कोड
messaging.adaptors.http.flow.SslHandshakeFailedहै, तो गड़बड़ी का मैसेज पता लगाने के लिए, इनमें से कोई एक तरीका अपनाएं: - डाइग्नोसिस के सामान्य चरण में बताए गए तरीके से, Trace टूल का इस्तेमाल करके 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 का मैसेज प्रोसेसर, बैकएंड सर्वर के सर्टिफ़िकेट की पुष्टि नहीं कर सका.
इस समस्या को दो चरणों में डीबग किया जा सकता है:
- पहला चरण: बैकएंड सर्वर की सर्टिफ़िकेट चेन का पता लगाना
- दूसरा चरण: Message Processor के ट्रस्टस्टोर में सेव की गई सर्टिफ़िकेट चेन की तुलना करना
पहला चरण
पहला चरण: बैकएंड सर्वर के सर्टिफ़िकेट चेन का पता लगाना
बैकएंड सर्वर की सर्टिफ़िकेट चेन का पता लगाने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:
openssl
बैकएंड सर्वर के होस्टनेम के ख़िलाफ़ openssl कमांड को इस तरह से लागू करें:
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
ऊपर दिए गए निर्देश के आउटपुट में, सर्टिफ़िकेट चेन को नोट करें:
openssl कमांड के आउटपुट से, बैकएंड सर्वर की सर्टिफ़िकेट चेन का सैंपल:
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
- अगर आप सार्वजनिक क्लाउड के उपयोगकर्ता हैं, तो बैकएंड सर्वर पर टीसीपी/आईपी पैकेट कैप्चर करें.
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो बैकएंड सर्वर या मैसेज प्रोसेसर पर टीसीपी/आईपी पैकेट कैप्चर किए जा सकते हैं. बेहतर होगा कि इन्हें बैकएंड सर्वर पर कैप्चर किया जाए, क्योंकि पैकेट बैकएंड सर्वर पर डिक्रिप्ट किए जाते हैं.
टीसीपी/आईपी पैकेट कैप्चर करने के लिए, tcpdump कमांड का इस्तेमाल करें:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
Wireshark टूल या इसी तरह के किसी ऐसे टूल का इस्तेमाल करके टीसीपी/आईपी पैकेट का विश्लेषण करें जिसके बारे में आपको जानकारी हो.
Tcpdump के सैंपल का विश्लेषण
- पैकेट #43: मैसेज प्रोसेसर (सोर्स) ने बैकएंड सर्वर (डेस्टिनेशन) को
Client Helloमैसेज भेजा. - पैकेट #44: बैकएंड सर्वर, मैसेज प्रोसेसर से मिले
Client Helloमैसेज को स्वीकार करता है. - पैकेट #45: बैकएंड सर्वर, अपने सर्टिफ़िकेट के साथ
Server Helloमैसेज भेजता है. - पैकेट #46: मैसेज प्रोसेसर,
Server Helloमैसेज और सर्टिफ़िकेट मिलने की पुष्टि करता है. पैकेट #47: मैसेज प्रोसेसर,
FIN, ACKमैसेज भेजता है. इसके बाद, पैकेट #48 मेंRST, ACKमैसेज भेजता है.इससे पता चलता है कि मैसेज प्रोसेसर, बैकएंड सर्वर के सर्टिफ़िकेट की पुष्टि नहीं कर सका. ऐसा इसलिए होता है, क्योंकि मैसेज प्रोसेसर के पास ऐसा कोई सर्टिफ़िकेट नहीं होता जो बैकएंड सर्वर के सर्टिफ़िकेट से मेल खाता हो. इसके अलावा, मैसेज प्रोसेसर के पास मौजूद सर्टिफ़िकेट के साथ बैकएंड सर्वर के सर्टिफ़िकेट पर भरोसा नहीं किया जा सकता.
आपके पास वापस जाकर, पैकेट #45 की समीक्षा करने का विकल्प होता है. साथ ही, बैकएंड सर्वर से भेजी गई सर्टिफ़िकेट चेन का पता लगाया जा सकता है
- इस उदाहरण में, देखा जा सकता है कि सर्वर ने
common name (CN) = mocktarget.apigee.netके साथ एक लीफ़ सर्टिफ़िकेट भेजा है. इसके बाद,CN= GTS CA 1D4के साथ इंटरमीडिएट सर्टिफ़िकेट औरCN = GTX Root R1के साथ रूट सर्टिफ़िकेट भेजा है.
अगर आपको पता चलता है कि सर्वर के सर्टिफ़िकेट की पुष्टि नहीं हो पाई है, तो दूसरा चरण: बैकएंड सर्वर के सर्टिफ़िकेट और Message Processor के ट्रस्टस्टोर में सेव किए गए सर्टिफ़िकेट की तुलना करें पर जाएं.
- पैकेट #43: मैसेज प्रोसेसर (सोर्स) ने बैकएंड सर्वर (डेस्टिनेशन) को
दूसरा चरण
दूसरा चरण: बैकएंड सर्वर के सर्टिफ़िकेट और Message Processor के ट्रस्टस्टोर में सेव किए गए सर्टिफ़िकेट की तुलना करना
- बैकएंड सर्वर की सर्टिफ़िकेट चेन का पता लगाएं.
- नीचे दिया गया तरीका अपनाकर, Message Processor के ट्रस्टस्टोर में सेव किए गए सर्टिफ़िकेट का पता लगाएं:
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 के यूज़र इंटरफ़ेस (यूआई) में, Environments > References को चुनें. किसी खास ट्रस्टस्टोर रेफ़रंस के लिए, रेफ़रंस कॉलम में दिया गया नाम नोट करें. यह आपके ट्रस्टस्टोर का नाम होगा.
ऊपर दिए गए उदाहरण में, ट्रस्टस्टोर का नाम यह है:
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"
Private Cloud का उपयोगकर्ता:
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" ]
-
किसी कीस्टोर या ट्रस्टस्टोर से, किसी खास सर्टिफ़िकेट की जानकारी पाएं.
यह एपीआई, किसी खास ट्रस्टस्टोर में मौजूद किसी खास सर्टिफ़िकेट के बारे में जानकारी देता है.
पब्लिक क्लाउड का उपयोगकर्ता:
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"
Private Cloud का उपयोगकर्ता
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
मैसेज प्रोसेसर (क्लाइंट) के ट्रस्टस्टोर से:
"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
मैसेज प्रोसेसर (क्लाइंट) के ट्रस्टस्टोर से:
"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 Processor के ट्रस्टस्टोर में मौजूद नहीं है.
ट्रस्टस्टोर में रूट सर्टिफ़िकेट मौजूद न होने की वजह से, Message Processor यह अपवाद दिखाता है:
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दिखाता है.
- लीफ़ सर्टिफ़िकेट:
रिज़ॉल्यूशन
- पक्का करें कि आपके पास बैकएंड सर्वर की सही और पूरी सर्टिफ़िकेट चेन हो.
- अगर आप Public Cloud के उपयोगकर्ता हैं, तो Apigee Edge के मैसेज प्रोसेसर ट्रस्टस्टोर के लिए सर्टिफ़िकेट अपडेट करने के लिए, Cloud के लिए टीएलएस सर्टिफ़िकेट अपडेट करना में दिए गए निर्देशों का पालन करें.
- अगर Private Cloud का इस्तेमाल करने वाले उपयोगकर्ता हैं, तो सर्टिफ़िकेट को Apigee Edge के मैसेज प्रोसेसर ट्रस्टस्टोर में अपडेट करने के लिए, Private Cloud के लिए टीएलएस सर्टिफ़िकेट अपडेट करना में दिए गए निर्देशों का पालन करें.
वजह: बैकएंड सर्वर के सर्टिफ़िकेट में मौजूद एफ़क्यूडीएन और टारगेट एंडपॉइंट में मौजूद होस्ट नेम मेल नहीं खाते
अगर बैकएंड सर्वर, सर्टिफ़िकेट चेन दिखाता है, जिसमें ऐसा एफ़क्यूडीएन शामिल है जो टारगेट एंडपॉइंट में दिए गए होस्ट नेम से मेल नहीं खाता है, तो 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 का उदाहरण:
<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है. बैकएंड सर्वर के सर्टिफ़िकेट में मौजूद FQDN का पता लगाने के लिए, नीचे दी गई
opensslकमांड का इस्तेमाल करें: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.neti:/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ऊपर दिए गए उदाहरण में, बैकएंड सर्वर का FQDN
backend.apigee.netहै.- अगर पहले चरण में मिला बैकएंड सर्वर का होस्ट नेम और दूसरे चरण में मिला FQDN मेल नहीं खाते हैं, तो गड़बड़ी की वजह यही है.
- ऊपर दिए गए उदाहरण में, टारगेट एंडपॉइंट में होस्ट का नाम
backend.company.comहै. हालांकि, बैकएंड सर्वर के सर्टिफ़िकेट में मौजूद FQDN का नामbackend.apigee.netहै. ये दोनों वैल्यू मैच नहीं करती हैं. इसलिए, आपको यह गड़बड़ी का मैसेज मिलता है.
रिज़ॉल्यूशन
इनमें से किसी एक तरीके का इस्तेमाल करके, इस समस्या को ठीक किया जा सकता है:
सही एफ़क्यूडीएन
बैकएंड सर्वर के कीस्टोर को सही FQDN, मान्य, और पूरी सर्टिफ़िकेट चेन के साथ अपडेट करें:
- अगर आपके पास सही FQDN वाला बैकएंड सर्वर का सर्टिफ़िकेट नहीं है, तो किसी सही CA (सर्टिफ़िकेट देने वाली संस्था) से सही सर्टिफ़िकेट पाएं.
पुष्टि करें कि आपके पास बैकएंड सर्वर की मान्य और पूरी सर्टिफ़िकेट चेन है.
- जब आपके पास मान्य और पूरा सर्टिफ़िकेट चेन हो, जिसमें लीफ़ या इकाई के सर्टिफ़िकेट में बैकएंड सर्वर का सही एफ़क्यूडीएन हो, जो टारगेट एंडपॉइंट में दिए गए होस्ट नेम के जैसा हो, तब बैकएंड के कीस्टोर को पूरे सर्टिफ़िकेट चेन के साथ अपडेट करें.
बैकएंड सर्वर सही होना चाहिए
टारगेट एंडपॉइंट को बैकएंड सर्वर के सही होस्टनेम से अपडेट करें:
- अगर टारगेट एंडपॉइंट में होस्ट का नाम गलत तरीके से दिया गया है, तो टारगेट एंडपॉइंट को अपडेट करें. इसमें होस्ट का सही नाम डालें, जो बैकएंड सर्वर के सर्टिफ़िकेट में मौजूद 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नोट करें.openssl कमांड के आउटपुट से, बैकएंड सर्वर की सर्टिफ़िकेट चेन का सैंपल:
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/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_#- बैकएंड सर्वर पर कैप्चर किए गए टीसीपी/आईपी पैकेट
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो यह जानकारी दें:
- गड़बड़ी का पूरा मैसेज मिला
- एपीआई प्रॉक्सी बंडल
- गड़बड़ी दिखाने वाली ट्रेस फ़ाइल
- मैसेज प्रोसेसर के लॉग
/opt/apigee/var/log/edge-message-processor/logs/system.log opensslकमांड का आउटपुट:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- बैकएंड सर्वर या मैसेज प्रोसेसर पर कैप्चर किए गए टीसीपी/आईपी पैकेट.
- किसी कीस्टोर या ट्रस्टस्टोर के सभी सर्टिफ़िकेट पाएं एपीआई का आउटपुट. साथ ही, किसी कीस्टोर या ट्रस्टस्टोर से सर्टिफ़िकेट की जानकारी पाएं एपीआई का इस्तेमाल करके हासिल किए गए हर सर्टिफ़िकेट की जानकारी.
रेफ़रंस
- सर्टिफ़िकेट की चेन ऑफ़ ट्रस्ट
- OpenSSL कमांड