502 Bad Gateway - Sertifikat yang ditandatangani sendiri dalam rantai

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

Gejala

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

Atau, administrator akan mendapatkan error self signed certificate in certificate chain saat menjalankan perintah 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 yang berlaku untuk
Server target menampilkan sertifikat yang ditandatangani sendiri Edge Microgateway akan memverifikasi sertifikat server target, dan jika tidak tepercaya, sertifikat tersebut akan memunculkan error runtime. Pengguna Edge Public dan Private Cloud
Server Pengelolaan Apigee Edge menggunakan sertifikat yang ditandatangani sendiri Saat mengonfigurasi Edge Microgateway untuk pertama kalinya, Edge Microgateway akan terhubung ke Apigee Edge melalui TLS untuk melakukan bootstrapping. Jika Edge menampilkan sertifikat yang ditandatangani sendiri, tindakan ini akan gagal. Pengguna Edge Private Cloud

Penyebab: Server target menampilkan sertifikat yang ditandatangani sendiri

Jika sertifikat yang ditandatangani sendiri ditampilkan oleh server target di koneksi southbound, Edge Microgateway akan, secara default, memunculkan error ini karena tidak mempercayai sertifikat yang ditandatangani sendiri.

Diagnosis

Anda mungkin melihat error berikut dalam 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 kemungkinan besar telah menerima sertifikat yang ditandatangani sendiri dari server target. Untuk mengonfirmasi hal ini, lakukan langkah-langkah berikut:

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

    Pada contoh berikut, perhatikan bahwa server target menampilkan 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 samalah dengan tim yang memiliki server target untuk mendapatkan sertifikat TLS yang tepat dan ditandatangani oleh a Certificate Authority (CA) tepercaya.
  2. Jika hal tersebut tidak memungkinkan, pertimbangkan salah satu opsi berikut untuk mengizinkan sertifikat yang ditandatangani sendiri di Edge Microgateway.

    Opsi #1: Tetapkan properti sistem untuk mengizinkan Edge Microgateway mempercayai semua sertifikat

    1. Jika Anda menggunakan Docker, lihat Menggunakan CA yang tidak dipercaya oleh Node.js
    2. Jika tidak, ekspor variabel lingkungan yang disebut NODE_EXTRA_CA_CERTS, yang mengarah ke file CA root.

      Hal ini didokumentasikan di situs resmi Node.js website.

    Opsi #2: Konfigurasi file konfigurasi YAML Edge Microgateway untuk mempercayai sertifikat tertentu untuk server target tersebut

    1. Pastikan Anda memiliki sertifikat (atau rantai) server target dalam format PEM. Untuk mengonversi format sertifikat lain ke PEM, ikuti petunjuk di Mengonversi sertifikat ke format yang didukung.
    2. Jika ada rantai sertifikat, pastikan sertifikat berada dalam urutan yang benar. Sertifikat leaf harus selalu berada di urutan pertama, diikuti oleh sertifikat perantara lalu sertifikat root. Penjelasan lebih lanjut tentang hal ini dapat ditemukan di Memvalidasi rantai sertifikat.

      Pada contoh berikut, kita 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 video Modul Edge Microgateway - Mengonfigurasi TLS Southbound 1 arah dan 2 arah. Lihat Mengonfigurasi SSL di server Edge Microgateway untuk mengetahui informasi selengkapnya.

Jika masalah masih berlanjut, buka Mengumpulkan informasi diagnostik yang diperlukan.

Penyebab: Server Pengelolaan Apigee Edge 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 melakukan bootstrapping cluster, dan 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 ditampilkan 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 menampilkan sertifikat TLS yang ditandatangani sendiri.
  2. Kemungkinan besar administrator sistem Apigee Edge Anda telah memberikan sertifikat 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, hal tersebut adalah penyebab masalah ini.

Resolusi

  1. Bekerja samalah dengan tim yang memiliki server target untuk mendapatkan sertifikat TLS yang tepat dan ditandatangani oleh a Certificate Authority (CA) tepercaya.
  2. Jika hal tersebut tidak memungkinkan, lakukan hal berikut untuk mengizinkan sertifikat yang ditandatangani sendiri di Edge Microgateway.

  3. Tetapkan properti sistem untuk mengizinkan Edge Microgateway mempercayai semua sertifikat.
  4. Jika Anda menggunakan Docker, lihat Menggunakan CA yang tidak dipercaya oleh Node.js.
  5. Jika tidak, ekspor variabel lingkungan yang disebut NODE_EXTRA_CA_CERTS, yang mengarah ke file CA root.Hal ini didokumentasikan di situs resmi Node.js.

Mengumpulkan informasi diagnostik yang diperlukan

Jika masalah berlanjut meskipun setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut lalu hubungi Dukungan Apigee Edge:

  • File log: Folder default-nya adalah /var/tmp, tetapi dapat diganti dalam file config.yaml utama (logging > dir parameter). Sebaiknya ubah log > level menjadi info sebelum memberikan file log ke Dukungan Apigee Edge.
  • File konfigurasi: Konfigurasi utama Edge Microgateway berada dalam file YAML di folder Edge Microgateway default, $HOME/.edgemicro. Ada file konfigurasi default yang disebut default.yaml dan lalu satu untuk setiap lingkungan ORG-ENV-config.yaml. Upload file ini secara lengkap untuk organisasi dan lingkungan yang terpengaruh.

    Dokumen referensi

    Mengonfigurasi UI Edge untuk menggunakan TLS guna mengakses Edge API