400 Hatalı İstek - SSL Sertifika Hatası

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

Belirti

İstemci uygulaması "SSL sertifika hatası" mesajıyla birlikte bir HTTP 400 - Hatalı istek yanıtı alır. Bu hata genellikle Uç Yönlendirici tarafından Apigee Edge'e gelen bağlantı için etkinleştirilen iki yönlü TLS kurulumu kullanılarak gönderilir.

Hata Mesajı

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

HTTP/1.1 400 Bad Request

Ardından aşağıdaki HTML hata sayfası gelir:

<html>
  <head>
    <title>400 The SSL certificate error</title>
  </head>
  <body bgcolor="white">
    <center> <h1>400 Bad Request</h1>
    </center>
    <center>The SSL certificate error</center>
    <hr>
    <center>nginx</center>
  </body>
</html>

Olası Nedenler

Bu sorunun olası nedenleri şunlardır:

Neden Açıklama Geçerli Sorun Giderme Talimatları
Süresi dolmuş istemci sertifikası İstemci tarafından gönderilen sertifikanın süresi doldu. Edge Özel ve Genel Bulut kullanıcıları
İstemci tarafından yanlış sertifika gönderildi İstemci uygulaması tarafından gönderilen sertifika, Edge'in Yönlendiricisi'nin güven deposunda saklanan sertifikayla eşleşmiyorsa bu hata verilir. Edge Özel ve Genel Bulut kullanıcıları
Truststore'da İstemci Kök Sertifikası Eksik İstemcinin CA imzalı kök sertifikası, Edge'in yönlendiricisinin güven deposunda yoksa bu hata verilir. Edge Özel ve Genel Bulut kullanıcıları
Uç Yönlendirici'de istemci sertifikaları yüklenmiyor Güven deposuna yüklenen istemci sertifikaları, Yönlendiricide yüklenmediğinde bu hata verilir. Edge Private Cloud kullanıcıları

Neden: İstemci Sertifikası'nın Süresi Doldu

Bu sorun genellikle istemci tarafından gönderilen sertifikanın süresi dolduğunda 2 Yönlü TLS'de yaşanır. 2 yönlü bir TLS'de hem istemci hem de sunucu el sıkışmayı tamamlamak için genel sertifikalarını değiştirir. İstemci, sunucu sertifikasını doğrular ve sunucu, istemci sertifikasını doğrular.

Edge'de 2 yönlü TLS, sunucu sertifikasının Anahtar Deposu'na, istemci sertifikasının da güven depolarına eklendiği sanal ana makinede 2 yönlü TLS uygulanır.

TLS el sıkışması sırasında istemci sertifikasının süresinin dolduğu belirlenirse sunucu "SSL sertifika hatası" mesajıyla birlikte 400 - Hatalı istek gönderir.

Teşhis

  1. Edge kullanıcı arayüzüne giriş yapın ve API isteği yapılmakta olan ilgili Sanal Ana Makine yapılandırmasını (Yönetici > Sanal Ana Makineler) görüntüleyin veya ilgili Sanal Ana Makine'nin tanımını öğrenmek için Sanal ana makine API'si al yönetim API'sini kullanın.

    İki yönlü TLS iletişimi için genellikle bir sanal ana makine aşağıdaki gibi görünür:

    <VirtualHost name="myTLSVHost">
        <HostAliases>
            <HostAlias>api.myCompany.com</HostAlias>
        </HostAliases>
        <Port>443</Port>
        <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>true</ClientAuthEnabled>
            <KeyStore>ref://myKeystoreRef</KeyStore>
            <KeyAlias>myKeyAlias</KeyAlias>
            <TrustStore>ref://myTruststoreRef</TrustStore>
        </SSLInfo>
    </VirtualHost>
    
  2. Sanal Ana Makinede kullanılan Truststore referansını belirleyin. Yukarıdaki örnekte Truststore referans adı myTruststoreRef'dir.

  3. Truststore referansı tarafından işaret edilen Truststore'u belirleyin.
    1. Edge kullanıcı arayüzünde Yönetici > Ortamlar > Referanslar'a gidin ve Truststore referans adını arayın.
    2. İlgili Truststore referansı için Referans sütunundaki adı not edin. Bu, Truststore adınız olacaktır.

      Referansların listesini gösteren Edge kullanıcı arayüzü
      Şekil 1

      Yukarıdaki örnekte, myTruststoreRef öğesinin myTruststore referansına sahip olduğuna dikkat edin. Dolayısıyla, Truststore adı myTruststore olur.

  4. Edge kullanıcı arayüzündeki Yönetici > Ortamlar > TLS Anahtar Depoları bölümünde TLS Anahtar Depoları'na gidin ve 3. adımda bulunan Truststore'u arayın.
  5. İlgili Truststore altındaki sertifikayı (yukarıdaki 3. adımda belirlenmiştir) aşağıda gösterildiği gibi seçin:

    Şekil 2

    Yukarıdaki örnekte client-cert-markw takma adına sahip sertifikanın süresinin dolduğu gösterilmektedir.

  6. Güven deponuzun sertifika takma adına ilişkin sertifikanın süresinin dolup dolmadığını kontrol edin.
  7. Sertifikanın süresi dolmadıysa Diğer Nedenler İçin Genel Teşhis Adımları bölümüne geçin.

Çözünürlük

Yeni bir sertifika sağlayın ve sertifikayı yükleyin:

  1. Yeni bir güven deposu oluşturun (ör. myNewTruststore).
  2. Yeni sertifikayı yeni oluşturulan güven deposuna yükleyin.
  3. Referansı değiştirme bölümünde verilen adımları kullanarak ilgili Sanal Ana Makine'de kullanılan güvene başvuruyu yeni güven deposuna işaret edecek şekilde değiştirin.

    Yukarıda açıklanan örnekte, myTruststoreRef referansını myNewTruststore'a yönlendirin.

Diğer Nedenler İçin Yaygın Teşhis Adımları

  1. Bu sorunu incelemek için TCP/IP paketlerini tcpdump aracını kullanarak yakalamanız gerekir.
    1. Private Cloud kullanıcısıysanız TCP/IP paketlerini istemci uygulamasında veya Yönlendiricide yakalayabilirsiniz.
    2. Herkese Açık Bulut kullanıcısıysanız istemci uygulamasındaki TCP/IP paketlerini yakalayın.
    3. TCP/IP paketlerini nerede yakalamak istediğinize karar verdikten sonra TCP/IP paketlerini yakalamak için aşağıdaki tcpdump komutunu kullanın:

      tcpdump -i any -s 0 host <IP address> -w <File name>

      Not: Yönlendirici üzerindeki TCP/IP paketlerini alıyorsanız tcpdump komutunda istemci uygulamasının genel IP adresini kullanın.

      İstemci uygulamada TCP/IP paketlerini alıyorsanız tcpdump komutunda Sanal Ana Makine'de kullanılan ana makine adının genel IP adresini kullanın.

      Bu araç hakkında daha fazla bilgi edinmek ve bu komutun diğer varyantları için tcpdump bölümünü inceleyin.

  2. Wireshark aracı veya aşina olduğunuz benzer bir araçla toplanan TCP/IP paketlerini analiz edin.

Aşağıda, Wireshark aracını kullanarak örnek TCP/IP paket verilerinin analizini bulabilirsiniz:

  1. tcpdump'taki 30 numaralı Paket, istemci uygulamasının (kaynak) yönlendiriciye (hedef) "Client Hello" mesajı gönderdiğini gösteriyor.
  2. 34. Paket, Yönlendiricinin istemci uygulamasından Client Hello mesajını onayladığını gösterir.
  3. Yönlendirici, 35 numaralı pakette "Server Hello"yu (Sunucu Merhaba) gönderir, ardından sertifikasını gönderir ve ayrıca istemci uygulamasından, sertifikasını 38 numaralı pakette göndermesini ister.
  4. Yönlendiricinin "Sertifika İsteği" paketini gönderdiği 38 numaralı pakette, yönlendirici (sunucu) tarafından kabul edilen istemci sertifikası, zinciri ve sertifika yetkilileri hakkında ayrıntıların yer aldığı "Ayırt Edici Adlar" bölümünü kontrol edin.
  5. Şekil 3
  6. İstemci uygulaması, sertifikasını Paket # 41 içinde gönderir. 41 numaralı paketteki Sertifika Doğrulama bölümünü kontrol edin ve istemci uygulaması tarafından gönderilen sertifikayı belirleyin.

    Şekil 4
  7. İstemci uygulaması (41. paket) tarafından gönderilen sertifikanın konusunun, yayıncısının ve zincirinin, kabul edilen sertifikayla ve Yönlendirici'deki zinciriyle (38 numaralı paket) eşleşip eşleşmediğini doğrulayın. Uyuşmazlık varsa hatanın nedeni budur. Bu nedenle, Yönlendirici (Sunucu), İstemci Uygulaması'na Şifrelenmiş Uyarı (57 numaralı paket) ve ardından FIN, ACK (paket 58) bilgisini gönderir ve sonunda bağlantı sonlandırılır.
  8. Aşağıdaki bölümlerde açıklanan senaryolar, sertifika ile zincirin uyuşmazlığından kaynaklanabilir.

Neden: İstemci tarafından yanlış sertifika gönderildi

Bu durum genellikle, istemci uygulaması tarafından gönderilen sertifikanın konusu/sertifikası ve/veya zincirinin konusu, Yönlendiricinin (Sunucu) güven deposunda saklanan sertifika ve/veya zinciriyle eşleşmediğinde ortaya çıkar.

Teşhis

  1. Edge kullanıcı arayüzünde oturum açın ve API isteğinin yapıldığı belirli Sanal Ana Makine yapılandırmasını (Yönetici > Sanal Ana Makineler) görüntüleyin veya ilgili Sanal Ana Makine'nin tanımını öğrenmek için Sanal ana makine API'si al yönetim API'sini kullanın.

    İki yönlü TLS iletişimi için genellikle bir sanal ana makine aşağıdaki gibi görünür:

        <VirtualHost name="myTLSVHost">
            <HostAliases>
                <HostAlias>api.myCompany.com</HostAlias>
            </HostAliases>
            <Port>443</Port>
            <SSLInfo>
                <Enabled>true</Enabled>
                <ClientAuthEnabled>true</ClientAuthEnabled>
                <KeyStore>ref://myKeystoreRef</KeyStore>
                <KeyAlias>myKeyAlias</KeyAlias>
                    <TrustStore>ref://myCompanyTruststoreRef</TrustStore>
            </SSLInfo>
        </VirtualHost>
    
  2. Sanal Ana Makinede kullanılan Truststore referansını belirleyin.

    Yukarıdaki örnekte Truststore referans adı myCompanyTruststoreRef'dir.

  3. Truststore referansının gösterdiği Truststore değerini belirleyin.
    1. Edge kullanıcı arayüzünde Yönetici > Ortam Referansları'na gidin ve Truststore referans adını arayın.
    2. İlgili Truststore referansı için Referans sütunundaki adı not edin. Bu, Truststore adınız olacaktır.

      Truststore referansını gösteren Edge kullanıcı arayüzü.
      Şekil 5

      Yukarıdaki örnekte, myCompanyTruststoreRef öğesinin myCompanyTruststore referansına sahip olduğuna dikkat edin. Dolayısıyla Truststore adı, myCompanyTruststore olur.

  4. Aşağıdaki API'leri kullanarak Truststore'da depolanan (bir önceki adımda belirlenmiş) sertifikaları alın:
    1. Bir anahtar deposu veya güven deposu API'si için sertifikaları listeleyin.

      Bu API, belirli Truststore'daki tüm sertifikaları listeler.

    2. Sertifika ayrıntılarını bir anahtar deposundan veya güven deposu API'sinden alın.

      Bu API, belirli bir Truststore'daki belirli bir sertifika hakkında bilgi döndürür.

  5. myCompanyTruststore'da depolanan her bir sertifikanın ve zincirinin yayıncısının ve konusunun, yukarıdaki TCP/IP Paketlerinde (bkz. 38 numaralı paket) görüldüğü şekilde, sertifikanın ve zincirinin zinciriyle eşleşip eşleşmediğini kontrol edin. Uyuşmazlık olması, güven deposuna yüklenen sertifikaların Uç Yönlendirici'ye yüklenmediğini gösterir. Neden: İstemci Sertifikaları Uç Yönlendirici'ye yüklenmedi bölümüne gidin.
  6. 5. adımda uyuşmazlık tespit edilmezse bu, istemci uygulamasının doğru Sertifikayı ve onun zincirini göndermediğini gösterir.

Çözünürlük

İstemci uygulaması tarafından doğru sertifikanın ve zincirinin Edge'e gönderildiğinden emin olun.

Neden: Truststore'da İstemci Kök Sertifikası Eksik

İstemcinin CA imzalı kök sertifikası, Edge'in yönlendiricisinin güven deposunda yoksa bu hata verilir.

Teşhis

  1. Edge kullanıcı arayüzünde oturum açın ve API isteğinin yapıldığı belirli sanal ana makine yapılandırmasını görüntüleyin (Yönetici > Sanal Ana Makineler > virtual_host) veya belirli sanal ana makinenin tanımını öğrenmek için Sanal ana makine API'sini al'ı kullanın.

    İki yönlü TLS iletişimi için genellikle bir sanal ana makine aşağıdaki gibi görünür:

        <VirtualHost name="myTLSVHost">
            <HostAliases>
                <HostAlias>api.myCompany.com</HostAlias>
            </HostAliases>
            <Port>443</Port>
            <SSLInfo>
                <Enabled>true</Enabled>
                <ClientAuthEnabled>true</ClientAuthEnabled>
                <KeyStore>ref://myKeystoreRef</KeyStore>
                <KeyAlias>myKeyAlias</KeyAlias>
                <TrustStore>ref://myCompanyTruststoreRef</TrustStore>
            </SSLInfo>
        </VirtualHost>
    
  2. Sanal ana makinede kullanılan güven deposu referansını belirleyin. Önceki örnekte, güven deposu referans adı myCompanyTruststoreRef'dir.
  3. Truststore referansı tarafından kullanılan gerçek güven deposunu belirleyin.
  4. Edge kullanıcı arayüzünde Yönetici > Ortamlar > Referanslar'a gidin ve güven deposu referans adını arayın.
  5. Belirli güven deposu referansının güven deposu adı Referans sütununda bulunur.

    Şekil 6

    Bu örnekte, myCompanyTruststoreRef öğesinin Referans sütununda myCompanyTruststore değeri bulunduğundan emin olun. Dolayısıyla, güven deposu adı myCompanyTruststore'dur.

  6. Aşağıdaki API'leri kullanarak, güven deposunda depolanan sertifikaları alın (bir önceki adımda belirlenmiştir):
    1. Bir anahtar deposu veya Trustedstore API'si için sertifikaları listeleyin. Bu API, güven deposundaki tüm sertifikaları listeler.
    2. Bir anahtar deposundan veya güven deposu API'sinden sertifika ayrıntıları alın. Bu API, güven deposundaki belirli bir sertifika hakkındaki bilgileri döndürür.
  7. Sertifikanın, TCP/IP Paketlerinde görüldüğü şekilde belirli bir istemci tarafından gönderilen kök sertifika da dahil olmak üzere tam bir zincir içerip içermediğini kontrol edin (bkz. Şekil 4). Truststore, kök sertifikanın yanı sıra istemcinin yaprak sertifikasını veya yaprak ve ara sertifikasını içermelidir. İstemcinin geçerli kök sertifikası güven deposunda yoksa hatanın nedeni budur.

    Bununla birlikte, istemcinin kök sertifika da dahil olmak üzere tüm sertifika zinciri güven deposunda bulunuyorsa bu durum, güven deposuna yüklenen sertifikaların muhtemelen Uç Yönlendirici'ye yüklenmediğini gösterir. Bu durumda Neden: İstemci Sertifikaları, Uç Yönlendirici'ye yüklenmedi bölümüne bakın.

Çözünürlük

Kök sertifika da dahil olmak üzere doğru istemci sertifikasının, Apigee Edge yönlendiricisinin güven deposunda bulunduğundan emin olun.

Neden: Uç Yönlendirici'ye istemci sertifikaları yüklenmedi

  1. Herkese Açık Bulut kullanıcısıysanız Apigee Edge Destek Ekibi ile iletişime geçin.
  2. Private Cloud kullanıcısıysanız her bir Yönlendiricide aşağıdaki talimatları uygulayın:
    1. /opt/nginx/conf.d/OrgName_envName_vhostName-client.pem dosyasının belirli bir sanal ana makine için mevcut olup olmadığını kontrol edin. Dosya yoksa aşağıdaki Çözüm bölümüne gidin.
    2. Dosya mevcutsa Uç Yönlendiricide kullanılabilen sertifikaların ayrıntılarını almak için aşağıdaki openssl komutunu kullanın:
      openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
    3. Sertifikayı vereni, konuyu ve son kullanma tarihini kontrol edin. Bunlardan herhangi biri, Edge kullanıcı arayüzündeki Truststore'da veya yönetim API'leri kullanılarak gözlemlenenlerle eşleşmiyorsa hatanın nedeni budur.
    4. Yönlendirici, yüklenen sertifikaları yeniden yüklememiş olabilir.

Çözünürlük

En son Sertifikaların aşağıdaki adım kullanılarak yüklendiğinden emin olmak için Yönlendiriciyi yeniden başlatın:

apigee-service edge-router restart

API'leri yeniden çalıştırın ve sonuçları kontrol edin. Sorun devam ederse Teşhis Bilgilerini Toplama bölümüne gidin.

Teşhis Bilgilerini Toplama

Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse lütfen aşağıdaki teşhis bilgilerini toplayın. Topladığınız bilgileri Apigee Edge Destek Ekibi ile iletişime geçin ve paylaşın:

  1. Herkese Açık Bulut kullanıcısıysanız aşağıdaki bilgileri sağlayın:
    1. Kuruluş Adı
    2. Ortam Adı
    3. API Proxy Adı
    4. Sanal Ana Makine Adı
    5. Ana Makine Takma Adı
    6. Hatayı yeniden oluşturmak için curl komutunu tamamlayın
    7. İstemci Uygulamasında yakalanan TCP/IP paketleri
  2. Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
    1. Sanal Ana Makine Adı ve Sanal ana makine API'si al kullanılarak yapılan tanımı
    2. Ana Makine Takma Adı
    3. Tam Hata Mesajı gözlemlendi
    4. İstemci Uygulaması veya Yönlendiricide yakalanan TCP/IP paketleri.
    5. Keystore API'den sertifikaları listeleyin API'sinin çıktısı ve ayrıca Get cert details API kullanılarak alınan her sertifikanın ayrıntıları.
  3. Bu Başucu Kitabı'nın hangi bölümlerini denediğinizle ilgili ayrıntılar ve bu sorunun çözümünü hızlandırmamıza yardımcı olacak diğer görüşler.