503 পরিষেবা অনুপলব্ধ - SSL হ্যান্ডশেক ব্যর্থতা৷

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

লক্ষণ

ক্লায়েন্ট অ্যাপ্লিকেশনটি এপিআই কলের প্রতিক্রিয়া হিসাবে 503 Service Unavailable HTTP স্ট্যাটাস কোড এবং 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"
      }
   }
}

সম্ভাব্য কারণসমূহ

বিভিন্ন কারণে Apigee Edge-এর মেসেজ প্রসেসর এবং ব্যাকএন্ড সার্ভারের মধ্যে SSL হ্যান্ডশেক প্রক্রিয়া ব্যর্থ হলে, আপনি 503 Service Unavailable স্ট্যাটাস কোড এবং messaging.adaptors.http.flow.SslHandshakeFailed এরর কোডটি পেতে পারেন। এরর মেসেজটি 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 এই এরর মেসেজটি দেখতে পান, তাহলে কীভাবে এই এররটি faultstring করবেন।

Apigee Edge-এর মেসেজ প্রসেসর এবং ব্যাকএন্ড সার্ভারের মধ্যে SSL হ্যান্ডশেক প্রক্রিয়ার সময় এই ত্রুটিটি ঘটে:

  • যদি Apigee Edge-এর মেসেজ প্রসেসরের ট্রাস্টস্টোরটি :
    • এমন একটি সার্টিফিকেট চেইন ধারণ করে যা ব্যাকএন্ড সার্ভারের সম্পূর্ণ সার্টিফিকেট চেইনের সাথে মেলে না, অথবা
    • ব্যাকএন্ড সার্ভারের সম্পূর্ণ সার্টিফিকেট চেইন ধারণ করে না
  • যদি ব্যাকএন্ড সার্ভার দ্বারা উপস্থাপিত সার্টিফিকেট চেইন:

এই সমস্যার সম্ভাব্য কারণগুলো নিম্নরূপ:

কারণ বর্ণনা সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য
মেসেজ প্রসেসরের ট্রাস্টস্টোরে ভুল/অসম্পূর্ণ সার্টিফিকেট বা সার্টিফিকেট চেইন Apigee Edge-এর মেসেজ প্রসেসরের ট্রাস্টস্টোরে সংরক্ষিত সার্টিফিকেট এবং/অথবা এর চেইনটি ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইনের সাথে মেলে না অথবা এতে ব্যাকএন্ড সার্ভারের সম্পূর্ণ সার্টিফিকেট চেইনটি নেই। এজ প্রাইভেট এবং পাবলিক ক্লাউড ব্যবহারকারীরা
ব্যাকএন্ড সার্ভারের সার্টিফিকেটে থাকা FQDN এবং টার্গেট এন্ডপয়েন্টের হোস্ট নেমের মধ্যে অমিল। ব্যাকএন্ড সার্ভার কর্তৃক উপস্থাপিত সার্টিফিকেটে এমন একটি FQDN রয়েছে যা টার্গেট এন্ডপয়েন্টে নির্দিষ্ট করা হোস্ট নেমের সাথে মেলে না। এজ প্রাইভেট এবং পাবলিক ক্লাউড ব্যবহারকারীরা
ব্যাকএন্ড সার্ভার কর্তৃক উপস্থাপিত ভুল/অসম্পূর্ণ সার্টিফিকেট বা সার্টিফিকেট চেইন ব্যাকএন্ড সার্ভার কর্তৃক উপস্থাপিত সার্টিফিকেট চেইনটি হয় ভুল অথবা অসম্পূর্ণ। এজ প্রাইভেট এবং পাবলিক ক্লাউড ব্যবহারকারীরা

সাধারণ রোগ নির্ণয়ের পদক্ষেপ

এই ত্রুটি নির্ণয় করতে নিম্নলিখিত সরঞ্জাম/কৌশলগুলোর মধ্যে যেকোনো একটি ব্যবহার করুন:

এপিআই মনিটরিং

পদ্ধতি #১: এপিআই মনিটরিং ব্যবহার করা

এপিআই মনিটরিং ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. উপযুক্ত ভূমিকা সম্পন্ন একজন ব্যবহারকারী হিসেবে Apigee Edge UI-তে সাইন ইন করুন ।
  2. যে প্রতিষ্ঠানে আপনি বিষয়টি তদন্ত করতে চান, সেখানে যান।

  3. Analyze > API Monitoring > Investigate পৃষ্ঠায় যান।
  4. সেই নির্দিষ্ট সময়সীমাটি নির্বাচন করুন যার মধ্যে আপনি ত্রুটিগুলো লক্ষ্য করেছেন।
  5. সময়ের সাপেক্ষে ফল্ট কোডের লেখচিত্র অঙ্কন করুন।

  6. নীচে দেখানো অনুযায়ী, যে সেলটিতে messaging.adaptors.http.flow.SslHandshakeFailed ফল্ট কোডটি রয়েছে, সেটি নির্বাচন করুন:

    ( বড় ছবি দেখুন )

  7. messaging.adaptors.http.flow.SslHandshakeFailed ফল্ট কোডটির তথ্য নিচে দেখানো অনুযায়ী প্রদর্শিত হয়:

    ( বড় ছবি দেখুন )

  8. 'লগ দেখুন'-এ ক্লিক করুন এবং ব্যর্থ অনুরোধটির সারিটি প্রসারিত করুন।

    ( বড় ছবি দেখুন )

  9. লগস উইন্ডো থেকে নিম্নলিখিত বিবরণগুলো নোট করুন:
    • অনুরোধ বার্তা আইডি
    • স্ট্যাটাস কোড: 503
    • ত্রুটির উৎস: target
    • ত্রুটি কোড: messaging.adaptors.http.flow.SslHandshakeFailed

ট্রেস

পদ্ধতি #২: ট্রেস টুল ব্যবহার করা

ট্রেস টুল ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. ট্রেস সেশনটি সক্রিয় করুন এবং হয়
    • messaging.adaptors.http.flow.SslHandshakeFailed এরর কোড সহ 503 Service Unavailable এররটি ঘটা পর্যন্ত অপেক্ষা করুন, অথবা
    • আপনি যদি সমস্যাটি পুনরায় তৈরি করতে পারেন, 503 Service Unavailable সমস্যাটি পুনরুৎপাদন করতে API কলটি করুন।
  2. নিশ্চিত করুন যে 'Show all FlowInfos' চালু আছে:

  3. ব্যর্থ হওয়া অনুরোধগুলোর মধ্যে একটি নির্বাচন করুন এবং ট্রেসটি পরীক্ষা করুন।
  4. ট্রেসের বিভিন্ন ধাপ অতিক্রম করে ত্রুটিটি কোথায় ঘটেছে তা খুঁজে বের করুন।
  5. আপনি সাধারণত 'টার্গেট রিকোয়েস্ট ফ্লো স্টার্টেড' ধাপের পরে ত্রুটিটি দেখতে পাবেন, যেমনটি নিচে দেখানো হয়েছে:

    ( বড় ছবি দেখুন )

  6. ট্রেস থেকে নিম্নলিখিতগুলির মান লক্ষ্য করুন:
    • ত্রুটি: 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
    • ত্রুটির কারণ: 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 এই ত্রুটির মানটি নির্দেশ করে যে SSL হ্যান্ডশেক ব্যর্থ হয়েছে, কারণ Apigee Edge-এর মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারের সার্টিফিকেটটি যাচাই করতে পারেনি।
  7. ট্রেসটিতে থাকা AX (অ্যানালিটিক্স ডেটা রেকর্ডেড) ফেজটিতে যান এবং এটিতে ক্লিক করুন।
  8. Phase Details Error Headers সেকশন পর্যন্ত স্ক্রল ডাউন করুন এবং নিচে দেখানো অনুযায়ী X-Apigee-fault-code , X-Apigee-fault-source এবং X-Apigee-Message-ID- এর মান নির্ধারণ করুন:

    ( বড় ছবি দেখুন )

  9. X-Apigee-fault-code , X-Apigee-fault-source , এবং X-Apigee-Message-ID - এই মানগুলো লক্ষ্য করুন:
  10. ত্রুটির হেডার মূল্য
    এক্স-এপিজি-ফল্ট-কোড messaging.adaptors.http.flow.SslHandshakeFailed
    এক্স-এপিজি-ফল্ট-সোর্স target
    এক্স-এপিজি-মেসেজ-আইডি MESSAGE_ID

এনজিআইএনএক্স

পদ্ধতি #৩: NGINX অ্যাক্সেস লগ ব্যবহার করা

NGINX অ্যাক্সেস লগ ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে HTTP 503 Service Unavailable সম্পর্কিত মূল তথ্য নির্ধারণ করতে NGINX অ্যাক্সেস লগ ব্যবহার করতে পারেন।
  2. NGINX অ্যাক্সেস লগগুলি পরীক্ষা করুন:

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log

  3. একটি নির্দিষ্ট সময়কালের মধ্যে (যদি সমস্যাটি অতীতে ঘটে থাকে) messaging.adaptors.http.flow.SslHandshakeFailed এরর কোড সহ কোনো 503 এরর আছে কিনা, অথবা এখনও কোনো রিকোয়েস্ট 503 এরর দেখিয়ে ফেইল করছে কিনা, তা খুঁজে দেখুন।
  4. যদি আপনি messaging.adaptors.http.flow.SslHandshakeFailed মানের সাথে মিলে যাওয়া X-Apigee-fault-code সহ কোনো 503 ত্রুটি খুঁজে পান, তাহলে X-Apigee-fault-source-এর মান নির্ধারণ করুন।

    NGINX অ্যাক্সেস লগ থেকে প্রাপ্ত ৫০৩ ত্রুটির নমুনা:

    ( বড় ছবি দেখুন )

    NGINX অ্যাক্সেস লগ থেকে নেওয়া উপরের নমুনা এন্ট্রিটিতে X-Apigee-fault-code এবং X-Apigee-fault-source-এর জন্য নিম্নলিখিত মানগুলি রয়েছে:

    হেডার মূল্য
    এক্স-এপিজি-ফল্ট-কোড messaging.adaptors.http.flow.SslHandshakeFailed
    এক্স-এপিজি-ফল্ট-সোর্স target

মেসেজ প্রসেসর লগ

পদ্ধতি #৪: মেসেজ প্রসেসর লগ ব্যবহার করা

  1. সাধারণ রোগ নির্ণয়ের ধাপগুলিতে যেমন ব্যাখ্যা করা হয়েছে, সেই অনুযায়ী API মনিটরিং, ট্রেস টুল বা NGINX অ্যাক্সেস লগ ব্যবহার করে ব্যর্থ হওয়া অনুরোধগুলির মধ্যে একটির মেসেজ আইডি নির্ধারণ করুন।
  2. মেসেজ প্রসেসর লগে ( /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
    

    উপরোক্ত ত্রুটিটি নির্দেশ করে যে মেসেজ প্রসেসর এবং ব্যাকএন্ড সার্ভারের মধ্যে SSL হ্যান্ডশেক ব্যর্থ হয়েছে।

    এর পরে একটি ব্যতিক্রম দেখা দেবে, যার বিস্তারিত স্ট্যাক ট্রেস নিচে দেখানো হলো:

    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

    এর থেকে বোঝা যায় যে, SSL হ্যান্ডশেক ব্যর্থ হয়েছে, কারণ Apigee Edge-এর মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারের সার্টিফিকেটটি যাচাই করতে পারেনি।

কারণ: মেসেজ প্রসেসরের ট্রাস্টস্টোরে ভুল/অসম্পূর্ণ সার্টিফিকেট বা সার্টিফিকেট চেইন।

রোগ নির্ণয়

  1. সাধারণ রোগ নির্ণয়ের ধাপগুলিতে ব্যাখ্যা করা অনুযায়ী API মনিটরিং, ট্রেস টুল বা NGINX অ্যাক্সেস লগ ব্যবহার করে পরিলক্ষিত ত্রুটির জন্য ফল্ট কোড এবং ফল্ট সোর্স নির্ধারণ করুন।
  2. যদি ফল্ট কোডটি messaging.adaptors.http.flow.SslHandshakeFailed হয়, তাহলে নিম্নলিখিত পদ্ধতিগুলোর মধ্যে যেকোনো একটি ব্যবহার করে ত্রুটির বার্তাটি নির্ণয় করুন:
  3. যদি এরর মেসেজটি " sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target" হয়, তাহলে এটি নির্দেশ করে যে SSL হ্যান্ডশেক ব্যর্থ হয়েছে, কারণ Apigee Edge-এর মেসেজ প্রসেসর ব্যাকএন্ড সার্ভারের সার্টিফিকেটটি ভ্যালিডেট করতে পারেনি।

আপনি এই সমস্যাটি দুটি ধাপে ডিবাগ করতে পারেন:

  1. পর্যায় ১: ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইন নির্ধারণ করুন
  2. পর্যায় ২: মেসেজ প্রসেসরের ট্রাস্টস্টোরে সংরক্ষিত সার্টিফিকেট চেইন তুলনা করুন

প্রথম পর্যায়

পর্যায় ১: ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইন নির্ধারণ করুন

ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইন নির্ধারণ করতে নিম্নলিখিত পদ্ধতিগুলোর মধ্যে একটি ব্যবহার করুন:

ওপেনএসএসএল

নিম্নলিখিতভাবে ব্যাকএন্ড সার্ভারের হোস্ট নেমের বিপরীতে 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

  1. আপনি যদি পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে ব্যাকএন্ড সার্ভারে TCP/IP প্যাকেটগুলো ক্যাপচার করুন।
  2. আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে আপনি ব্যাকএন্ড সার্ভার বা মেসেজ প্রসেসরে TCP/IP প্যাকেটগুলো ক্যাপচার করতে পারেন। বিশেষত ব্যাকএন্ড সার্ভারেই সেগুলো ক্যাপচার করা শ্রেয়, কারণ প্যাকেটগুলো সেখানেই ডিক্রিপ্ট করা হয়।
  3. TCP/IP প্যাকেট ক্যাপচার করতে নিম্নলিখিত tcpdump কমান্ডটি ব্যবহার করুন:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. Wireshark টুল বা আপনার পরিচিত অনুরূপ কোনো টুল ব্যবহার করে TCP/IP প্যাকেটগুলো বিশ্লেষণ করুন।

    Tcpdump-এর নমুনা বিশ্লেষণ

    ( বড় ছবি দেখুন )

    • প্যাকেট #৪৩: মেসেজ প্রসেসর (উৎস) ব্যাকএন্ড সার্ভারে (গন্তব্য) একটি Client Hello বার্তা পাঠিয়েছে।
    • প্যাকেট #৪৪: ব্যাকএন্ড সার্ভার মেসেজ প্রসেসরের কাছ থেকে Client Hello বার্তাটি প্রাপ্তি স্বীকার করে।
    • প্যাকেট #৪৫: ব্যাকএন্ড সার্ভার তার সার্টিফিকেট সহ Server Hello বার্তাটি পাঠায়।
    • প্যাকেট #৪৬: মেসেজ প্রসেসর Server Hello মেসেজ এবং সার্টিফিকেট প্রাপ্তি স্বীকার করছে।
    • প্যাকেট #৪৭: মেসেজ প্রসেসর একটি FIN, ACK মেসেজ পাঠায়, যার পরে প্যাকেট #৪৮ -এ RST, ACK হয়।

      এর থেকে বোঝা যায় যে, মেসেজ প্রসেসর দ্বারা ব্যাকএন্ড সার্ভারের সার্টিফিকেট যাচাইকরণ ব্যর্থ হয়েছে। এর কারণ হলো, মেসেজ প্রসেসরের কাছে ব্যাকএন্ড সার্ভারের সার্টিফিকেটের সাথে মেলে এমন কোনো সার্টিফিকেট নেই, অথবা এটি তার (মেসেজ প্রসেসরের) ট্রাস্টস্টোরে থাকা সার্টিফিকেটগুলোর সাথে ব্যাকএন্ড সার্ভারের সার্টিফিকেটটিকে বিশ্বাসযোগ্য বলে মনে করে না।

    • আপনি ফিরে গিয়ে ৪৫ নম্বর প্যাকেটটি পর্যালোচনা করতে পারেন এবং ব্যাকএন্ড সার্ভার কর্তৃক প্রেরিত সার্টিফিকেট চেইনটি নির্ধারণ করতে পারেন।

      ( বড় ছবি দেখুন )

    • এই উদাহরণে, আপনি দেখতে পাচ্ছেন যে সার্ভারটি common name (CN) = mocktarget.apigee.net সহ একটি লিফ সার্টিফিকেট, এরপরে CN= GTS CA 1D4 সহ একটি ইন্টারমিডিয়েট সার্টিফিকেট এবং CN = GTX Root R1 সহ একটি রুট সার্টিফিকেট পাঠিয়েছে।

    যদি আপনি নিশ্চিত হন যে সার্ভারের সার্টিফিকেশন যাচাইকরণ ব্যর্থ হয়েছে, তাহলে দ্বিতীয় ধাপে যান: ব্যাকএন্ড সার্ভারের সার্টিফিকেট এবং মেসেজ প্রসেসরের ট্রাস্টস্টোরে সংরক্ষিত সার্টিফিকেটগুলোর তুলনা করুন ।

দ্বিতীয় পর্যায়

পর্যায় ২: ব্যাকএন্ড সার্ভারের সার্টিফিকেট এবং মেসেজ প্রসেসরের ট্রাস্টস্টোরে সংরক্ষিত সার্টিফিকেটগুলোর তুলনা করুন।

  1. ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইন নির্ধারণ করুন ।
  2. নিম্নলিখিত ধাপগুলো অনুসরণ করে মেসেজ প্রসেসরের ট্রাস্টস্টোরে সংরক্ষিত সার্টিফিকেটটি নির্ধারণ করুন:
    1. 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>
    2. উপরের উদাহরণে, TrustStore রেফারেন্সের নামটি হলো myCompanyTruststoreRef ।
    3. Edge UI-তে, Environments > References নির্বাচন করুন। নির্দিষ্ট ট্রাস্টস্টোর রেফারেন্সের জন্য Reference কলামে থাকা নামটি নোট করুন। এটিই হবে আপনার ট্রাস্টস্টোরের নাম।

      ( বড় ছবি দেখুন )

    4. উপরের উদাহরণে ট্রাস্টস্টোরের নামটি হলো:

      myCompanyTruststoreRef : myCompanyTruststore

  3. নিম্নলিখিত API-গুলো ব্যবহার করে ট্রাস্টস্টোরে (যা পূর্ববর্তী ধাপে নির্ধারণ করা হয়েছে) সংরক্ষিত সার্টিফিকেটগুলো সংগ্রহ করুন:

    1. একটি কীস্টোর বা ট্রাস্টস্টোরের সমস্ত সার্টিফিকেট পান । এই এপিআইটি নির্দিষ্ট ট্রাস্টস্টোরের সমস্ত সার্টিফিকেট তালিকাভুক্ত করে।

      পাবলিক ক্লাউড ব্যবহারকারী:

      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"
      

      কোথায়:

      নমুনা আউটপুট:

      উদাহরণ ট্রাস্টস্টোর myCompanyTruststore এর সার্টিফিকেটগুলো হলো:

      [
        "serverCert"
      ]
    2. একটি কীস্টোর বা ট্রাস্টস্টোর থেকে নির্দিষ্ট সার্টিফিকেটের বিবরণ পান । এই API-টি নির্দিষ্ট ট্রাস্টস্টোরে থাকা একটি নির্দিষ্ট সার্টিফিকেটের তথ্য প্রদান করে।

      পাবলিক ক্লাউড ব্যবহারকারী:

      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"
      

      কোথায়:

      নমুনা আউটপুট

      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",
  4. ধাপ ১-এ প্রাপ্ত আসল সার্ভার সার্টিফিকেট এবং ধাপ ৩-এ ট্রাস্টস্টোরে সংরক্ষিত সার্টিফিকেটটি মেলে কিনা তা যাচাই করুন। যদি সেগুলো না মেলে, তাহলে সেটাই সমস্যার কারণ।

    উপরে দেখানো উদাহরণ থেকে, চলুন এক এক করে সার্টিফিকেট দেখি:

    1. পাতার শংসাপত্র:

      ব্যাকএন্ড সার্ভার থেকে:

      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",

      ট্রাস্টস্টোরে সংরক্ষিত লিফ সার্টিফিকেটটি ব্যাকএন্ড সার্ভারের সার্টিফিকেটের সাথে মিলে যায়।

    2. ইন্টারমিডিয়েট সার্টিফিকেট:

      ব্যাকএন্ড সার্ভার থেকে:

      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",

      ট্রাস্টস্টোরে সংরক্ষিত অন্তর্বর্তী সার্টিফিকেটটি ব্যাকএন্ড সার্ভারের সার্টিফিকেটের সাথে মিলে যায়।

    3. রুট সার্টিফিকেট:

      ব্যাকএন্ড সার্ভার থেকে:

      s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

      মেসেজ প্রসেসরের ট্রাস্টস্টোরে রুট সার্টিফিকেটটি সম্পূর্ণভাবে অনুপস্থিত।

    4. ট্রাস্টস্টোরে রুট সার্টিফিকেটটি অনুপস্থিত থাকায়, মেসেজ প্রসেসর নিম্নলিখিত এক্সেপশনটি থ্রো করে:

      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 ফেরত পাঠায়।

সমাধান

  1. ব্যাকএন্ড সার্ভারের সঠিক ও সম্পূর্ণ সার্টিফিকেট চেইন আপনার কাছে আছে কিনা, তা নিশ্চিত করুন।
  2. আপনি যদি একজন পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে Apigee Edge-এর মেসেজ প্রসেসর ট্রাস্টস্টোরে সার্টিফিকেটটি আপডেট করার জন্য ‘ক্লাউডের জন্য একটি TLS সার্টিফিকেট আপডেট করুন ’ শীর্ষক নির্দেশাবলী অনুসরণ করুন।
  3. আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে Apigee Edge-এর মেসেজ প্রসেসর ট্রাস্টস্টোরে সার্টিফিকেটটি আপডেট করার জন্য 'প্রাইভেট ক্লাউডের জন্য একটি 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 ।

রোগ নির্ণয়

  1. এপিআই প্রক্সিতে থাকা নির্দিষ্ট টার্গেট এন্ডপয়েন্টটি পরীক্ষা করুন যেখানে আপনি এই ত্রুটিটি দেখতে পাচ্ছেন এবং ব্যাকএন্ড সার্ভারের হোস্টনেমটি নোট করুন:

    নমুনা টার্গেটএন্ডপয়েন্ট:

    <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 ।

  2. নিচে দেখানো পদ্ধতি অনুযায়ী 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
    

    উপরের উদাহরণে, ব্যাকএন্ড সার্ভারের FQDN হলো backend.apigee.net ।

  3. যদি ধাপ ১ থেকে প্রাপ্ত ব্যাকএন্ড সার্ভারের হোস্ট নেম এবং ধাপ ২ থেকে প্রাপ্ত FQDN এক না হয়, তাহলে সেটাই ত্রুটির কারণ।
  4. উপরে আলোচিত উদাহরণে, টার্গেট এন্ডপয়েন্টের হোস্ট নেম হলো backend.company. com । কিন্তু, ব্যাকএন্ড সার্ভারের সার্টিফিকেটে থাকা FQDN নেম হলো backend.apigee. net । এ দুটি মেলে না বলে আপনি এই এররটি পাচ্ছেন।

সমাধান

আপনি নিম্নলিখিত পদ্ধতিগুলোর যেকোনো একটি ব্যবহার করে এই সমস্যাটি সমাধান করতে পারেন:

সঠিক FQDN

সঠিক FQDN এবং বৈধ ও সম্পূর্ণ সার্টিফিকেট চেইন দিয়ে ব্যাকএন্ড সার্ভারের কীস্টোর আপডেট করুন:

  1. যদি আপনার কাছে সঠিক FQDN সহ ব্যাকএন্ড সার্ভারের সার্টিফিকেট না থাকে, তাহলে উপযুক্ত CA (সার্টিফিকেট অথরিটি) থেকে যথাযথ সার্টিফিকেট সংগ্রহ করুন।
  2. আপনার ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইনটি বৈধ ও সম্পূর্ণ কিনা তা যাচাই করুন ।

  3. একবার আপনার কাছে লিফ বা এনটিটি সার্টিফিকেটে ব্যাকএন্ড সার্ভারের সঠিক FQDN সহ বৈধ এবং সম্পূর্ণ সার্টিফিকেট চেইনটি চলে এলে, যা টার্গেট এন্ডপয়েন্টে নির্দিষ্ট করা হোস্ট নামের সাথে হুবহু মিলে যায়, তখন সেই সম্পূর্ণ সার্টিফিকেট চেইনটি দিয়ে ব্যাকএন্ডের কীস্টোরটি আপডেট করুন।

সঠিক ব্যাকএন্ড সার্ভার

সঠিক ব্যাকএন্ড সার্ভারের হোস্ট নেম দিয়ে টার্গেট এন্ডপয়েন্টটি আপডেট করুন:

  1. যদি টার্গেট এন্ডপয়েন্টে হোস্ট নেম ভুলভাবে উল্লেখ করা হয়ে থাকে, তাহলে ব্যাকএন্ড সার্ভারের সার্টিফিকেটে থাকা FQDN-এর সাথে মেলে এমন সঠিক হোস্ট নেম দিয়ে টার্গেট এন্ডপয়েন্টটি আপডেট করুন।
  2. এপিআই প্রক্সিতে পরিবর্তনগুলো সংরক্ষণ করুন।

    উপরে আলোচিত উদাহরণে, যদি ব্যাকএন্ড সার্ভারের হোস্টনেম ভুলভাবে উল্লেখ করা হয়ে থাকে, তাহলে আপনি ব্যাকএন্ড সার্ভারের সার্টিফিকেট থেকে 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>

কারণ: ব্যাকএন্ড সার্ভার কর্তৃক উপস্থাপিত সার্টিফিকেট বা সার্টিফিকেট চেইন ভুল বা অসম্পূর্ণ।

রোগ নির্ণয়

  1. নিম্নলিখিতভাবে ব্যাকএন্ড সার্ভারের হোস্ট নেমের বিপরীতে openssl কমান্ডটি চালিয়ে ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইনটি সংগ্রহ করুন:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    উপরের কমান্ডের আউটপুট থেকে Certificate chain নোট করুন।

    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. সার্টিফিকেট চেইন যাচাইকরণ (Valitting certificate chain) অংশে যেমন ব্যাখ্যা করা হয়েছে, সে অনুযায়ী আপনার কাছে সঠিক এবং সম্পূর্ণ সার্টিফিকেট চেইন আছে কিনা তা যাচাই করুন।
  3. যদি আপনার কাছে ব্যাকএন্ড সার্ভারের জন্য বৈধ এবং সম্পূর্ণ সার্টিফিকেট চেইন না থাকে, তাহলে সেটাই এই সমস্যার কারণ।

    উপরে দেখানো নমুনা ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইনে রুট সার্টিফিকেটটি অনুপস্থিত। তাই আপনি এই ত্রুটিটি পাচ্ছেন।

সমাধান

বৈধ এবং সম্পূর্ণ সার্টিফিকেট চেইন দিয়ে ব্যাকএন্ড সার্ভারের কীস্টোর আপডেট করুন:

  1. আপনার ব্যাকএন্ড সার্ভারের সার্টিফিকেট চেইনটি বৈধ ও সম্পূর্ণ কিনা তা যাচাই করুন ।

  2. ব্যাকএন্ড সার্ভারের কীস্টোরে বৈধ ও সম্পূর্ণ সার্টিফিকেট চেইনটি আপডেট করুন।

যদি সমস্যাটি এখনও থেকে যায়, তাহলে 'অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করুন' অংশে যান।

রোগ নির্ণয়ের তথ্য অবশ্যই সংগ্রহ করতে হবে

উপরের নির্দেশাবলী অনুসরণ করার পরেও যদি সমস্যাটি থেকে যায়, তাহলে নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং Apigee Edge Support-এর সাথে যোগাযোগ করুন:

  • আপনি যদি পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্যগুলো প্রদান করুন:
    • সংস্থার নাম
    • পরিবেশের নাম
    • এপিআই প্রক্সি নাম
    • ত্রুটিটি পুনরুৎপাদন করতে সম্পূর্ণ curl কমান্ডটি ব্যবহার করুন।
    • ত্রুটি দেখানো ট্রেস ফাইল
    • openssl কমান্ডের আউটপুট:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME : PORT_#

    • ব্যাকএন্ড সার্ভারে ক্যাপচার করা TCP/IP প্যাকেট
  • আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্যগুলো প্রদান করুন:

তথ্যসূত্র