400 Hatalı İstek - SSL Sertifika Hatası

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Belirti

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

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ı:

<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 aşağıda açıklanmıştır:

Neden Açıklama Aşağıdakiler İçin Geçerli Sorun Giderme Talimatları
Süresi dolmuş istemci sertifikası İstemci tarafından gönderilen sertifikanın süresi dolmuş. Edge Özel ve Herkese Açık Bulut kullanıcıları
İstemci tarafından yanlış sertifika gönderildi İstemci uygulama tarafından gönderilen sertifika eşleşmezse bu hata verilir Edge'in Yönlendiricisinin güven deposunda depolanan sertifika ile karşılaştırabilirsiniz. Edge Özel ve Herkese Açık Bulut kullanıcıları
Truststore'da İstemci Kök Sertifikası Eksik İstemcinin CA imzalı kök sertifikası güven deposunu oluşturur. Edge Özel ve Herkese Açık Bulut kullanıcıları
İstemci Sertifikaları Uç Yönlendirici'ye yüklenmedi Truststore'a yüklenen istemci sertifikaları yüklenmezse bu hata verilir üzerinde değişiklik yapabilirsiniz. Edge Private Cloud kullanıcıları

Neden: Süresi Dolmuş İstemci Sertifikası

Bu sorun genellikle 2 Yönlü TLS'de istemci tarafından gönderilen sertifikanın süresi dolduğunda. 2 yönlü TLS'de hem istemci hem sunucu değişimi el sıkışmalarını gerçekleştirebilmelerini sağlar. İstemci, sunucu sertifikasını doğrular ve sunucu, istemci sertifikasını doğrular.

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

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

Teşhis

  1. Edge kullanıcı arayüzüne giriş yapın ve ilgili Sanal Ana Makine yapılandırmasını görüntüleyin (Yönetici > Sanal Ana Makineler) Sanal ana makine API'si al'ı kullanın veya kullanın management API'yi kullanabilirsiniz.

    İki yönlü TLS iletişimi için sanal ana makine genellikle 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ının gösterdiği Truststore'u belirleyin
    1. Edge kullanıcı arayüzünde Yönetici > Ortamlar > Referanslar Truststore referans adını arayın.
    2. Belirli Truststore referansı için Referans sütunundaki adı not edin. Bu, Truststore adınız olacaktır.

      Edge kullanıcı arayüzünde
                                                             referanslar
      Şekil 1

      Yukarıdaki örnekte, myTruststoreRef öğesinin, alıcı: myTruststore. Bu nedenle, Truststore adı myTruststore şeklindedir.

  4. Yönetici > Ortamlar > Edge kullanıcı arayüzünde TLS Anahtar Depoları, TLS'ye gidin Anahtar depolarına bakın ve 3. adımda bulunan Truststore'u arayın.
  5. Aşağıda gösterildiği gibi, ilgili Truststore'un altındaki (yukarıdaki 3. adımda belirtilmiştir) sertifikayı seçin:

    Şekil 2

    Yukarıdaki örnekte client-cert-markw takma adına sahip sertifika, süresi doldu.

  6. Truststore sertifika takma adınız için sertifikanın süresinin dolup dolmadığını kontrol edin.
  7. Sertifikanın süresi dolmamışsa Diğer Nedenler için Ortak Teşhis Adımları'na geçin.

Çözünürlük

Yeni bir sertifika temin edin ve sertifikayı yükleyin:

  1. Örneğin myNewTruststore gibi yeni bir güven deposu oluşturun.
  2. Yeni sertifikayı yeni oluşturulan güven deposuna yükleyin.
  3. Belirli Sanal Ana Makinede kullanılan güvenen referansını yeni ana makineye işaret edecek şekilde değiştirin güven deposunu oluşturmak için Referansı değiştirme

    Yukarıda açıklanan örnekte, myTruststoreRef to myNewTruststore referansını gösterin.

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

  1. Bu sorunu araştırmak için tcpdump aracını kullanın.
    1. Private Cloud kullanıcısıysanız TCP/IP paketlerini veya Yönlendirici.
    2. Herkese açık Bulut kullanıcısıysanız istemci uygulamasında TCP/IP paketlerini yakalayın.
    3. TCP/IP paketlerini nerede yakalamak istediğinize karar verdikten sonra, aşağıdaki kodu kullanın: tcpdump komutunu kullanın:

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

      Not: Yönlendirici üzerinden TCP/IP paketlerini alıyorsanız tcpdump komutunda istemci uygulamasının herkese açık IP adresini girin.

      İstemci uygulamasında TCP/IP paketlerini alıyorsanız herkese açık IP'yi kullanın tcpdump komutunda Sanal Ana Makine'de kullanılan ana makine adının adresini girin.

      tcpdump sayfasına bakın bu araç ve bu komutun diğer varyantları hakkında daha fazla bilgi edinin.

  2. Toplanan TCP/IP paketlerini analiz etmek için Wireshark aracı veya alışkın olduğunuz benzer bir araç.

Wireshark aracı kullanılarak örnek TCP/IP paketi verilerinin analizi aşağıda verilmiştir:

  1. tcpdump'taki 30 numaralı paket (aşağıdaki resim aşağıda verilmiştir) istemci uygulamasının (kaynak) bir "Müşteri Hello" gönderdi mesajı gösterir.
  2. 34 numaralı paket, Yönlendiricinin, istemci uygulamasından gelen İstemci Hello mesajını onayladığını gösterir.
  3. Yönlendirici, "Sunucu Hello"yu gönderir ve ardından sertifikasını gönderir ve ayrıca, istemci uygulamasından, sertifikasını 38 numaralı pakette göndermesini ister.
  4. Yönlendirici'nin "Sertifika İsteği" paketini gönderdiği 38 numaralı pakette, "Ayırt Edici Adlar" Bu bölümde, istemci sertifikası ve zinciri hakkında ayrıntılı bilgiler yer alır. Yönlendirici (sunucu) tarafından kabul edilen sertifika yetkilileri ve sertifika yetkilileri hakkında daha fazla bilgi edinebilirsiniz.
  5. Şekil 3
  6. İstemci uygulama, sertifikasını 41 numaralı pakette gönderir. Sertifika Doğrulama bölümünü inceleyin ve istemci uygulaması tarafından gönderilen sertifikayı belirleyin.

    Şekil 4
  7. Konunun, sertifikayı verenin ve sertifika zincirinin istemci tarafından gönderilip gönderilmediğini doğrulayın uygulaması (paket #41), kabul edilen sertifikayla ve Yönlendirici'den alınan zinciriyle eşleşiyor (paket #38). Uyuşmazlık varsa bu hatanın nedeni budur. Dolayısıyla Yönlendirici (Sunucu), Şifrelenmiş Uyarı'yı (paket no. 57) ve ardından FIN, ACK'yı (paket 58) gönderir. İstemci Uygulaması ve sonunda bağlantı sonlandırılır.
  8. Sertifika ile zincirinin uyuşmazlığı, aşağıdaki senaryoda açıklanan senaryolardan kaynaklanabilir: bu bölümde bulabilirsiniz.

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

Bu durum, genellikle sertifikanın ve/veya zincirinin ilgili kişi/yayıncı tarafından gönderilen sertifikayla ve/veya Yönlendiricinin (Sunucu) güven deposunda saklanan sertifika zinciriyle eşleşmemektedir.

Teşhis

  1. Edge kullanıcı arayüzünde oturum açın ve ilgili sanal ana makine yapılandırmasını görüntüleyin (Yönetici > Sanal Ana Makineler) Sanal ana makine API'si al kullanın veya bu API'yi kullanın management API'yi kullanabilirsiniz.

    İki yönlü TLS iletişimi için sanal ana makine genellikle 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

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

      Edge kullanıcı arayüzü gösteriliyor
        güven deposu referansı.
      Şekil 5

      Yukarıdaki örnekte, myCompanyTruststoreRef öğesinin myCompanyTruststore referansı. Bu nedenle, Truststore adı, myCompanyTruststore'dur.

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

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

    2. Bir anahtar deposundan veya güven deposu API'sından sertifika ayrıntılarını alın.

      Bu API, belirli bir Truststore'daki belirli bir sertifikayla ilgili bilgileri döndürür.

  5. Her sertifikanın ve sertifika zincirinin düzenleyeninin ve konusunun myCompanyTruststore, sertifikanın ve zincirinin (bkz. 38 numaralı pakete bakın). Bir uyuşmazlık varsa güven deposuna yüklenen sertifikaların Uç Yönlendirici'ye yüklenmediğinden emin olun. Neden: İstemci Sertifikaları Uç Yönlendirici'ye yüklenmedi adımına geçin.
  6. 5. Adım'da bir uyuşmazlık bulunmazsa, bu, istemci uygulamasının doğru Sertifikayı ve zincirini göndermemelidir.

Çözünürlük

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

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

İstemcinin CA imzalı kök sertifikası güven deposunu oluşturur.

Teşhis

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

    İki yönlü TLS iletişimi için sanal ana makine genellikle 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 şeklindedir.
  3. Truststore referansı tarafından kullanılan gerçek güven deposunu belirleyin.
  4. Edge kullanıcı arayüzünde Yönetici > Ortamlar > Referanslar ve arama güven deposu referans adı için kullanılır.
  5. Belirli Trustedstore referansının güven deposu adı şuradadır: Referans sütunu.

    Şekil 6

    Bu örnekte, myCompanyTruststoreRef satırının Referans sütununda myCompanyTruststore değerini girin. Bu nedenle, güven deposu myCompanyTruststore adı.

  6. Bir önceki adımda belirlenen) güven deposunda depolanan sertifikaları almak için aşağıdaki API'leri kullanabilirsiniz:
    1. Bir anahtar deposu veya güven deposu API'si için sertifikaları listeleyin. Bu API, işletmenizin emin olun.
    2. Bir anahtar deposundan veya Trustedstore API'den sertifika ayrıntılarını alın. Bu API, güven deposundaki belirli bir sertifika.
  7. Sertifikanın, kök sertifika da dahil olmak üzere tam bir zincir içerip içermediğini kontrol edin. TCP/IP Paketlerinde görüldüğü şekilde belirli bir istemci tarafından gönderilir (bkz. Şekil 4). Truststore kök sertifikanın yanı sıra istemcinin yaprak sertifikasını veya yaprağı içermelidir ara sertifikadır. İstemcinin geçerli kök sertifikası güven deposunda yoksa hatanın nedeni budur.

    Ancak kök sertifika da dahil olmak üzere istemcinin tam sertifika zinciri varsa güven deposunda bulunuyorsa bu, güvenilir sertifikaya yüklenen sertifikaların güven deposu, uç Yönlendirici'ye yüklenmeyebilir. Bu durumda, Neden: İstemci Sertifikaları Uç Yönlendirici'ye yüklenmedi.

Çözünürlük

Kök sertifika da dahil olmak üzere doğru istemci sertifikasının kullanılabilir olduğundan emin olun inceleyebilirsiniz.

Neden: İstemci Sertifikaları Uç Yönlendirici'ye 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 mevcut olup olmadığını kontrol edin anlamına gelir. Dosya mevcut değilse şuraya taşıyın: Aşağıdaki Çözüm bölümünü inceleyin.
    2. Dosya mevcutsa aşağıdaki openssl komutunu kullanarak var olan tüm sertifikaları kontrol edin:
      openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
    3. Sertifikayı vereni, konusunu ve geçerlilik bitiş tarihini kontrol edin. Bunlardan herhangi biri eşleşmezse Edge kullanıcı arayüzündeki Truststore'da veya yönetim API'lerini kullanarak gözlemlenen bilgilerle yardımcı olur.
    4. Yönlendirici, yüklenen sertifikaları yeniden yüklememiş olabilir.

Çözünürlük

Aşağıdaki adımdan yararlanarak en son Sertifikaların yüklendiğinden emin olmak için Yönlendiriciyi yeniden başlatın:

apigee-service edge-router restart

API'leri yeniden çalıştırıp sonuçları kontrol edin. Sorun devam ederse şu adrese gidin: Teşhis Bilgilerini Toplama.

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çip 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ı 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 API'sini al'ı kullanarak Sanal Ana Makine Adı ve tanımı
    2. Ana Makine Takma Adı Adı
    3. Tam Hata Mesajı gözlemlendi
    4. İstemci Uygulaması veya Yönlendiricisinde yakalanan TCP/IP paketleri.
    5. Listeleri anahtar deposu API'sinden listele çıktısı API ve Get Cert details API (Sertifika ayrıntıları API'sini alın) kullanılarak alınan her Sertifikanın ayrıntıları.
  3. Bu başucu kitabının hangi bölümlerini denediğiniz ve bunu yapmak için bu sorunun çözümünü bir an önce düşürmemize yardımcı olur.