TLS/SSL El Sıkışma Hataları

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

Belirti

TLS/SSL el sıkışma hatası, istemci ile sunucu TLS/SSL protokolünü kullanarak iletişim kuramadığında ortaya çıkar. Apigee Edge'de bu hata ortaya çıktığında istemci uygulaması, Service Availability (Hizmet Kullanılamıyor) mesajıyla birlikte bir HTTP durumu 503 alır. Bu hatayı, TLS/SSL el sıkışma hatasının meydana geldiği tüm API çağrılarının ardından görürsünüz.

Hata mesajları

HTTP/1.1 503 Service Unavailable

Bu hata mesajını ayrıca bir TLS/SSL el sıkışma hatası oluştuğunda da görebilirsiniz:

Received fatal alert: handshake_failure

Olası nedenler

TLS (önceki adı SSL olan Taşıma Katmanı Güvenliği), web sunucusu ile tarayıcı veya uygulama gibi bir web istemcisi arasında şifrelenmiş bağlantı oluşturmak için standart güvenlik teknolojisidir. El sıkışma, TLS/SSL istemcisinin ve sunucunun iletişim kurabilecekleri bir dizi gizli anahtar oluşturmasını sağlayan bir süreçtir. Bu işlem sırasında istemci ve sunucu:

  1. Kullanılacak protokolün sürümü üzerinde anlaşmaya varın.
  2. Kullanılacak şifreleme algoritmasını seçin.
  3. Dijital sertifikaları değiştirerek ve doğrulayarak birbirinin kimliklerini doğrulama.

TLS/SSL el sıkışması başarılı olursa TLS/SSL istemcisi ve sunucu verileri birbirine güvenli bir şekilde aktarır. Aksi takdirde, TLS/SSL el sıkışma hatası oluşursa bağlantı sonlandırılır ve istemci 503 Service Unavailable hatası alır.

TLS/SSL el sıkışma hatalarının olası nedenleri şunlardır:

Neden Açıklama Sorun giderme adımlarını kimler uygulayabilir?
Protokol uyuşmazlığı İstemci tarafından kullanılan protokol, sunucu tarafından desteklenmiyor. Gizli ve Herkese Açık Bulut kullanıcıları
Şifre Paketi uyuşmazlığı İstemci tarafından kullanılan şifre paketi, sunucu tarafından desteklenmiyor. Gizli ve Herkese Açık Bulut kullanıcıları
Yanlış Sertifika İstemci tarafından kullanılan URL'deki ana makine adı, sunucu ucunda depolanan sertifikadaki ana makine adıyla eşleşmiyor. Gizli ve Herkese Açık Bulut kullanıcıları
İstemci veya sunucu tarafında eksik veya geçersiz bir sertifika zinciri depolanır. Gizli ve Herkese Açık Bulut kullanıcıları
İstemci tarafından sunucuya veya sunucudan istemciye yanlış veya süresi dolmuş bir sertifika gönderildi. Gizli ve Herkese Açık Bulut kullanıcıları
SNI Etkin Sunucu Arka uç sunucusunda, Sunucu Adı Göstergesi (SNI) etkinleştirilmiş ancak istemci, SNI sunucularıyla iletişim kuramıyor. Yalnızca Private Cloud kullanıcıları

Protokol uyuşmazlığı

İstemci tarafından kullanılan protokol, gelen (kuzey giden) veya giden (güne giden) bağlantıda sunucu tarafından desteklenmiyorsa TLS/SSL el sıkışma hatası oluşur. Kuzey ve güneye yönelik bağlantıları anlama konusuna da bakın.

Teşhis

  1. Hatanın kuzey giden bağlantıda mı yoksa güne giden bağlantıda mı oluştuğunu belirleyin. Bunu belirleme konusunda daha fazla bilgi için Sorunun kaynağını belirleme bölümüne bakın.
  2. Daha fazla bilgi toplamak için tcpdump yardımcı programını çalıştırın:
    • Private Cloud kullanıcısıysanız tcpdump verilerini ilgili istemcide veya sunucuda toplayabilirsiniz. İstemci, istemci uygulaması (gelen veya kuzeye giden bağlantılar için) ya da Mesaj İşleyici (giden veya güneye giden bağlantılar için) olabilir. Sunucu, 1. Adım'daki kararınıza bağlı olarak Uç Yönlendirici (gelen veya kuzeye giden bağlantılar için) ya da arka uç sunucusu (giden veya güneye giden bağlantılar için) olabilir.
    • Herkese Açık Bulut kullanıcısıysanız Edge Yönlendiricisi veya Mesaj İşleyici'ye erişiminiz olmadığından tcpdump verilerini yalnızca istemci uygulamasında (gelen veya kuzeye giden bağlantılar için) ya da arka uç sunucusunda (giden veya güneye giden bağlantılar için) toplayabilirsiniz.
    tcpdump -i any -s 0 host IP address -w File name
    
    tcpdump komutunu kullanma hakkında daha fazla bilgi edinmek için tcpdump verilerine göz atın.
  3. tcpdump verilerini Wireshark aracı veya benzer bir araç kullanarak analiz edin.
  4. Wireshark kullanılarak hazırlanan örnek bir tcpdump analizini aşağıda bulabilirsiniz:
    • Bu örnekte, Mesaj İşleyici ile arka uç sunucusu (giden veya güneye giden bağlantı) arasında TLS/SSL el sıkışma hatası oluşmuştur.
    • Aşağıdaki tcpdump çıkışında bulunan 4 numaralı mesaj, Mesaj İşleyicinin (Kaynak) arka uç sunucusuna (Hedef) bir "Client Hello" mesajı gönderdiğini gösterir.

    • Client Hello mesajını seçerseniz Mesaj İşleyicinin aşağıda gösterildiği gibi TLSv1.2 protokolünü kullandığını görürsünüz:

    • 5. mesaj, arka uç sunucusunun Mesaj İşleyici'den gelen "İstemci Merhaba" mesajını onayladığını gösterir.
    • Arka uç sunucusu hemen Mesaj İşleyiciye (6. mesaj) Önemli Uyarı : Kapat Bildirimi'ni gönderir. Bu, TLS/SSL El Sıkışması'nın başarısız olduğu ve bağlantının kapatılacağı anlamına gelir.
    • 6. mesaj ayrıntılı olarak incelendiğinde, TLS/SSL el sıkışma hatasının nedeninin, arka uç sunucusunun aşağıda gösterildiği gibi yalnızca TLSv1.0 protokolünü desteklemesi olduğu gösterilmektedir:

    • Mesaj İşleyici tarafından kullanılan protokol ile arka uç sunucusu tarafından kullanılan protokol arasında uyuşmazlık olması nedeniyle, arka uç sunucusu şu mesajı gönderdi: Önemli Uyarı Mesajı: Kapat.

Çözünürlük

Mesaj İşleyici, Java 8 üzerinde çalışır ve varsayılan olarak TLSv1.2 protokolünü kullanır. Arka uç sunucusu TLSv1.2 protokolünü desteklemiyorsa bu sorunu çözmek için aşağıdaki adımlardan birini uygulayabilirsiniz:

  1. Arka uç sunucunuzu TLSv1.2 protokolünü destekleyecek şekilde güncelleyin. TLSv1.2 protokolü daha güvenli olduğundan bu önerilen bir çözümdür.
  2. Arka uç sunucunuzu herhangi bir nedenle hemen yükseltemiyorsanız aşağıdaki adımları uygulayarak Mesaj İşleyici'yi, arka uç sunucusuyla iletişim kurmak için TLSv1.0 protokolünü kullanmaya zorlayabilirsiniz:
    1. Proxy'nin TargetEndpoint tanımında hedef sunucu belirtmediyseniz Protocol öğesini aşağıda gösterildiği gibi TLSv1.0 olarak ayarlayın:
      <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
         <SSLInfo>
             <Enabled>true</Enabled>
             <Protocols>
                 <Protocol>TLSv1.0</Protocol>
             </Protocols>
         </SSLInfo>
         <URL>https://myservice.com</URL>
       </HTTPTargetConnection>
       …
      </TargetEndpoint>
      
    2. Proxy'niz için bir hedef sunucu yapılandırdıysanız belirli hedef sunucu yapılandırmasında protokolü TLSv1.0 olarak ayarlamak için bu yönetim API'sini kullanın.

Şifre Uyuşmazlığı

İstemci tarafından kullanılan şifre paketi algoritması, Apigee Edge'de gelen (kuzey giden) veya giden (güneye giden) bağlantıda sunucu tarafından desteklenmiyorsa TLS/SSL el sıkışma hatası görebilirsiniz. Ayrıca bkz. Kuzey ve güneye yönelik bağlantıları anlama.

Teşhis

  1. Hatanın kuzey giden bağlantıda mı yoksa güne giden bağlantıda mı oluştuğunu belirleyin. Bunu belirleme konusunda daha fazla bilgi için Sorunun kaynağını belirleme bölümüne bakın.
  2. Daha fazla bilgi toplamak için tcpdump yardımcı programını çalıştırın:
    • Private Cloud kullanıcısıysanız tcpdump verilerini ilgili istemcide veya sunucuda toplayabilirsiniz. İstemci, istemci uygulaması (gelen veya kuzeye giden bağlantılar için) ya da Mesaj İşleyici (giden veya güneye giden bağlantılar için) olabilir. Sunucu, 1. Adım'daki kararınıza bağlı olarak Uç Yönlendirici (gelen veya kuzeye giden bağlantılar için) ya da arka uç sunucusu (giden veya güneye giden bağlantılar için) olabilir.
    • Herkese Açık Bulut kullanıcısıysanız Edge Yönlendiricisi veya Mesaj İşleyici'ye erişiminiz olmadığından tcpdump verilerini yalnızca istemci uygulamasında (gelen veya kuzeye giden bağlantılar için) ya da arka uç sunucusunda (giden veya güneye giden bağlantılar için) toplayabilirsiniz.
    tcpdump -i any -s 0 host IP address -w File name
    
    tcpdump komutunu kullanma hakkında daha fazla bilgi edinmek için tcpdump verilerine göz atın.
  3. Wireshark aracını veya bildiğiniz başka bir aracı kullanarak tcpdump verilerini analiz edin.
  4. Wireshark kullanılarak hazırlanan örnek tcpdump çıkışı analizi aşağıda verilmiştir:
    • Bu örnekte, TLS/SSL El Sıkışma hatası, istemci uygulaması ile Uç yönlendirici (kuzey giden bağlantı) arasında oluşmuştur. tcpdump çıkışı, Edge yönlendiricide toplandı.
    • Aşağıdaki tcpdump çıkışındaki 4 numaralı mesaj, istemci uygulamasının (kaynak) Uç Yönlendiriciye (hedef) "Client Hello" mesajı gönderdiğini gösterir.

    • Client Hello mesajının seçilmesi istemci uygulamasının TLSv1.2 protokolünü kullandığını gösterir.

    • Mesaj 5, Uç Yönlendiricinin istemci uygulamasından gelen "Client Hello" mesajını onayladığını gösterir.
    • Edge yönlendiricisi, istemci uygulamasına hemen Önemli Uyarı : El Sıkışma Hatası gönderir (6. mesaj). Bu, TLS/SSL el sıkışmasının başarısız olduğu ve bağlantının kapatılacağı anlamına gelir.
    • 6 numaralı ileti ayrıntılı olarak incelendiğinde aşağıdaki bilgiler gösterilmektedir:
      • Uç Yönlendirici, TLSv1.2 protokolünü destekler. Bu, protokolün istemci uygulaması ve Uç Yönlendirici arasında eşleştiği anlamına gelir.
      • Ancak, Edge yönlendiricisi aşağıdaki ekran görüntüsünde gösterildiği gibi istemci uygulamasına Önemli Uyarı: El Sıkışma Hatası'nı göndermeye devam eder:

    • Bu hata, aşağıdaki sorunlardan birinden kaynaklanabilir:
      • İstemci uygulaması, Uç Yönlendirici tarafından desteklenen şifre paketi algoritmalarını kullanmıyor.
      • Uç Yönlendirici'de SNI etkin ancak istemci uygulaması sunucu adını göndermiyor.
    • tcpdump çıkışındaki 4. mesaj, aşağıda gösterildiği gibi istemci uygulaması tarafından desteklenen şifre paketi algoritmalarını listeler:

    • Uç Yönlendirici tarafından desteklenen şifre paketi algoritmalarının listesi /opt/nginx/conf.d/0-default.conf dosyasında listelenmiştir. Bu örnekte, Uç Yönlendirici yalnızca Yüksek Şifreleme şifre paketi algoritmalarını destekler.
    • İstemci uygulaması, Yüksek Şifreleme şifre paketi algoritmalarının hiçbirini kullanmıyor. TLS/SSL el sıkışma hatasının nedeni bu uyumsuzluktur.
    • Uç Yönlendirici, SNI özellikli olduğundan tcpdump çıktısında sayfayı 4. mesaja kaydırın ve istemci uygulamasının sunucu adını aşağıdaki şekilde gösterildiği gibi doğru şekilde gönderdiğini onaylayın:


    • Bu ad geçerliyse istemci uygulaması tarafından kullanılan şifre paketi algoritmaları Edge Yönlendiricisi tarafından desteklenmediğinden TLS/SSL el sıkışma hatası oluşmuş demektir.

Çözünürlük

İstemcinin, sunucu tarafından desteklenen şifre paketi algoritmalarını kullandığından emin olmalısınız. Önceki Teşhis bölümünde açıklanan sorunu çözmek için Java Cryptography Extension (JCE) paketini indirip yükleyin ve Yüksek Şifreleme şifreleme paketi algoritmalarını desteklemek için Java kurulumuna ekleyin.

Yanlış Sertifika

Anahtar deposunda/güven deposunda, Apigee Edge'de gelen (kuzey giden) veya giden (güneye giden) bağlantıda yanlış sertifikalarınız varsa TLS/SSL el sıkışma hatası oluşur. Kuzey ve güneye yönelik bağlantıları anlama konusuna da bakın.

Sorun kuzeydışı ise altta yatan nedene bağlı olarak farklı hata mesajları görebilirsiniz.

Aşağıdaki bölümlerde, örnek hata mesajları ve bu sorunu teşhis edip çözme adımları listelenmiştir.

Hata mesajları

TLS/SSL el sıkışma hatasının nedenine bağlı olarak farklı hata mesajları görebilirsiniz. Aşağıda, bir API proxy'sini çağırdığınızda görebileceğiniz örnek bir hata mesajı verilmiştir:

* SSL certificate problem: Invalid certificate chain
* Closing connection 0
curl: (60) SSL certificate problem: Invalid certificate chain
More details here: http://curl.haxx.se/docs/sslcerts.html

Olası nedenler

Bu sorunun tipik nedenleri şunlardır:

Neden Açıklama Sorun giderme adımlarını kimler uygulayabilir?
Ana Makine Adı Uyuşmazlığı URL'de kullanılan ana makine adı, yönlendiricinin anahtar deposundaki sertifika eşleşmiyor. Örneğin, URL'de kullanılan ana makine adı myorg.domain.com ise sertifikanın CN'sinde CN=something.domain.com. olarak ana makine adı varsa bir uyuşmazlık ortaya çıkar.

Edge Özel ve Genel Bulut kullanıcıları
Eksik veya Yanlış sertifika zinciri Sertifika zinciri tamamlanmamış veya doğru değil. Yalnızca Edge Özel ve Genel Bulut kullanıcıları
Sunucu veya istemci tarafından gönderilen veya süresi dolmuş ya da bilinmeyen sertifika Kuzey sınırında veya güneye giden bağlantıda, sunucu ya da istemci tarafından süresi dolmuş veya bilinmeyen bir sertifika gönderiliyor. Edge Private Cloud ve Edge Genel Bulut kullanıcıları

Ana makine adı uyuşmazlığı

Teşhis

  1. Aşağıdaki Edge Management API çağrısı tarafından döndürülen URL'de kullanılan ana makine adını not edin:
    curl -v https://myorg.domain.com/v1/getinfo
    Örnek:
    curl -v https://api.enterprise.apigee.com/v1/getinfo
  2. Belirli anahtar deposunda depolanan sertifikada kullanılan CN'yi alın. Sertifikanın ayrıntılarını almak için aşağıdaki Edge yönetim API'lerini kullanabilirsiniz:
    1. Anahtar deposunda sertifika adını alın:

      Private Cloud kullanıcısıysanız Management API'yi aşağıdaki gibi kullanın:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      Herkese Açık Bulut kullanıcısıysanız Management API'yi aşağıdaki şekilde kullanın:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
    2. Edge Management API'yi kullanarak anahtar deposunda sertifikanın ayrıntılarını alın.

      Private Cloud kullanıcısıysanız:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
      Herkese Açık Bulut kullanıcısıysanız:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      

      Örnek sertifika:

      "certInfo": [
          {
            "basicConstraints": "CA:FALSE",
            "expiryDate": 1456258950000,
            "isValid": "No",
            "issuer": "SERIALNUMBER=07969287, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O=\"GoDaddy.com, Inc.\", L=Scottsdale, ST=Arizona, C=US",
            "publicKey": "RSA Public Key, 2048 bits",
            "serialNumber": "07:bc:a7:39:03:f1:56",
            "sigAlgName": "SHA1withRSA",
            "subject": "CN=something.domain.com, OU=Domain Control Validated, O=something.domain.com",
            "validFrom": 1358287055000,
            "version": 3
          },
      

      Birincil sertifikadaki konu adının CN'si şu şekildedir: something.domain.com.

      API isteği URL'sinde kullanılan ana makine adı (yukarıdaki 1. adıma bakın) ile sertifikadaki konu adı eşleşmediğinden TLS/SSL el sıkışma hatası alırsınız.

Çözünürlük

Bu sorun, aşağıdaki iki yöntemden biri kullanılarak çözülebilir:

  • Henüz yapmadıysanız konu CN'sinin joker karakter sertifikasına sahip olduğu bir sertifika alın ve yeni tam sertifika zincirini anahtar deposuna yükleyin. Örneğin:
    "subject": "CN=*.domain.com, OU=Domain Control Validated, O=*.domain.com",
  • Mevcut bir konu CN'si ile bir sertifika alın (henüz yoksa) your-org öğesini kullanın.your-domain öğesini konu alternatif adı olarak ekleyin, ardından sertifika zincirinin tamamını anahtar deposuna yükleyin.

Referanslar

Anahtar depoları ve Truststore'lar

Eksik veya yanlış sertifika zinciri

Teşhis

  1. Belirli anahtar deposunda depolanan sertifikada kullanılan CN'yi alın. Sertifikanın ayrıntılarını almak için aşağıdaki Edge yönetim API'lerini kullanabilirsiniz:
    1. Anahtar deposundan sertifika adını alın:

      Private Cloud kullanıcısıysanız:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
      Herkese Açık Bulut kullanıcısıysanız:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
    2. Anahtar deposunda sertifikanın ayrıntılarını alın:

      Private Cloud kullanıcısıysanız:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
      Herkese Açık Bulut kullanıcısıysanız:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
    3. Sertifikayı ve zincirini doğrulayın ve geçerli ve eksiksiz bir sertifika zinciri olduğundan emin olmak için bu sertifikanın Sertifika zincirlerinin işleyiş şekli başlıklı makalede verilen yönergelere uyduğunu doğrulayın. Anahtar deposunda depolanan sertifika zinciri eksik veya geçersizse TLS/SSL el sıkışma hatası gösterilir.
    4. Aşağıdaki grafikte, ara ve kök sertifikaların eşleşmediği geçersiz bir sertifika zincirine sahip örnek sertifika gösterilmektedir:
    5. Yayıncı ve konunun eşleşmediği örnek ara ve kök sertifika


Çözünürlük

  1. Henüz yapmadıysanız eksiksiz ve geçerli bir sertifika zinciri içeren bir sertifika edinin.
  2. Sertifika zincirinin doğru ve eksiksiz olduğunu doğrulamak için aşağıdaki Opensl komutunu çalıştırın:
    openssl verify -CAfile root-cert -untrusted intermediate-cert main-cert
  3. Doğrulanmış sertifika zincirini anahtar deposuna yükleyin.

Sunucu veya istemci tarafından gönderilen, süresi dolmuş veya bilinmeyen sertifika

Sunucu/istemci tarafından kuzey sınırında veya güneydeki bağlantıda yanlış/süresi dolmuş bir sertifika gönderilirse diğer uç (sunucu/istemci) sertifikayı reddeder ve bu da TLS/SSL el sıkışma hatasına yol açar.

Teşhis

  1. Hatanın kuzey giden bağlantıda mı yoksa güne giden bağlantıda mı oluştuğunu belirleyin. Bunu belirleme konusunda daha fazla bilgi için Sorunun kaynağını belirleme bölümüne bakın.
  2. Daha fazla bilgi toplamak için tcpdump yardımcı programını çalıştırın:
    • Private Cloud kullanıcısıysanız tcpdump verilerini ilgili istemcide veya sunucuda toplayabilirsiniz. İstemci, istemci uygulaması (gelen veya kuzeye giden bağlantılar için) ya da Mesaj İşleyici (giden veya güneye giden bağlantılar için) olabilir. Sunucu, 1. Adım'daki kararınıza bağlı olarak Uç Yönlendirici (gelen veya kuzeye giden bağlantılar için) ya da arka uç sunucusu (giden veya güneye giden bağlantılar için) olabilir.
    • Herkese Açık Bulut kullanıcısıysanız Edge Yönlendiricisi veya Mesaj İşleyici'ye erişiminiz olmadığından tcpdump verilerini yalnızca istemci uygulamasında (gelen veya kuzeye giden bağlantılar için) ya da arka uç sunucusunda (giden veya güneye giden bağlantılar için) toplayabilirsiniz.
    tcpdump -i any -s 0 host IP address -w File name
    
    tcpdump komutunu kullanma hakkında daha fazla bilgi edinmek için tcpdump verilerine göz atın.
  3. tcpdump verilerini Wireshark veya benzer bir araç kullanarak analiz edin.
  4. tcpdump çıkışından, doğrulama adımı sırasında sertifikayı reddeden ana makineyi (istemci veya sunucu) belirleyin.
  5. Verilerin şifrelenmemiş olması koşuluyla, diğer uçtan gönderilen sertifikayı tcpdump çıkışından alabilirsiniz. Bu, bu sertifikanın güven deposundaki sertifikayla eşleşip eşleşmediğini karşılaştırmak için yararlı olur.
  6. Mesaj İşleyici ile arka uç sunucusu arasındaki SSL iletişimi için örnek tcpdump bölümünü inceleyin.

    Bilinmeyen Sertifika hatasını gösteren örnek tcpdump


    1. Mesaj İşleyici (istemci), 59 numaralı mesajda arka uç sunucusuna (sunucu) "Client Hello" gönderir.
    2. Arka uç sunucusu 61 numaralı mesajda Mesaj İşleyici'ye "Server Hello"yu gönderir.
    3. Kullanılan protokolü ve şifre paketi algoritmalarını karşılıklı olarak doğrularlar.
    4. Arka uç sunucusu, 68 numaralı mesajda Sertifika ve Sunucu Merhaba Bitti mesajını Mesaj İşleyici'ye gönderir.
    5. Mesaj İşleyici, 70 numaralı mesajda "Description: Certificate Unknown" Önemli Uyarıyı gönderir.
    6. 70 numaralı mesaj ayrıntılı olarak incelendiğinde, aşağıda gösterilen uyarı mesajı dışında ek ayrıntı yoktur:


    7. Arka uç sunucusu tarafından gönderilen sertifika hakkında aşağıdaki grafikte gösterildiği gibi ayrıntıları öğrenmek için 68 numaralı mesajı inceleyin:

    8. Arka uç sunucusunun sertifikası ve tüm zinciri, yukarıdaki şekilde gösterildiği gibi "Sertifikalar" bölümünün altında bulunur.
  7. Sertifikanın, yukarıda açıklanan örnekte Yönlendirici (kuzeyd) veya Mesaj İşleyici (güne sınırına) tarafından bilinmediği tespit edilirse şu adımları uygulayın:
    1. Belirli güven deposunda depolanan sertifikayı ve zincirini alın. (Yönlendirici için sanal ana makine yapılandırmasına ve Mesaj İşleyici için hedef uç nokta yapılandırmasına bakın). Sertifikanın ayrıntılarını almak için aşağıdaki API'leri kullanabilirsiniz:
      1. Güven deposundan sertifika adını alın:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs
      2. Güven deposunda sertifika ayrıntılarını alın:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs/cert-name
    2. Yönlendiricinin (kuzey giden) veya Mesaj İşleyicinin (güne giden) güven deposunda saklanan sertifikanın, istemci uygulamasının (kuzey giden) veya hedef sunucunun (güneye giden) anahtar deposunda (güne giden) ya da tcpdump çıkışından alınan sertifikayla eşleşip eşleşmediğini kontrol edin. Bir uyuşmazlık varsa TLS/SSL el sıkışma hatasının nedeni budur.
  8. İstemci uygulaması (kuzey giden) veya hedef sunucu (güne sınırına) tarafından sertifikanın bilinmediği belirlenirse şu adımları uygulayın:
    1. Belirli anahtar deposunda depolanan sertifikada kullanılan sertifika zincirinin tamamını alın. (Yönlendirici için sanal ana makine yapılandırmasına ve Mesaj İşleyici için hedef uç nokta yapılandırmasına bakın.) Sertifikanın ayrıntılarını almak için aşağıdaki API'leri kullanabilirsiniz:
      1. Anahtar deposundan sertifika adını alın:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      2. Anahtar deposunda sertifika ayrıntılarını alın:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
        
    2. Yönlendiricinin (kuzey giden) veya Mesaj İşleyicinin (güne giden) anahtar deposunda depolanan sertifikanın, istemci uygulamasının (kuzey giden) veya hedef sunucunun (güneye giden) güven deposunda saklanan ya da tcpdump çıkışından alınan sertifikayla eşleşip eşleşmediğini kontrol edin. Uyuşmazlık varsa SSL el sıkışma hatasının nedeni budur.
  9. Bir sunucu/istemci tarafından gönderilen sertifikanın süresinin dolduğu tespit edilirse alıcı istemci/sunucu sertifikayı reddeder ve tcpdump içinde aşağıdaki uyarı mesajını görürsünüz:

    Uyarı (Seviye: Önemli, Açıklama: Sertifikanın süresi doldu)

  10. Uygun ana bilgisayarın anahtar deposundaki sertifikanın süresinin dolduğunu doğrulayın.

Çözünürlük

Yukarıdaki örnekte belirtilen sorunu çözmek için geçerli arka uç sunucusunun sertifikasını İleti İşleyici'de güvenilir kişiye yükleyin.

Aşağıdaki tabloda, sorunun nedenine bağlı olarak çözüm adımları özetlenmektedir.

Neden Açıklama Çözüm
Geçerlilik Süresi Dolmuş Sertifika NorthBound
  • Yönlendiricinin anahtar deposunda saklanan sertifikanın süresi doldu.
  • İstemci uygulamanın anahtar deposunda depolanan sertifikanın süresi doldu (2 yönlü SSL).
Yeni sertifikayı ve zincirinin tamamını, ilgili ana makinedeki anahtar deposuna yükleyin.
SouthBound
  • Hedef Sunucunun anahtar deposunda depolanan sertifikanın süresi doldu.
  • Mesaj İşleyici'nin anahtar deposunda depolanan sertifikanın süresi doldu (2 yönlü SSL).
Yeni sertifikayı ve zincirinin tamamını, ilgili ana makinedeki anahtar deposuna yükleyin.
Bilinmeyen Sertifika NorthBound
  • İstemci uygulamanın güven deposunda saklanan sertifika, Yönlendiricinin sertifikasıyla eşleşmiyor.
  • Yönlendiricinin güven deposunda saklanan sertifika, istemci uygulamasının sertifikasıyla (2 yönlü SSL) eşleşmiyor.
Geçerli sertifikayı, uygun ana makinedeki güven deposuna yükleyin.
SouthBound
  • Hedef sunucunun güven deposunda depolanan sertifika, Mesaj İşleyici sertifikasıyla eşleşmiyor.
  • Mesaj İşleyici'nin güven deposunda depolanan sertifika, hedef sunucunun sertifikasıyla (2 yönlü SSL) eşleşmiyor.
Geçerli sertifikayı, uygun ana makinedeki güven deposuna yükleyin.

SNI Etkin Sunucu

TLS/SSL el sıkışma hatası, istemci SNI etkin olmasa bile bir Sunucu Adı Göstergesi (SNI) Etkin Sunucusu ile iletişim kurarken ortaya çıkabilir. Bu, Edge'in kuzey sınırında veya güneye giden bağlantıda gerçekleşebilir.

Öncelikle, kullanılan sunucunun ana makine adını ve bağlantı noktası numarasını belirlemeniz ve SNI'nın etkin olup olmadığını kontrol etmeniz gerekir.

SNI etkin sunucunun tanımı

  1. openssl komutunu yürütün ve aşağıda gösterildiği gibi, sunucu adını iletmeden ilgili sunucu ana makine adına (Edge Yönlendirici veya arka uç sunucusu) bağlanmayı deneyin:
    openssl s_client -connect hostname:port
    
    Sertifikaları alabilirsiniz ve bazen windowssl komutunda aşağıda gösterildiği gibi el sıkışma hatasıyla karşılaşabilirsiniz:
    CONNECTED(00000003)
    9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
    
  2. openssl komutunu yürütün ve aşağıda gösterildiği gibi sunucu adını ileterek ilgili sunucu ana makine adına (Edge yönlendirici veya arka uç sunucusu) bağlanmayı deneyin:
    openssl s_client -connect hostname:port -servername hostname
    
  3. 1. adımda bir el sıkışma hatası alırsanız veya 1. adımda ve 2. adımda farklı sertifikalar alırsanız bu, Sunucunun SNI'nın etkin olduğunu gösterir.

Sunucunun SNI'nın etkin olduğunu belirledikten sonra, TLS/SSL el sıkışma hatasının istemcinin SNI sunucusuyla iletişim kuramamasından kaynaklanıp kaynaklanmadığını kontrol etmek için aşağıdaki adımları uygulayabilirsiniz.

Teşhis

  1. Hatanın kuzey giden bağlantıda mı yoksa güne giden bağlantıda mı oluştuğunu belirleyin. Bunu belirleme konusunda daha fazla bilgi için Sorunun kaynağını belirleme bölümüne bakın.
  2. Daha fazla bilgi toplamak için tcpdump yardımcı programını çalıştırın:
    • Private Cloud kullanıcısıysanız tcpdump verilerini ilgili istemcide veya sunucuda toplayabilirsiniz. İstemci, istemci uygulaması (gelen veya kuzeye giden bağlantılar için) ya da Mesaj İşleyici (giden veya güneye giden bağlantılar için) olabilir. Sunucu, 1. Adım'daki kararınıza bağlı olarak Uç Yönlendirici (gelen veya kuzeye giden bağlantılar için) ya da arka uç sunucusu (giden veya güneye giden bağlantılar için) olabilir.
    • Herkese Açık Bulut kullanıcısıysanız Edge Yönlendiricisi veya Mesaj İşleyici'ye erişiminiz olmadığından tcpdump verilerini yalnızca istemci uygulamasında (gelen veya kuzeye giden bağlantılar için) ya da arka uç sunucusunda (giden veya güneye giden bağlantılar için) toplayabilirsiniz.
    tcpdump -i any -s 0 host IP address -w File name
    
    tcpdump komutunu kullanma hakkında daha fazla bilgi edinmek için tcpdump verilerine göz atın.
  3. tcpdump çıkışını Wireshark veya benzer bir araç kullanarak analiz edin.
  4. Wireshark kullanılarak yapılan örnek tcpdump analizi aşağıda verilmiştir:
    1. Bu örnekte, TLS/SSL el sıkışma hatası, Edge Mesaj İşleyici ile arka uç sunucusu (güneye giden bağlantı) arasında gerçekleşmiştir.
    2. Aşağıdaki tcpdump çıkışındaki 4 numaralı mesaj, Mesaj İşleyicinin (kaynak) arka uç sunucusuna (hedef) bir "Client Hello" mesajı gönderdiğini gösterir.

    3. "İstemci Merhaba" mesajının seçilmesi, Mesaj İşleyicinin TLSv1.2 protokolünü kullandığını gösterir.

    4. 4. mesaj, arka uç sunucusunun Mesaj İşleyici'den gelen "İstemci Merhaba" mesajını onayladığını gösterir.
    5. Arka uç sunucusu Mesaj İşleyiciye hemen bir Önemli Uyarı : El Sıkışma Hatası gönderir (5 numaralı mesaj). Bu, TLS/SSL el sıkışmasının başarısız olduğu ve bağlantının kapatılacağı anlamına gelir.
    6. Aşağıdaki bilgileri keşfetmek için 6 numaralı mesajı inceleyin
      • Arka uç sunucusu TLSv1.2 protokolünü destekliyor. Bu, protokolün Mesaj İşleyici ve arka uç sunucusu arasında eşleştiği anlamına gelir.
      • Ancak arka uç sunucusu, aşağıdaki resimde gösterildiği gibi Mesaj İşleyici'ye Önemli Uyarı: El Sıkışma Hatası'nı göndermeye devam eder:

    7. Bu hata, aşağıdaki nedenlerden birinden kaynaklanabilir:
      • Mesaj İşleyici, arka uç sunucusu tarafından desteklenen şifre paketi algoritmalarını kullanmıyor.
      • Arka uç sunucu SNI etkin ancak istemci uygulaması sunucu adını göndermiyor.
    8. tcpdump çıkışındaki 3. mesajı (Client Hello) daha ayrıntılı olarak inceleyin. Aşağıda gösterildiği gibi, Extension: server_name uzantısı eksiktir:

    9. Bu işlem, Mesaj İşleyicinin server_name değerini SNI özellikli arka uç sunucusuna göndermediğini onaylar.
    10. Bu, TLS/SSL el sıkışma hatasının ve arka uç sunucusunun Mesaj İşleyici'ye Önemli Uyarı: El Sıkışma Hatası'nı göndermesinin nedenidir.
  5. Mesaj İşleyici'nin SNI özellikli sunucuyla iletişim kurmak için etkinleştirilmediğini onaylamak için system.properties içindeki jsse.enableSNIExtension property öğesinin, Mesaj İşleyici'de false (yanlış) değerine ayarlandığını doğrulayın.

Çözünürlük

Aşağıdaki adımları uygulayarak Mesaj İşleyicilerin SNI özellikli sunucularla iletişim kurmasını etkinleştirin:

  1. Dosyayı/opt/apigee/customer/application/message-processor.properties oluşturun (önceden mevcut değilse).
  2. Bu dosyaya şu satırı ekleyin: conf_system_jsse.enableSNIExtension=true
  3. Bu dosyanın sahibini apigee:apigee olarak adlandır:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Message Processor'ı yeniden başlatın.
    /opt/apigee/apigee-service/bin/apigee-service message-processor restart
  5. Birden fazla Mesaj İşleyiciniz varsa tüm Mesaj İşleyicilerinde 1-4 arasındaki adımları tekrarlayın.

TLS/SSL El Sıkışma hatasının nedenini belirleyemiyorsanız ve sorunu gideremiyorsanız ya da daha fazla yardıma ihtiyacınız varsa Apigee Edge Destek Ekibi ile iletişime geçin. Sorunla ilgili tüm ayrıntıları, tcpdump çıkışıyla birlikte paylaşın.