502 Hatalı Ağ Geçidi - Zincirde kendinden imzalı sertifika

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

Belirti

İstemci uygulaması, Edge Microgateway'deki API çağrılarına yanıt olarak 502 HTTP yanıt kodunu ve Bad Gateway mesajını alır.

Alternatif olarak, yönetici self signed certificate in certificate chain komutunu çalıştırırken edgemicro configure hatası alır.

Hata mesajı

İstemci aşağıdaki yanıt mesajını görür:

HTTP/1.1 502 Bad Gateway

Hata yanıtlarına ilişkin iki yaygın örnek şunlardır:

{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}
{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}

Alternatif olarak, bu hata edgemicro configure çalıştırılırken de oluşabilir:

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

Olası nedenler

Neden Açıklama Aşağıdaki ürünler için geçerli sorun giderme talimatları
Hedef sunucu, kendinden imzalı bir sertifika sunuyor Edge Microgateway, hedef sunucunun sertifikasını doğrular ve güvenilir değilse bir çalışma zamanı hatası oluşturur. Edge Public ve Private Cloud kullanıcıları
Apigee Edge Management Server, kendinden imzalı bir sertifika kullanıyor Edge Microgateway ilk kez yapılandırıldığında, başlatma için TLS üzerinden Apigee Edge'e bağlanır. Edge, kendinden imzalı bir sertifika sunarsa bu işlem başarısız olur. Edge Private Cloud kullanıcıları

Neden: Hedef sunucu, kendinden imzalı bir sertifika sunuyor

Hedef sunucu kendinden imzalı bir sertifika sunduğunda Edge Microgateway, güney bağlantısında varsayılan olarak bu hatayı oluşturur. Bunun nedeni, kendinden imzalı sertifikalara güvenmemesidir.

Teşhis

Günlüklerde (/var/tmp/edgemicro-`hostname`- *.log) aşağıdaki hatayı görebilirsiniz:

2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80-
b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate
chain][SELF_SIGNED_CERT_IN_CHAIN][]

SELF_SIGNED_CERT_IN_CHAIN hata kodu, Edge Microgateway'in hedef sunucudan büyük olasılıkla kendinden imzalı bir sertifika aldığını gösterir. Bunu doğrulamak için aşağıdaki adımları uygulayın:

  1. Hedef sunucunun sertifika zincirini doğrulamak için aşağıdaki openssl komutunu çalıştırın:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. Hedef sunucunun sertifika zinciri gerçekten kendinden imzalıysa sorunun nedeni budur.

    Aşağıdaki örnekte, hedef sunucunun kendinden imzalı bir sertifika sunduğunu unutmayın:

    echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
    
    depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority
    verify error:num=19:self signed certificate in certificate chain
    verify return:0
    DONE

Çözünürlük

  1. Hedef sunucunun sahibi olan ekiple birlikte çalışarak güvenilir bir Sertifika Yetkilisi (CA) tarafından imzalanmış uygun bir TLS sertifikası edinin.
  2. Bu mümkün değilse Edge Microgateway'de kendinden imzalı sertifikalara izin vermek için aşağıdaki seçeneklerden birini kullanabilirsiniz.

    1. seçenek: Edge Microgateway'in tüm sertifikalara güvenmesine izin vermek için bir sistem özelliği ayarlayın

    1. Docker kullanıyorsanız, Node.js tarafından güvenilmeyen bir CA kullanma başlıklı makaleye bakın.
    2. Aksi takdirde, kök CA dosyasına işaret eden NODE_EXTRA_CA_CERTS adlı bir ortam değişkenini dışa aktarın.

      Bu durum, resmi Node.js web sitesinde belgelenmiştir.

    2. seçenek: Edge Microgateway YAML yapılandırma dosyasını, hedef sunucu için söz konusu sertifikaya güvenecek şekilde yapılandırın

    1. Hedef sunucunun sertifikasının (veya zincirinin) PEM biçiminde olduğundan emin olun. Diğer sertifika biçimlerini PEM'e dönüştürmek için Sertifikaları desteklenen biçime dönüştürme başlıklı makaledeki talimatları uygulayın.
    2. Sertifika zinciri varsa sertifikaların doğru sırada olduğundan emin olun. Yaprak sertifika her zaman önce, ardından ara sertifika ve sonra kök sertifika gelmelidir. Bu konuyla ilgili daha fazla açıklamayı Sertifika zincirini doğrulama başlıklı makalede bulabilirsiniz.

      Aşağıdaki örnekte, untrusted-root.badssl.com için güvenilir CA dosyası yapılandırılmıştır.

      edgemicro:
      ...
      targets:
        - host: 'untrusted-root.badssl.com'
          ssl:
            client
              ca: /opt/apigee/certs/untrusted-root.pem

    Bu yapılandırmayla ilgili talimatlar, Edge Microgateway Modülü - Tek Yönlü ve İki Yönlü Güney Bağlantılı TLS Yapılandırma videosunda da açıklanmaktadır. Daha fazla bilgi için Edge Microgateway sunucusunda SSL'yi yapılandırma başlıklı makaleyi inceleyin.

Sorun devam ederse Toplanması gereken teşhis bilgileri başlıklı makaleye gidin.

Neden: Apigee Edge Management Server, kendinden imzalı bir sertifika kullanıyor

Edge Microgateway ilk kez kurulduğunda çalıştırmanız gereken komutlardan biri edgemicro configure veya edgemicro private configure'dir. Bu komut, kümenin önyüklemesini yapar ve gerekli bilgileri indirmek için Apigee Edge ile iletişime geçer.

Edge Private Cloud'da Yönetim Sunucusu URL'si -m bağımsız değişkeniyle belirlenir. Yönetim sunucusu için TLS'yi etkinleştirdiyseniz Edge Microgateway, Yönetim Sunucusu tarafından sunulan sertifikayı doğrulamaya çalışır.

Edge Private Cloud için örnek bir edgemicro configure komutu aşağıda verilmiştir:

edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443

Yönetim sunucusu kendinden imzalı bir sertifikayla yapılandırılmışsa konsol çıkışında aşağıdaki hatayı alırsınız.

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

Teşhis

  1. Bu durumda, Yönetim Sunucusu (management.apigee-dev.net) kendinden imzalı bir TLS sertifikası döndürüyor olabilir.
  2. Apigee Edge sistem yöneticiniz sertifikayı sağlamış ve bir kopyasını almış olabilir.
  3. Aksi takdirde, sertifika hakkında bilgi almak için aşağıdaki komutu çalıştırın:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. Yönetim sunucusunda kendinden imzalı bir sertifika varsa bu sorunun nedeni budur.

Çözünürlük

  1. Hedef sunucunun sahibi olan ekiple birlikte çalışarak güvenilir bir Sertifika Yetkilisi (CA) tarafından imzalanmış uygun bir TLS sertifikası edinin.
  2. Bu mümkün değilse Edge Microgateway'de kendinden imzalı sertifikalara izin vermek için aşağıdakileri yapın.

  3. Edge Microgateway'in tüm sertifikalara güvenmesine izin vermek için bir sistem özelliği ayarlayın.
  4. Docker kullanıyorsanız şu makaleye bakın: Node.js tarafından güvenilmeyen bir CA kullanma.
  5. Aksi takdirde, kök CA dosyasına işaret eden NODE_EXTRA_CA_CERTS adlı bir ortam değişkenini dışa aktarın.Bu, resmi Node.js web sitesinde belgelenmiştir.

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:

  • Günlük dosyaları: Varsayılan klasör /var/tmp'dir ancak ana config.yaml dosyasında (logging > dir parameter) geçersiz kılınabilir. Günlük dosyalarını Apigee Edge Destek Ekibi'ne göndermeden önce log > level değerini info olarak değiştirmeniz önerilir.
  • Yapılandırma dosyası: Edge Microgateway'in ana yapılandırması, varsayılan Edge Microgateway klasöründeki $HOME/.edgemicro YAML dosyasında bulunur. default.yaml adlı bir varsayılan yapılandırma dosyası ve her ortam için bir tane ORG-ENV-config.yaml dosyası vardır. Bu dosyayı etkilenen kuruluş ve ortam için tam olarak yükleyin.

    Referans belgeleri

    Edge API'ye erişmek için Edge kullanıcı arayüzünü TLS kullanacak şekilde yapılandırma