400 Hatalı istek - HTTPS bağlantı noktasına gönderilen düz HTTP isteği

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

Belirti

İstemci uygulaması şu mesajla bir HTTP 400 Bad Request yanıtı alır: The plain HTTP request was sent to HTTPS port.

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 plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
</body>
</html>

Olası nedenler

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
TLS tarafından yapılandırılmış bir sanal ana makineye yönelik HTTP isteği İstemci, TLS tarafından yapılandırılmış bir sanal ana makineye HTTP isteği gönderir Edge Herkese Açık ve Private Cloud kullanıcıları
TLS yapılandırılmış hedef uç noktasına yönelik HTTP isteği Hedef uç noktadaki TLS'nin etkin olduğu arka uç sunucusuna yapılan HTTP isteği. Edge Herkese Açık ve Private Cloud kullanıcıları
Yanlış hedef sunucu yapılandırması Hedef sunucu 443 güvenli bağlantı noktasıyla yapılandırılmış, ancak SSL etkin değil. Edge Herkese Açık ve Private Cloud kullanıcıları

Neden: TLS tarafından yapılandırılmış bir sanal ana makineye gönderilen HTTP isteği

Bu hata, bir istemci Apigee'de bir API'ye bağlanmaya çalışırken ve bahsedilen sanal ana makine, SSL kullanacak şekilde yapılandırılır ve bunun yerine bir HTTP isteği alır.

Teşhis

Bu sorun Northbound uç nokta ve API istekleri, Bu hata mesajları NGINX yönlendiricisine kaydedilmez. erişim günlükleri. Bu nedenle, söz konusu istekler API Monitoring ve izin verir.

  1. API isteğinizi doğrulayın ve yalnızca 443 güvenli bağlantı noktasından istekleri kabul edecek şekilde yapılandırıldı. Öyleyse sorunun nedeni budur.

    Örnek yanlış API isteği:

    curl http://org-test.apigee.net:443/400-demo
    
    <html>
    <head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
    <body>
    <center><h1>400 Bad Request</h1></center>
    <center>The plain HTTP request was sent to HTTPS port</center>
    <hr><center>server</center>
    </body>
    </html>
    
  2. Yukarıdaki örnek istekte ana makine takma adına bir HTTP isteğinde bulunulduğuna dikkat edin 443 güvenli bağlantı noktasında myorg-test.apigee.net. Bu durum, kampanya 400 Bad Request hata.

Çözünürlük

İstemcinin HTTP yerine HTTP kullanıp kullanmadığını doğrulamanız ve doğru isteği aşağıda gösterilmiştir:

Örnek API isteği:

curl https://org-test.apigee.net:443/400-demo

veya

curl https://org-test.apigee.net/400-demo
.
< HTTP/1.1 200 OK
< Date: Thu, 25 Feb 2021 13:01:43 GMT
< Content-Type: text/xml;charset=UTF-8
< Content-Length: 403
< Connection: keep-alive
< Server: gunicorn/19.9.0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true

Neden: TLS tarafından yapılandırılmış bir hedef uç noktaya yapılan HTTP isteği

Bu hata, TLS'nin etkin olduğu bir arka uca gönderilen HTTP isteklerini yanlış yapılandırdığınızda ortaya çıkar bir API Proxy'sinin hedef uç noktasındaki sunucuyu belirtir.

Teşhis

İzleme aracını kullanarak hatayı teşhis etmek için aşağıdaki adımları uygulayın:

  1. Etkilenen API Proxy'si için Apigee kullanıcı arayüzünde Trace'i etkinleştirin.
  2. API Proxy'sine istek gönderme.
  3. 400 yanıt koduyla başarısız olan API isteklerinden birini seçin.
  4. Çeşitli aşamalar arasında gezinin ve hatanın nerede oluştuğunu belirleyin.
  5. Genellikle 400 hata yanıtının arka uç sunucusundan geldiğini görürsünüz. Yani 400 hata yanıtını Yanıt alındı aşamasında görürsünüz aşağıda gösterildiği gibi hedef sunucudan kaldırın:

  6. AX simgesini tıklayarak isteğin yapıldığı hedef uç noktayı belirleyin (Analytics Verileri Kaydedildi) simgesini tıklayın.

  7. Protokolü, arka uç sunucu ana makine takma adını ve arka uç sunucu takma adını içeren target.url ve bazen bağlantı noktası numarası olabilir. Bağlantı noktası hedef URL 443, ancak protokol HTTP.
  8. Yapılandırmayı anlamak için hedef uç noktanın tanımını inceleyin.
  9. Arka uç sunucu ana makinesinin güvenli olduğunu ve 443 gibi güvenli bir bağlantı noktasında dinleme yaptığını doğrulayın. Protokolü <URL> öğesinde http olarak kullanıyorsanız bu sorunun nedeni budur.

    Örnek hedef uç nokta yapılandırması:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TargetEndpoint name="default">
        <Description/>
        <FaultRules/>
        <PreFlow name="PreFlow">
            <Request/>
            <Response/>
        </PreFlow>
        <PostFlow name="PostFlow">
            <Request/>
            <Response/>
        </PostFlow>
        <Flows/>
        <HTTPTargetConnection>
            <Properties/>
            <URL>http://somehost.org:443/get</URL>
        </HTTPTargetConnection>
    </TargetEndpoint>
    

    Yukarıdaki örnekte, HTTP protokolünü kullandığınız ancak kullanılan bağlantı noktasının güvenli olduğu gösterilmektedir 443 numaralı bağlantı noktası. Bu, arka uç sunucusunun 400 Bad Request ve hata mesajı The plain HTTP request was sent to HTTPS port.

Çözünürlük

  1. Arka uç sunucunuz güvenli/TLS etkin ise protokolü Şurada gösterildiği gibi hedef uç noktanın <URL> öğesinde https aşağıdaki örneği inceleyin:

    Örnek hedef uç nokta yapılandırması:

    <HTTPTargetConnection>
        <Properties/>
        <URL>https://somehost.org:443/get</URL>
    </HTTPTargetConnection>
    
    .
  2. Arka uç sunucunuz güvenli değilse:

    • 443 gibi güvenli bağlantı noktası numarasından bahsetmeyin.
    • Arka uç sunucunuz sizi dinliyorsa bağlantı noktası numarasını standart güvenli olmayan bağlantı noktası
    • Güvenli olmayan başka bir bağlantı noktası kullanıyorsanız bağlantı noktası numarasını belirtin. Örneğin: 9080.

    Örnek hedef uç nokta yapılandırması:

    <HTTPTargetConnection>
        <Properties/>
        <URL>http://somehost.org/get</URL>
    </HTTPTargetConnection>
    
    or
    
    <HTTPTargetConnection>
        <Properties/>
        <URL>http://somehost.org:9080/get</URL>
    </HTTPTargetConnection>
    

Neden: Yanlış hedef sunucu yapılandırması

Hedef sunucu, etkinleştirmeden 443 gibi bir güvenli bağlantı noktasıyla yapılandırılırsa Bu durumda Apigee Edge'in Mesaj İşlemcisi'nin HTTP isteklerinde bulunan bir güvenlik ya da Bu soruna neden olan, TLS tarafından yapılandırılmış hedef sunucu

Teşhis

İzleme aracını kullanarak hatayı teşhis etmek için aşağıdaki adımları uygulayın:

  1. Etkilenen API Proxy'si için Apigee kullanıcı arayüzünde Trace'i etkinleştirin.
  2. API Proxy'sine istek gönderme.
  3. 400 yanıt koduyla başarısız olan API isteklerinden birini seçin.
  4. Çeşitli aşamalar arasında gezinin ve hatanın nerede oluştuğunu belirleyin.
  5. Genellikle 400 hata yanıtının arka uç sunucusundan geldiğini görürsünüz. Yani Yanıt alındı aşamasında 400 hata yanıtını görürsünüz. aşağıda gösterildiği gibi hedef sunucudan kaldırın:

  6. AX simgesini tıklayarak isteğin yapıldığı hedef uç noktayı belirleyin (Analytics Verileri Kaydedildi) simgesini tıklayın.

  7. Hedef uç nokta adını temsil eden target.name bilgisini not edin.

    Yukarıdaki örnek izleme dosyasında target.name default'tur. Bu, bu istek için kullanılan hedef uç noktanın varsayılan olduğunu unutmayın.

  8. Yapılandırmayı anlamak için hedef uç noktanın tanımını inceleyin.

    Örnek hedef uç nokta yapılandırması:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TargetEndpoint name="default">
        <Description/>
        <FaultRules/>
        <PreFlow name="PreFlow">
            <Request/>
            <Response/>
        </PreFlow>
        <PostFlow name="PostFlow">
            <Request/>
            <Response/>
        </PostFlow>
        <Flows/>
        <HTTPTargetConnection>
            <Properties/>
            <LoadBalancer>
            <Server name="faulty-target"/>
            </LoadBalancer>
        </HTTPTargetConnection>
    </TargetEndpoint>
    

    Yukarıdaki örnek hedef uç nokta yapılandırması, bir hedef sunucu kullandığınızı gösteriyor faulty-target olarak adlandırıldı.

  9. Hedef sunucu adını belirledikten sonra, aşağıdaki yöntemlerden birini kullanarak hedef sunucu yapılandırmasını kontrol edin:

    • Edge kullanıcı arayüzü
    • Yönetim API'si

Edge kullanıcı arayüzü

  1. Apigee Edge'e gidin > Yönetici > Ortamlar > Hedef Sunucular.
  2. API proxy'sinden tanımlanan hedef sunucuyu seçip Düzenle.
  3. Hedef sunucu için belirtilen bağlantı noktasını ve SSL bilgilerini doğrulayın.
  4. Hedef sunucu güvenli bir bağlantı noktasıyla yapılandırılmışsa (örneğin: 443), ancak SSL etkin değilse sorunun nedeni budur.

    Yukarıdaki ekran görüntüsünde görebileceğiniz gibi, kullanılan bağlantı noktası 443, ancak SSL değil hedef sunucu yapılandırmasında söz konusu bağlantı noktası için etkinleştirilmelidir. Bu da Apigee Edge'in mesajının İşlemcinin 443 güvenli bağlantı noktasına HTTP istekleri göndermesi gerekir. Bu nedenle, The plain HTTP request was sent to HTTPS port mesajını içeren 400 Bad Request hatası.

Yönetim API'si

  1. Şunu yürütün: Belirli bir hedef sunucu yapılandırmasıyla ilgili ayrıntıları almak için hedef sunucu API'sini alın aşağıdaki gibidir:

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

    curl -v 'https://api.enterprise.apigee.com/v1/organizations/ORG_NAME/environments/ENV_NAME>/targetservers/TARGET_SERVER_NAME' \
    -H "Content-Type:application/xml" \
    -H "Authorization:Bearer $TOKEN"
    

    Private Cloud kullanıcısı:

    curl -v 'http://MANAGEMENT_IP:8080/v1/organizations/ORG_NAME/environments/ENV_NAME/targetservers/TARGET_SERVER_NAME' \
    -H "Content-Type:application/xml" \
    -H "Authorization:Bearer $TOKEN"
    
  2. Hedef sunucu için belirtilen bağlantı noktasını ve SSL bilgilerini doğrulayın.
  3. Hedef sunucu bir güvenli bağlantı noktasıyla yapılandırılmışsa (örneğin: 443), ancak SSLInfo bölümü tanımlı değilse veya etkinleştirilmediyse, çözmüştük.

    Örnek hedef sunucu yapılandırması:

    {
      "host" : "somehost.org",
      "isEnabled" : true,
      "name" : "faulty-target",
      "port" : 443
    }
    

    Yukarıdaki örnek çıkışta, hedef bağlantı için kullanılan bağlantı noktasının 443, ancak SSLInfo yapılandırma bloğu yok.

    Bu, Apigee Edge'in Mesaj İşlemcisi'nin güvenli bağlantı noktasına HTTP istekleri göndermesine neden olur 443 Bu nedenle, şu mesajla birlikte 400 Bad Request hatasını alırsınız: The plain HTTP request was sent to HTTPS port.

Çözünürlük

Hedef sunucunuz güvenliyse veya TLS yapılandırılmışsa, ilgili sunucu için SSL'yi etkinleştirmeniz gerekir yardımcı olur.

Aşağıdaki seçeneklerden birini kullanarak bunu yapabilirsiniz:

  • Edge kullanıcı arayüzü
  • Yönetim API'si

Edge kullanıcı arayüzü

  1. Edge UI > Yönetici > Ortamlar > Hedef Sunucular.
  2. İlgili hedef sunucuyu seçin ve Düzenle'yi tıklayın.
  3. Hedef sunucunuz güvenliyse ve 443 gibi bir bağlantı noktası kullanıyorsa SSL'yi SSL seçeneğinin yanındaki onay kutusunu işaretleyin.
  4. Truststore, Ciphers ve Protokolleri yapılandırın. (Yalnızca gerekirse)

Yönetim API'si

Hedef sunucuyu şurada açıklandığı gibi yapılandırmak için management API'yi kullanın: Hedef sunucu yapılandırması dokümanlarını güncelleyin.

Teşhis bilgileri toplanmalıdır

Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki Apigee Edge Destek Ekibi ile iletişime geçin.

  1. 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
    • İzleme aracı çıkışı (başarısız isteği yakalayabildiyseniz)
  2. Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
    • Tam hata mesajı görüntülendi
    • Ortam adı
    • API proxy paketi
    • Hedef sunucu tanımı (uç noktanızda hedef sunucu kullanıyorsanız)
    • İzleme aracı çıkışı (başarısız isteği yakalayabildiyseniz)