سرویس 503 در دسترس نیست - SSL Handshake Failure

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

علامت

برنامه سرویس گیرنده کد وضعیت HTTP 503 Service Unavailable با کد خطا messaging.adaptors.http.flow.SslHandshakeFailed را به عنوان پاسخی برای تماس های API دریافت می کند.

پیغام خطا

برنامه مشتری کد پاسخ زیر را دریافت می کند:

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 دریافت کنید که در طی فرآیند دست دادن SSL بین پردازشگر پیام 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 .

این خطا در طی فرآیند SSL handshake بین پردازشگر پیام Apigee Edge و سرور باطن رخ می دهد:

  • اگر فروشگاه اعتماد پردازشگر پیام Apigee Edge:
    • شامل یک زنجیره گواهی است که با زنجیره گواهی کامل سرور پشتیبان، OR مطابقت ندارد
    • شامل زنجیره گواهی کامل سرور باطن نیست
  • اگر زنجیره گواهی ارائه شده توسط سرور باطن:
    • حاوی نام دامنه کاملاً واجد شرایط (FQDN) است که با نام میزبان مشخص شده در نقطه پایانی هدف مطابقت ندارد
    • حاوی یک زنجیره گواهی نادرست یا ناقص است

دلایل احتمالی این موضوع به شرح زیر است:

علت توضیحات دستورالعمل های عیب یابی قابل اجرا برای
گواهی یا زنجیره گواهی نادرست/ناقص در انبار اعتماد پردازشگر پیام گواهی و/یا زنجیره آن که در ذخیره‌سازی اعتماد پردازشگر پیام Apigee Edge ذخیره می‌شود، با زنجیره گواهی سرور باطن مطابقت ندارد یا شامل زنجیره گواهی کامل سرور بک‌اند نیست. کاربران Edge Private و Public Cloud
عدم تطابق FQDN در گواهی سرور باطن و نام میزبان در نقطه پایانی هدف گواهی ارائه شده توسط سرور باطن حاوی یک FQDN است که با نام میزبان مشخص شده در نقطه پایانی هدف مطابقت ندارد. کاربران Edge Private و Public Cloud
گواهینامه یا زنجیره گواهی نادرست/ناقص ارائه شده توسط سرور باطن زنجیره گواهی ارائه شده توسط سرور باطن یا نادرست یا ناقص است. کاربران Edge Private و Public Cloud

مراحل تشخیص رایج

برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:

مانیتورینگ API

روش شماره 1: استفاده از مانیتورینگ API

برای تشخیص خطا با استفاده از API Monitoring:

  1. به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
  2. به سازمانی که می‌خواهید در آن موضوع را بررسی کنید بروید.

  3. به صفحه Analyze > API Monitoring > Investigate بروید.
  4. بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
  5. کد خطا را در برابر زمان ترسیم کنید.

  6. سلولی را انتخاب کنید که دارای کد خطای messaging.adaptors.http.flow.SslHandshakeFailed است مانند شکل زیر:

    ( مشاهده تصویر بزرگتر )

  7. اطلاعات مربوط به کد خطا messaging.adaptors.http.flow.SslHandshakeFailed مطابق شکل زیر نمایش داده می شود:

    ( مشاهده تصویر بزرگتر )

  8. روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید.

    ( مشاهده تصویر بزرگتر )

  9. از پنجره Logs به جزئیات زیر توجه کنید:
    • شناسه پیام درخواستی
    • کد وضعیت: 503
    • منبع خطا: target
    • کد خطا: messaging.adaptors.http.flow.SslHandshakeFailed

ردیابی

روش شماره 2: با استفاده از ابزار Trace

برای تشخیص خطا با استفاده از ابزار Trace:

  1. جلسه ردیابی و یکی را فعال کنید
    • صبر کنید تا خطای 503 Service Unavailable با کد خطا messaging.adaptors.http.flow.SslHandshakeFailed رخ دهد، یا
    • اگر می‌توانید مشکل را بازتولید کنید، با API تماس بگیرید تا مشکل 503 Service Unavailable
  2. اطمینان حاصل کنید که نمایش همه 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
    • 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 نشان می دهد که SSL Handshake شکست خورد، همانطور که Apigee Edge پردازشگر پیام نتوانست گواهی سرور پشتیبان را تأیید کند.
  7. در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
  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. سرصفحه های خطا ارزش
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

روش شماره 3: استفاده از گزارش های دسترسی NGINX

برای تشخیص خطا با استفاده از گزارش های دسترسی NGINX:

  1. اگر کاربر Private Cloud هستید، می‌توانید از گزارش‌های دسترسی NGINX برای تعیین اطلاعات کلیدی در مورد HTTP 503 Service Unavailable استفاده کنید.
  2. گزارش های دسترسی NGINX را بررسی کنید:

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

  3. جستجو کنید تا ببینید آیا خطاهای 503 با کد خطا messaging.adaptors.http.flow.SslHandshakeFailed در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته اتفاق افتاده باشد) یا اینکه آیا درخواست هایی وجود دارد که هنوز با 503 ناموفق هستند.
  4. اگر هر گونه خطای 503 با کد X-Apigee-fault-code مطابق با مقدار messaging.adaptors.http.flow.SslHandshakeFailed پیدا کردید، سپس مقدار X-Apigee-fault-source را تعیین کنید.

    نمونه خطای 503 از گزارش دسترسی NGINX:

    ( مشاهده تصویر بزرگتر )

    ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:

    سرصفحه ها ارزش
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

گزارش‌های پردازشگر پیام

روش شماره 4: استفاده از گزارش های پردازشگر پیام

  1. شناسه پیام یکی از درخواست‌های ناموفق را با استفاده از API Monitoring، Trace tool یا NGINX Access Logs همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
  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 Handshake ناموفق است زیرا پردازشگر پیام Apigee Edge قادر به تأیید اعتبار گواهی سرور باطن نیست.

علت: گواهینامه یا زنجیره گواهی نادرست/ناقص در انبار اعتماد پردازشگر پیام

تشخیص

  1. کد خطا ، منبع خطا را برای خطای مشاهده شده با استفاده از مانیتورینگ API، ابزار ردیابی یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
  2. اگر کد خطا messaging.adaptors.http.flow.SslHandshakeFailed است، پیام خطا را با استفاده از یکی از روش های زیر تعیین کنید:
    • error.cause را با استفاده از ابزار Trace همانطور که در مراحل تشخیص رایج توضیح داده شده است، پیدا کنید
    • همانطور که در مراحل تشخیص رایج توضیح داده شده است، استثنا را با استفاده از گزارش های پردازشگر پیام پیدا کنید
    • همانطور که در پیام خطا مشاهده می شود، faultstring از پاسخ خطا به تماس API خود پیدا کنید
  3. اگر پیام خطا sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target" ، سپس نشان می دهد که SSL Handshake ناموفق است، به عنوان Apigee پردازشگر پیام Edge نتوانست گواهی سرور باطن را تأیید کند.

شما می توانید این مشکل را در دو مرحله رفع اشکال کنید:

  1. فاز 1: زنجیره گواهی سرور باطن را تعیین کنید
  2. فاز 2: زنجیره گواهی ذخیره شده در انبار اعتماد پردازنده پیام را مقایسه کنید

فاز 1

فاز 1: زنجیره گواهی سرور باطن را تعیین کنید

از یکی از روش های زیر برای تعیین زنجیره گواهی سرور backend استفاده کنید:

openssl

دستور openssl در برابر نام میزبان سرور باطن به صورت زیر اجرا کنید:

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

به زنجیره Certificate از خروجی دستور بالا توجه کنید:

نمونه زنجیره گواهی سرور باطن از خروجی فرمان 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. اگر کاربر Public Cloud هستید، بسته‌های TCP/IP را در سرور باطن ضبط کنید.
  2. اگر کاربر Private Cloud هستید، می‌توانید بسته‌های TCP/IP را در سرور پشتیبان یا پردازشگر پیام ضبط کنید. ترجیحاً آنها را در سرور باطن ضبط کنید زیرا بسته ها در سرور باطن رمزگشایی می شوند.
  3. برای گرفتن بسته های TCP/IP از دستور tcpdump زیر استفاده کنید:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. بسته های TCP/IP را با استفاده از ابزار Wireshark یا ابزار مشابهی که با آن آشنایی دارید، تجزیه و تحلیل کنید.

    تجزیه و تحلیل نمونه Tcpdump

    ( مشاهده تصویر بزرگتر )

    • بسته شماره 43: پردازشگر پیام (منبع) یک پیام Client Hello به سرور باطن (Destination) ارسال کرد.
    • بسته شماره 44: سرور پشتیبان دریافت پیام Client Hello را از پردازشگر پیام تأیید می کند.
    • بسته شماره 45: سرور باطن پیام Server Hello را به همراه گواهینامه خود ارسال می کند.
    • بسته شماره 46: پردازشگر پیام دریافت پیام Server Hello و گواهی را تأیید می کند.
    • بسته شماره 47: پردازشگر پیام یک پیام FIN, ACK و سپس RST, ACK در بسته شماره 48 ارسال می کند.

      این نشان می دهد که اعتبار سنجی گواهی سرور باطن توسط پردازشگر پیام ناموفق است. دلیل آن این است که پردازشگر پیام هیچ گواهی مطابق با گواهی سرور باطن ندارد یا نمی تواند به گواهی سرور باطن با گواهی های موجود در فروشگاه اعتماد (پردازنده پیام) خود اعتماد کند.

    • می توانید به عقب برگردید و بسته شماره 45 را بررسی کنید و زنجیره گواهی ارسال شده توسط سرور باطن را تعیین کنید

      ( مشاهده تصویر بزرگتر )

    • در این مثال، می‌توانید ببینید که سرور یک گواهی برگ با common name (CN) = mocktarget.apigee.net ، به دنبال آن یک گواهی میانی با CN= GTS CA 1D4 و گواهی ریشه با CN = GTX Root R1 ارسال کرده است.

    اگر مطمئن شده‌اید که تأیید اعتبار سرور ناموفق است، سپس به فاز 2 بروید: گواهی سرور پشتیبان و گواهی‌های ذخیره‌شده در انبار اطمینان پردازشگر پیام را مقایسه کنید .

فاز 2

مرحله 2: مقایسه گواهی سرور باطن و گواهی های ذخیره شده در انبار اطمینان پردازشگر پیام

  1. زنجیره گواهی سرور backend را تعیین کنید .
  2. با استفاده از مراحل زیر گواهی ذخیره شده در انبار اعتماد پردازنده پیام را تعیین کنید:
    1. نام مرجع Truststore را از عنصر TrustStore در بخش SSLInfo در TargetEndpoint دریافت کنید.

      بیایید به یک بخش SSLInfo نمونه در یک پیکربندی TargetEndpoint نگاه کنیم:

      <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 برای مرجع خاص Truststore توجه کنید. این نام فروشگاه اعتماد شما خواهد بود.

      ( مشاهده تصویر بزرگتر )

    4. در مثال بالا، نام Truststore این است:

      myCompanyTrussttoreRef : myCompanyTruststore

  3. گواهی های ذخیره شده در Truststore (که در مرحله قبل تعیین شد) را با استفاده از API های زیر دریافت کنید:

    1. همه گواهی‌های یک فروشگاه کلید یا فروشگاه اعتماد را دریافت کنید . این API تمام گواهی‌های موجود در فروشگاه اعتماد خاص را فهرست می‌کند.

      کاربر عمومی ابر:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      کاربر خصوصی 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 شما تنظیم شده است همانطور که در Obtain an Access OAuth 2.0 توضیح داده شده است.
      • گزینه های curl مورد استفاده در این مثال در Use curl توضیح داده شده است

      خروجی نمونه:

      گواهی‌های نمونه Truststore myCompanyTruststore عبارتند از:

      [
        "serverCert"
      ]
    2. جزئیات گواهی را برای گواهی خاص از فروشگاه Keystore یا Truststore دریافت کنید . این 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"
      

      کاربر خصوصی 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 شما تنظیم شده است همانطور که در Obtain an Access OAuth 2.0 توضیح داده شده است.
      • گزینه های curl مورد استفاده در این مثال در Use 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",
  4. بررسی کنید که گواهی سرور واقعی به دست آمده در مرحله 1 و گواهی ذخیره شده در truststore به دست آمده در مرحله 3 مطابقت دارند. اگر آنها مطابقت ندارند، پس دلیل این موضوع است.

    از مثالی که در بالا نشان داده شده است، اجازه دهید به یک گواهی در یک زمان نگاه کنیم:

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

      گواهی برگ ذخیره شده در Truststore با سرور Backend مطابقت دارد.

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

      گواهی میانی ذخیره شده در Truststore با سرور Backend مطابقت دارد.

    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. از آنجایی که گواهی ریشه در Truststore وجود ندارد، پردازشگر پیام استثنا زیر را ایجاد می کند:

      sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

      و 503 Service Unavailable را با کد خطا messaging.adaptors.http.flow.SslHandshakeFailed به برنامه های سرویس گیرنده برمی گرداند.

قطعنامه

  1. اطمینان حاصل کنید که زنجیره گواهینامه مناسب و کامل سرور باطن را دارید.
  2. اگر کاربر عمومی Cloud هستید، دستورالعمل‌های موجود در به‌روزرسانی گواهی TLS برای Cloud را دنبال کنید تا گواهی را به فروشگاه اعتماد پردازشگر پیام Apigee Edge به‌روزرسانی کنید.
  3. اگر کاربر Private Cloud هستید، دستورالعمل‌های موجود در به‌روزرسانی گواهی TLS برای Private Cloud را دنبال کنید تا گواهی را به فروشگاه اعتماد پردازشگر پیام Apigee Edge به‌روزرسانی کنید.

علت: عدم تطابق 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. نقطه پایانی هدف خاص را در پراکسی API که در آن این خطا را مشاهده می کنید بررسی کنید و نام میزبان سرور باطن را یادداشت کنید:

    نمونه 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 backend.company.com است.

  2. FQDN را در گواهی سرور Backend با استفاده از دستور openssl مطابق شکل زیر تعیین کنید:

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    به عنوان مثال:

    openssl s_client -connect backend.company.com:443
    

    بخش Certificate chain بررسی کنید و به FQDN مشخص شده به عنوان بخشی از CN در موضوع گواهی برگ توجه کنید.

    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 backend.apigee.net است.

  3. اگر نام میزبان سرور باطن به‌دست‌آمده از مرحله 1 و FQDN به‌دست‌آمده در مرحله 2 مطابقت نداشته باشند، این دلیل خطا است.
  4. در مثالی که در بالا توضیح داده شد، نام میزبان در نقطه پایانی هدف، backend.company. com با این حال، نام FQDN در گواهی سرور backend backend.apigee. net . از آنجایی که آنها مطابقت ندارند، این خطا را دریافت می کنید.

قطعنامه

با استفاده از یکی از روش های زیر می توانید این مشکل را برطرف کنید:

FQDN صحیح

فروشگاه کلید سرور باطن را با FQDN صحیح، زنجیره گواهی معتبر و کامل به روز کنید:

  1. اگر گواهی سرور پشتیبان با FQDN صحیح ندارید، گواهی مناسب را از یک CA (مرجع صدور گواهی) مناسب تهیه کنید.
  2. تأیید کنید که یک زنجیره گواهی سرور باطن معتبر و کامل دارید .

  3. هنگامی که زنجیره گواهی معتبر و کامل با FQDN صحیح سرور باطن را در برگه یا گواهی موجودیت که با نام میزبان مشخص شده در نقطه پایانی هدف یکسان است، دارید ، فروشگاه کلید backend را با زنجیره گواهی کامل به روز کنید.

سرور باطن صحیح

نقطه پایانی هدف را با نام میزبان سرور باطن صحیح به روز کنید:

  1. اگر نام میزبان به اشتباه در نقطه پایانی هدف مشخص شده است، سپس نقطه پایانی هدف را به‌روزرسانی کنید تا نام میزبان صحیحی داشته باشد که با FQDN در گواهی سرور باطن مطابقت داشته باشد.
  2. تغییرات را در پروکسی API ذخیره کنید.

    در مثالی که در بالا توضیح داده شد، اگر نام میزبان سرور باطن به اشتباه مشخص شده باشد، می‌توانید با استفاده از 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. بررسی کنید که زنجیره گواهی مناسب و کامل را همانطور که در زنجیره گواهی اعتبار سنجی توضیح داده شده است.
  3. اگر زنجیره گواهی معتبر و کاملی برای سرور باطن ندارید، دلیل این مشکل همین است.

    در زنجیره گواهی سرور باطن نمونه نشان داده شده در بالا، گواهی ریشه وجود ندارد. بنابراین، شما این خطا را دریافت می کنید.

قطعنامه

فروشگاه کلید سرور باطن را با زنجیره گواهی معتبر و کامل به روز کنید:

  1. تأیید کنید که یک زنجیره گواهی سرور باطن معتبر و کامل دارید .

  2. زنجیره گواهی معتبر و کامل را در فروشگاه کلید سرور پشتیبان به‌روزرسانی کنید.

اگر مشکل همچنان ادامه داشت، به اطلاعات تشخیصی باید جمع‌آوری شود بروید.

باید اطلاعات تشخیصی را جمع آوری کرد

اگر حتی پس از پیروی از دستورالعمل‌های بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمع‌آوری کنید و با پشتیبانی Apigee Edge تماس بگیرید:

  • اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
    • نام سازمان
    • نام محیط زیست
    • نام پروکسی API
    • برای بازتولید خطا، دستور curl کامل کنید
    • فایل ردیابی خطا را نشان می دهد
    • خروجی دستور openssl :

      openssl s_client -connect BACKEND_SERVER_HOST_NAME : PORT_#

    • بسته های TCP/IP که در سرور باطن ضبط شده اند
  • اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:

مراجع