502 Bad Gateway - Sertifikat yang ditandatangani sendiri dalam rantai

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Gejala

Aplikasi klien menerima kode respons HTTP 502 dengan pesan tersebut Bad Gateway sebagai respons untuk panggilan API di Edge Microgateway.

Atau, administrator akan mendapatkan error self signed certificate in certificate chain saat menjalankan edgemicro configure.

Pesan error

Klien akan melihat pesan respons berikut:

HTTP/1.1 502 Bad Gateway

Dua contoh umum respons error adalah:

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

Atau, error ini dapat terjadi saat menjalankan edgemicro configure:

{ 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' }

Kemungkinan penyebab

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Server target memberikan sertifikat yang ditandatangani sendiri Edge Microgateway akan memverifikasi sertifikat server target, dan jika sertifikat tidak dipercaya, akan memunculkan error runtime. Pengguna Edge Public dan Private Cloud
Apigee Edge Management Server menggunakan sertifikat yang ditandatangani sendiri Saat mengonfigurasi Edge Microgateway untuk pertama kalinya, Edge Microgateway akan terhubung ke Apigee Edge TLS ke bootstrap. Jika Edge memberikan sertifikat yang ditandatangani sendiri, proses ini akan gagal. Pengguna Edge Private Cloud

Penyebab: Server target memberikan sertifikat yang ditandatangani sendiri

Jika sertifikat yang ditandatangani sendiri diberikan oleh server target di ke arah selatan, maka Edge Microgateway akan, secara default, menimbulkan error ini karena ia tidak mempercayai sertifikat yang ditandatangani sendiri.

Diagnosis

Anda mungkin melihat error berikut di log (/var/tmp/edgemicro-`hostname`- *.log):

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][]

Kode error SELF_SIGNED_CERT_IN_CHAIN menunjukkan bahwa Edge Microgateway memiliki kemungkinan besar menerima sertifikat yang ditandatangani sendiri dari server target. Untuk memastikannya, lakukan langkah-langkah berikut:

  1. Jalankan perintah openssl berikut untuk memverifikasi server tujuan rantai sertifikat:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. Jika rantai sertifikat server target ditandatangani sendiri, maka ini adalah penyebab menyelesaikan masalah.

    Pada contoh berikut, perhatikan bahwa server target menyajikan sertifikat yang ditandatangani sendiri:

    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
    

Resolusi

  1. Bekerja sama dengan tim yang memiliki server target untuk mendapatkan sertifikat TLS yang sesuai yang ditandatangani oleh {i>Certificate Authority <i}(CA) tepercaya.
  2. Jika tidak memungkinkan, pertimbangkan salah satu opsi berikut untuk mengizinkan penandatanganan sendiri di Edge Microgateway.

    Opsi no. 1: Menetapkan properti sistem agar Edge Microgateway dapat memercayai semua sertifikat

    1. Jika Anda menggunakan Docker, lihat Menggunakan CA yang tidak dipercaya oleh Node.js
    2. Jika tidak, ekspor variabel lingkungan bernama NODE_EXTRA_CA_CERTS, yang menunjuk ke file CA {i>root<i}.

      Hal ini didokumentasikan di Node.js situs Anda.

    Opsi #2: Konfigurasi file konfigurasi YAML Edge Microgateway agar memercayai sertifikat untuk server target tersebut

    1. Pastikan Anda memiliki sertifikat (atau rantai) server target dalam format PEM. Kepada mengonversi format sertifikat lain ke PEM, ikuti petunjuk di Mengonversi sertifikat ke format yang didukung.
    2. Jika ada rantai sertifikat, pastikan sertifikat berada dalam pesanan. leaf certificate harus selalu diutamakan, diikuti oleh perantara. sertifikat, lalu sertifikat {i>root<i}. Ada penjelasan lebih lanjut tentang hal ini di Memvalidasi rantai sertifikat.

      Pada contoh berikut, kami telah mengonfigurasi file CA tepercaya untuk untrusted-root.badssl.com.

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

    Petunjuk untuk mengonfigurasi hal ini juga dibahas dalam Modul Edge Microgateway - Mengonfigurasi video TLS Batas Selatan 1 arah dan 2 arah. Rujuk ke Mengonfigurasi SSL di server Edge Microgateway untuk mengetahui informasi selengkapnya.

Jika masalah masih berlanjut, buka Harus mengumpulkan informasi diagnostik.

Penyebab: Apigee Edge Management Server menggunakan sertifikat yang ditandatangani sendiri

Saat Edge Microgateway disiapkan untuk pertama kalinya, salah satu perintah yang perlu Anda jalankan adalah edgemicro configure atau edgemicro private configure. Perintah ini akan Lakukan bootstrap pada cluster, dan Apigee akan menghubungi Apigee Edge untuk mendownload informasi yang diperlukan.

Untuk Edge Private Cloud, URL Server Pengelolaan ditentukan oleh argumen -m. Jika Anda telah mengaktifkan TLS untuk Server Pengelolaan, Edge Microgateway akan mencoba memverifikasi sertifikat yang diberikan oleh Server Pengelolaan.

Contoh perintah edgemicro configure untuk Edge Private Cloud adalah sebagai berikut:

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

Jika Server Pengelolaan dikonfigurasi dengan sertifikat yang ditandatangani sendiri, Anda akan mendapatkan error berikut dalam output konsol.

{ 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' }

Diagnosis

  1. Dalam hal ini, Server Pengelolaan (management.apigee-dev.net) mungkin mengembalikan sertifikat TLS yang ditandatangani sendiri.
  2. Kemungkinan administrator sistem Apigee Edge Anda telah memberikan sertifikat tersebut dan memiliki salinannya.
  3. Jika tidak, jalankan perintah berikut untuk mendapatkan informasi tentang sertifikat:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. Jika Server Pengelolaan memiliki sertifikat yang ditandatangani sendiri, itulah penyebab masalah performa.

Resolusi

  1. Bekerja sama dengan tim yang memiliki server target untuk mendapatkan sertifikat TLS yang sesuai yang ditandatangani oleh {i>Certificate Authority <i}(CA) tepercaya.
  2. Jika tidak memungkinkan, lakukan hal berikut untuk mengizinkan penandatanganan sendiri di Edge Microgateway.

  3. Setel properti sistem untuk mengizinkan Edge Microgateway memercayai semua sertifikat.
  4. Jika Anda menggunakan Docker, lihat Menggunakan CA yang tidak dipercaya oleh Node.js.
  5. Jika tidak, ekspor variabel lingkungan bernama NODE_EXTRA_CA_CERTS, mengarah ke file CA {i>root<i}. Ini adalah didokumentasikan di situs Node.js.

Harus mengumpulkan informasi diagnostik

Jika masalah berlanjut bahkan setelah mengikuti instruksi di atas, kumpulkan informasi diagnostik, lalu hubungi Dukungan Apigee Edge:

  • File log: Folder default adalah /var/tmp, tetapi mungkin diganti di file config.yaml utama (logging > dir parameter). Penting sebaiknya ubah log > level menjadi info sebelum menyediakan file log ke Dukungan Apigee Edge.
  • File konfigurasi: Konfigurasi utama Edge Microgateway berada di YAML di folder Edge Microgateway default, $HOME/.edgemicro. Terdapat file konfigurasi default bernama default.yaml, lalu satu file konfigurasi untuk setiap lingkungan ORGENVconfig.yaml. Upload file ini secara penuh untuk organisasi dan lingkungan yang terkena dampak.

    Dokumen referensi

    Mengonfigurasi UI Edge agar menggunakan TLS untuk mengakses Edge API