503 Hizmeti Kullanılamıyor - SSL El Sıkışma Hatası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

İstemci uygulaması, API çağrılarına yanıt olarak 503 Service Unavailable HTTP durum kodunu ve messaging.adaptors.http.flow.SslHandshakeFailed hata kodunu alır.

Hata mesajı

İstemci uygulaması aşağıdaki yanıt kodunu alır:

HTTP/1.1 503 Service Unavailable

Ayrıca aşağıdaki hata mesajını da görebilirsiniz:

{
   "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"
      }
   }
}

Olası nedenler

Apigee Edge'in Mesaj İşleyici'si ile arka uç sunucusu arasındaki SSL el sıkışma sürecinde yaşanan bir hata nedeniyle çeşitli nedenlerden dolayı 503 Service Unavailable durum koduyla birlikte messaging.adaptors.http.flow.SslHandshakeFailed hata kodunu alabilirsiniz. Hata mesajı, faultstring genellikle bu hataya yol açan olası bir üst düzey nedeni gösterir.

faultstring içinde gözlemlenen hata mesajına bağlı olarak, sorunu gidermek için uygun teknikleri kullanmanız gerekir. Bu oyun kitabı, faultstring bölümünde 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 hata mesajını görürseniz bu hatayı nasıl gidereceğinizi açıklar.

Bu hata, Apigee Edge'in mesaj işlemcisi ile arka uç sunucusu arasındaki SSL anlaşması sırasında oluşur:

  • Apigee Edge'in Mesaj İşleyicisinin truststore'u:
    • Arka uç sunucusunun tam sertifika zinciriyle eşleşmeyen bir sertifika zinciri içeriyorsa VEYA
    • Arka uç sunucusunun tam sertifika zincirini içermiyor
  • Arka uç sunucusu tarafından sunulan sertifika zinciri:
    • Hedef uç noktada belirtilen ana makine adıyla eşleşmeyen Tam Nitelikli Alan Adı (FQDN) içeriyor.
    • Yanlış veya eksik sertifika zinciri içeriyor

Bu sorunun olası nedenleri şunlardır:

Neden Açıklama Aşağıdaki ürünler için geçerli sorun giderme talimatları
İleti işlemcisinin güvenli deposunda yanlış/eksik sertifika veya sertifika zinciri Apigee Edge'in Mesaj İşleyici'sinin güvenli sertifika deposunda saklanan sertifika ve/veya zinciri, arka uç sunucusunun sertifika zinciriyle eşleşmiyor veya arka uç sunucusunun tam sertifika zincirini içermiyor. Edge Private ve Public Cloud kullanıcıları
Arka uç sunucusunun sertifikasındaki FQDN ile hedef uç noktadaki ana makine adının eşleşmemesi Arka uç sunucusu tarafından sunulan sertifika, hedef uç noktada belirtilen ana makine adıyla eşleşmeyen bir FQDN içeriyor. Edge Private ve Public Cloud kullanıcıları
Arka uç sunucusu tarafından sunulan sertifika veya sertifika zinciri yanlış/eksik Arka uç sunucusu tarafından sunulan sertifika zinciri yanlış veya eksik. Edge Private ve Public Cloud kullanıcıları

Sık karşılaşılan teşhis adımları

Bu hatayı teşhis etmek için aşağıdaki araçlardan/tekniklerden birini kullanın:

API Monitoring

1. Prosedür: API İzleme'yi kullanma

API İzleme'yi kullanarak hatayı teşhis etmek için:

  1. Apigee Edge kullanıcı arayüzünde oturum açın. Uygun bir role sahip bir kullanıcı olarak oturum açmanız gerekir.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

  3. Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
  4. Hataları gözlemlediğiniz belirli zaman aralığını seçin.
  5. Hata Kodunu Zaman ile karşılaştırın.

  6. Aşağıda gösterildiği gibi, hata kodunu messaging.adaptors.http.flow.SslHandshakeFailed içeren bir hücre seçin:

    ( daha büyük resmi görüntüle)

  7. Hata kodu messaging.adaptors.http.flow.SslHandshakeFailed ile ilgili bilgiler aşağıda gösterildiği gibi görüntülenir:

    ( daha büyük resmi görüntüle)

  8. Günlükleri görüntüle 'yi tıklayın ve başarısız isteğin satırını genişletin.

    ( daha büyük resmi görüntüle)

  9. Günlükler penceresinde aşağıdaki ayrıntıları not edin:
    • İstek İleti Kimliği
    • Durum Kodu: 503
    • Hata Kaynağı: target
    • Hata Kodu: messaging.adaptors.http.flow.SslHandshakeFailed

Trace

2. Prosedür: Trace aracını kullanma

İzleme aracını kullanarak hatayı teşhis etmek için:

  1. İzleme oturumunu etkinleştirin ve şunlardan birini yapın:
    • 503 Service Unavailable hata kodlu messaging.adaptors.http.flow.SslHandshakeFailed hatasının oluşmasını bekleyin veya
    • Sorunu yeniden oluşturabiliyorsanız sorunu yeniden oluşturmak için API çağrısı yapın. 503 Service Unavailable
  2. Tüm FlowInfo'ları göster'in etkinleştirildiğinden emin olun:

  3. Başarısız olan isteklerden birini seçip izlemeyi inceleyin.
  4. İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
  5. Hatayı genellikle aşağıdaki örnekte gösterildiği gibi Target Request Flow Started aşamasından sonra görürsünüz:

    ( daha büyük resmi görüntüle)

  6. İzleme işleminden aşağıdaki değerleri not edin:
    • hata: 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 hata değeri, Apigee Edge'in mesaj işlemcisi arka uç sunucusunun sertifikasını doğrulayamadığı için SSL el sıkışmasının başarısız olduğunu gösterir.
  7. İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve bu aşamayı tıklayın.
  8. Aşama Ayrıntıları Hata Başlıkları bölümüne gidin ve aşağıdaki gibi X-Apigee-fault-code, X-Apigee-fault-source ve X-Apigee-Message-ID değerlerini belirleyin:

    ( daha büyük resmi görüntüle)

  9. X-Apigee-fault-code, X-Apigee-fault-source ve X-Apigee-Message-ID değerlerini not edin:
  10. Hata üstbilgileri Değer
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

3. Prosedür: NGINX erişim günlüklerini kullanma

NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:

  1. Özel bulut kullanıcısıysanız HTTP 503 Service Unavailable ile ilgili temel bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz.
  2. NGINX erişim günlüklerini kontrol edin:

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

  3. Belirli bir süre boyunca 503 hata koduyla messaging.adaptors.http.flow.SslHandshakeFailed hata olup olmadığını (sorun geçmişte yaşandıysa) veya 503 ile hâlâ başarısız olan istekler olup olmadığını arayın.
  4. X-Apigee-fault-code değerinin messaging.adaptors.http.flow.SslHandshakeFailed değeriyle eşleştiği 503 hataları bulursanız X-Apigee-fault-source değerini belirleyin.

    NGINX erişim günlüğünden örnek 503 hatası:

    ( daha büyük resmi görüntüle)

    NGINX erişim günlüğündeki yukarıdaki örnek girişte, X-Apigee-fault-code ve X-Apigee-fault-source için aşağıdaki değerler yer almaktadır:

    Üst bilgiler Değer
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

Mesaj işleyici günlükleri

4. İşlem: Mesaj İşleyici günlüklerini kullanma

  1. Genel teşhis adımları bölümünde açıklandığı gibi API İzleme, Trace aracı veya NGINX Erişim Günlükleri'ni kullanarak başarısız olan isteklerden birinin ileti kimliğini belirleyin.
  2. Mesaj İşleyici günlüğünde (/opt/apigee/var/log/edge-message-processor/logs/system.log) belirli istek ileti kimliğini arayın. Aşağıdaki hatayı görebilirsiniz:

    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
    

    Yukarıdaki hata, ileti işlemcisi ile arka uç sunucusu arasında SSL el sıkışma işleminin başarısız olduğunu gösterir.

    Bunu, aşağıda gösterildiği gibi ayrıntılı yığın izleme (stack trace) içeren bir istisna izler:

    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>
      

    El sıkışma hatasının nedenleri:

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

    Bu, Apigee Edge’in Mesaj İşleyici arka uç sunucusunun sertifikasını doğrulayamadığı için SSL el sıkışmasının başarısız olduğunu gösterir.

Neden: Mesaj işlemcisinin güvenli deposunda yanlış/eksik sertifika veya sertifika zinciri

Teşhis

  1. Sık karşılaşılan teşhis adımları bölümünde açıklandığı gibi API İzleme, İzleme Aracı veya NGINX erişim günlükleri kullanılarak gözlemlenen hatanın Hata Kodunu ve Hata Kaynağını belirleyin.
  2. Hata Kodu messaging.adaptors.http.flow.SslHandshakeFailed ise aşağıdaki yöntemlerden birini kullanarak hata mesajını belirleyin:
  3. Hata mesajı sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target" ise Apigee Edge'in mesaj işlemcisi arka uç sunucusunun sertifikasını doğrulayamadığı için SSL el sıkışmasının başarısız olduğunu gösterir.

Bu sorunu iki aşamada ayıklayabilirsiniz:

  1. 1. aşama: Arka uç sunucusunun sertifika zincirini belirleyin
  2. 2. aşama: İleti işlemcisinin güvenli deposunda saklanan sertifika zincirini karşılaştırın

1. Aşama

1. aşama: Arka uç sunucusunun sertifika zincirini belirleyin

Arka uç sunucusunun sertifika zincirini belirlemek için aşağıdaki yöntemlerden birini kullanın:

openssl

Arka uç sunucusunun ana makine adına karşı openssl komutunu aşağıdaki gibi yürütün:

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

Yukarıdaki komutun çıktısından sertifika zincirini not edin:

openssl komut çıkışından örnek arka uç sunucusu sertifika zinciri:

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. Herkese açık bulut kullanıcısıysanız TCP/IP paketlerini arka uç sunucusunda yakalayın.
  2. Özel bulut kullanıcısıysanız TCP/IP paketlerini arka uç sunucusunda veya Mesaj İşleyicisinde yakalayabilirsiniz. Paketlerin arka uç sunucusunda şifresi çözüldüğünden, tercihen arka uç sunucusunda yakalayın.
  3. TCP/IP paketlerini yakalamak için aşağıdaki tcpdump komutunu kullanın:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. TCP/IP paketlerini Wireshark aracı veya benzeri bir araçla analiz edin.

    Tcpdump'ın örnek analizi

    ( daha büyük resmi görüntüle)

    • Paket #43: Mesaj İşleyici (Kaynak), arka uç sunucusuna (Hedef) bir Client Hello mesajı gönderdi.
    • Paket #44: Arka uç sunucusu, Mesaj İşleyici'den gelen Client Hello mesajının alındığını onaylar.
    • Paket #45: Arka uç sunucusu, sertifikasıyla birlikte Server Hello mesajını gönderir.
    • Paket #46: Mesaj İşleyici, Server Hello iletisinin ve sertifikanın alındığını onaylar.
    • Paket #47: Mesaj İşleyici, FIN, ACK mesajını gönderir. Ardından Paket #48'de RST, ACK mesajı gönderilir.

      Bu, Mesaj İşleyici tarafından arka uç sunucu sertifikası doğrulamasının başarısız olduğunu gösterir. Bunun nedeni, Mesaj İşleyici'de arka uç sunucunun sertifikasıyla eşleşen bir sertifika olmaması veya Mesaj İşleyici'nin güven deposunda bulunan sertifikalarla arka uç sunucunun sertifikasına güvenilememesidir.

    • Geri dönüp Paket #45'i inceleyebilir ve arka uç sunucusu tarafından gönderilen sertifika zincirini belirleyebilirsiniz.

      ( daha büyük resmi görüntüle)

    • Bu örnekte, sunucunun common name (CN) = mocktarget.apigee.net ile bir yaprak sertifikası, ardından CN= GTS CA 1D4 ile bir ara sertifika ve CN = GTX Root R1 ile bir kök sertifika gönderdiği görülmektedir.

    Sunucunun sertifika doğrulamasının başarısız olduğunu belirlediyseniz 2. Aşama: Arka uç sunucusunun sertifikası ile Mesaj İşleyici'nin güvenilir sertifika deposunda saklanan sertifikaları karşılaştırın bölümüne gidin.

2. Aşama

2. aşama: Arka uç sunucusunun sertifikası ile Message Processor'ın güvenilir sertifika deposunda saklanan sertifikaları karşılaştırın

  1. Arka uç sunucusunun sertifika zincirini belirleyin.
  2. Aşağıdaki adımları kullanarak ileti işlemcisinin güvenli deposunda depolanan sertifikayı belirleyin:
    1. TrustStore öğesinden güven deposu referans adını alın. TargetEndpoint bölümündeki SSLInfo.

      SSLInfo yapılandırmasındaki bir TargetEndpoint bölümüne bakalım:

      <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. Yukarıdaki örnekte, TrustStore referans adı myCompanyTruststoreRef'dir.
    3. Edge kullanıcı arayüzünde Ortamlar > Referanslar'ı seçin. Belirli güven deposu referansı için Referans sütunundaki adı not edin. Bu, güvenli depo adınız olacaktır.

      ( daha büyük resmi görüntüle)

    4. Yukarıdaki örnekte güvenli depo adı şöyledir:

      myCompanyTruststoreRef: myCompanyTruststore

  3. Aşağıdaki API'leri kullanarak güvenli depoda (önceki adımda belirlenmiştir) depolanan sertifikaları alın:

    1. Bir anahtar deposu veya güven deposu için tüm sertifikaları alın. Bu API, belirli bir güven deposundaki tüm sertifikaları listeler.

      Herkese açık bulut kullanıcısı:

      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 kullanıcısı:

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Nerede:

      • ORGANIZATION_NAME, kuruluşun adıdır.
      • ENVIRONMENT_NAME, ortamın adıdır.
      • KEYSTORE_NAME, anahtar deposunun adıdır.
      • $TOKEN, OAuth 2.0 erişim jetonu alma bölümünde açıklandığı gibi OAuth 2.0 erişim jetonunuza ayarlanır.
      • Bu örnekte kullanılan curl seçenekleri, curl kullanma başlıklı makalede açıklanmıştır.

      Örnek çıkış:

      Örnek güvenilir sertifika deposundaki myCompanyTruststore sertifikalar şunlardır:

      [
        "serverCert"
      ]
    2. Bir anahtar deposu veya güven deposundan belirli bir sertifikanın sertifika ayrıntılarını alın. Bu API, belirli bir güven deposundaki belirli bir sertifika hakkındaki bilgileri döndürür.

      Herkese açık bulut kullanıcısı:

      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 kullanıcısı

      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"
      

      Nerede:

      • ORGANIZATION_NAME, kuruluşun adıdır.
      • ENVIRONMENT_NAME, ortamın adıdır.
      • KEYSTORE_NAME, anahtar deposunun adıdır.
      • CERT_NAME, sertifikanın adıdır.
      • $TOKEN, OAuth 2.0 erişim jetonu alma bölümünde açıklandığı gibi OAuth 2.0 erişim jetonunuza ayarlanır.
      • Bu örnekte kullanılan curl seçenekleri, curl kullanma başlıklı makalede açıklanmıştır.

      Örnek Çıkış

      serverCert ayrıntılarında konu ve veren kuruluş aşağıdaki gibi gösterilir:

      Leaf/Entity Certificate:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",

      Ara Sertifika:

      "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. adımda alınan gerçek sunucu sertifikası ile 3. adımda alınan güvenli depoda saklanan sertifikanın eşleştiğini doğrulayın. Eşleşmiyorlarsa sorunun nedeni budur.

    Yukarıdaki örnekte gösterilen sertifikalara tek tek bakalım:

    1. Varlık sertifikası:

      Arka uç sunucusundan:

      s:/CN=mocktarget.apigee.net
      i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4

      İleti İşlemcisi'nin (istemci) güvenli deposundan:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",

      Güvenilirlik deposunda saklanan yaprak sertifikası, arka uç sunucusunun sertifikasıyla eşleşir.

    2. Ara sertifika:

      Arka uç sunucusundan:

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

      İleti İşlemcisi'nin (istemci) güvenli deposundan:

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",

      Güven deposunda saklanan ara sertifika, arka uç sunucusunun sertifikasıyla eşleşiyor.

    3. Kök sertifika:

      Arka uç sunucusundan:

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

      Kök sertifika, Message Processor'ın güvenilir sertifika deposunda tamamen eksik.

    4. Kök sertifika güvenli depoda eksik olduğundan, Mesaj İşleyici aşağıdaki istisnayı oluşturur:

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

      ve istemci uygulamalarına messaging.adaptors.http.flow.SslHandshakeFailed hata koduyla 503 Service Unavailable döndürür.

Çözünürlük

  1. Arka uç sunucusunun uygun ve eksiksiz sertifika zincirine sahip olduğunuzdan emin olun.
  2. Herkese açık bulut kullanıcısıysanız sertifikayı Apigee Edge'in Mesaj İşleyici güvenilir sertifika deposuna güncellemek için Bulut için TLS sertifikasını güncelleme başlıklı makaledeki talimatları uygulayın.
  3. Private Cloud kullanıcısıysanız sertifikayı Apigee Edge'in Mesaj İşleyici güvenli anahtar deposuna güncellemek için Private Cloud için TLS sertifikasını güncelleme başlıklı makaledeki talimatları uygulayın.

Nedeni: Arka uç sunucusunun sertifikasındaki FQDN ile hedef uç noktasındaki ana makine adının eşleşmemesi

Arka uç sunucusu, hedef uç noktada belirtilen ana makine adıyla eşleşmeyen FQDN içeren bir sertifika zinciri sunarsa Apigee Edge'in Message Process'i 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 hatasını döndürür.

Teşhis

  1. Bu hatayı gözlemlediğiniz API proxy'sindeki belirli hedef uç noktayı inceleyin ve arka uç sunucusunun ana makine adını not edin:

    Örnek TargetEndpoint:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.company.com/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>

    Yukarıdaki örnekte, arka uç sunucusunun ana makine adı backend.company.com'dır.

  2. Arka uç sunucusunun sertifikasındaki FQDN'yi aşağıdaki gibi openssl komutunu kullanarak belirleyin:

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    Örneğin:

    openssl s_client -connect backend.company.com:443
    

    Certificate chain bölümünü inceleyin ve yaprak sertifikasının konusundaki CN'nin bir parçası olarak belirtilen FQDN'yi not edin.

    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
    

    Yukarıdaki örnekte, arka uç sunucusunun FQDN'si backend.apigee.net'dır.

  3. 1. adımda elde edilen arka uç sunucusunun ana makine adı ile 2. adımda elde edilen FQDN eşleşmiyorsa hatanın nedeni budur.
  4. Yukarıda bahsedilen örnekte, hedef uç noktasındaki ana makine adı backend.company.com'dır. Ancak arka uç sunucusunun sertifikasındaki FQDN adı backend.apigee.net. Eşleşmedikleri için bu hatayı alırsınız.

Çözünürlük

Bu sorunu aşağıdaki yöntemlerden birini kullanarak düzeltebilirsiniz:

Doğru FQDN

Arka uç sunucusunun anahtar deposunu doğru FQDN, geçerli ve eksiksiz sertifika zinciriyle güncelleyin:

  1. Doğru FQDN'ye sahip bir arka uç sunucusu sertifikanız yoksa uygun bir CA'dan (sertifika yetkilisi) doğru sertifikayı edinin.
  2. Geçerli ve eksiksiz bir arka uç sunucusu sertifika zincirine sahip olduğunuzu doğrulayın.

  3. Yaprak veya tüzel kişi sertifikasında, hedef uç noktada belirtilen ana makine adıyla aynı olan arka uç sunucusunun doğru FQDN'siyle geçerli ve eksiksiz bir sertifika zincirine sahip olduğunuzda arka ucun anahtar deposunu eksiksiz sertifika zinciriyle güncelleyin.

Doğru arka uç sunucusu

Hedef uç noktayı doğru arka uç sunucusunun ana makine adıyla güncelleyin:

  1. Ana makine adı hedef uç noktada yanlış belirtilmişse hedef uç noktayı, arka uç sunucusunun sertifikasındaki FQDN ile eşleşen doğru ana makine adını içerecek şekilde güncelleyin.
  2. API proxy'sinde yapılan değişiklikleri kaydedin.

    Yukarıda bahsedilen örnekte, arka uç sunucusu ana makine adı yanlış belirtilmişse arka uç sunucusunun sertifikasındaki FQDN'yi kullanarak bu sorunu düzeltebilirsiniz. Bu durumda, backend.apigee.net şu şekilde olur:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.apigee.net/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>

Neden: Arka uç sunucusu tarafından sunulan sertifika veya sertifika zinciri yanlış/eksik

Teşhis

  1. Arka uç sunucusunun ana makine adına karşı aşağıdaki gibi openssl komutunu çalıştırarak arka uç sunucusunun sertifika zincirini alın:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    Yukarıdaki komutun çıktısındaki Certificate chain işaretine dikkat edin.

    openssl komut çıkışından örnek arka uç sunucusu sertifika zinciri:

    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. Sertifika zincirini doğrulama bölümünde açıklandığı gibi uygun ve eksiksiz bir sertifika zincirine sahip olduğunuzu doğrulayın.
  3. Arka uç sunucusu için geçerli ve eksiksiz bir sertifika zinciriniz yoksa bu sorunun nedeni budur.

    Yukarıda gösterilen örnek arka uç sunucusunun sertifika zincirinde kök sertifika eksik. Bu nedenle bu hatayı alırsınız.

Çözünürlük

Arka uç sunucusunun anahtar deposunu geçerli ve eksiksiz bir sertifika zinciriyle güncelleyin:

  1. Geçerli ve eksiksiz bir arka uç sunucusu sertifika zincirine sahip olduğunuzu doğrulayın.

  2. Arka uç sunucusunun anahtar deposundaki geçerli ve eksiksiz sertifika zincirini güncelleyin.

Sorun devam ederse Teşhis bilgileri toplanmalıdır bölümüne gidin.

Teşhis bilgilerini toplamalıdır

Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayın ve Apigee Edge Destek Ekibi ile iletişime geçin:

  • Herkese açık bulut kullanıcısıysanız aşağıdaki bilgileri sağlayın:
    • Kuruluş adı
    • Ortam adı
    • API proxy'si adı
    • Hatayı yeniden oluşturmak için curl komutunu tamamlayın.
    • Hatayı gösteren izleme dosyası
    • openssl komutunun çıkışı:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • Arka uç sunucusunda yakalanan TCP/IP paketleri
  • Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
    • Gözlemlenen hata mesajının tamamı
    • API proxy paketi
    • Hatayı gösteren izleme dosyası
    • Mesaj işleyici günlükleri /opt/apigee/var/log/edge-message-processor/logs/system.log
    • openssl komutunun çıkışı:
      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    • Arka uç sunucusunda veya Mesaj İşleyicisinde yakalanan TCP/IP paketleri.
    • Get all certificates for a keystore or truststore API'sinin çıkışı ve Get Cert Details from a Keystore or Truststore API'si kullanılarak elde edilen her sertifikanın ayrıntıları.

Referanslar