Panggilan API gagal dengan error TLS

Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat Dokumentasi Apigee Edge.

Gejala

Permintaan API hybrid Apigee gagal dengan TLS error koneksi. Error ini biasanya berupa reset koneksi dan peringatan kegagalan handshake.

Pesan error

Panggilan API gagal dengan TLS yang serupa dengan error yang ditunjukkan di bawah, atau error lainnya yang tidak sama:

* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
* Closing connection 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
* (304) (OUT), TLS handshake, Client hello (1):
* Recv failure: Connection reset by peer
* LibreSSL/3.3.6: error:02FFF036:system library:func(4095):Connection reset by peer
* Closing connection
curl: (35) Recv failure: Connection reset by peer
* (304) (OUT), TLS handshake, Client hello (1):
* LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure
* Closing connection
curl: (35) LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure

Kemungkinan penyebab

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Rahasia Kubernetes Ingress tidak ada Rahasia Kubernetes untuk org-envgroup tidak ada di Apigee namespace. Apigee hybrid
Format sertifikat SSL salah Sertifikat SSL yang ditunjuk di bagian {i>virtualhosts<i} dari file yang diganti adalah tidak diformat dengan benar. Apigee hybrid
Kunci SSL tidak cocok dengan sertifikat SSL Kunci SSL tidak cocok dengan sertifikat SSL yang ditunjukkan di bagian virtualhosts file pengganti. Apigee hybrid

Penyebab: Tidak ada secret Kubernetes Ingress

Diagnosis

  1. Menganalisis log pod apigee-watcher di namespace apigee dan melihat apakah ada adanya error.

    Anda mungkin melihat error seperti berikut:
    NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP"
    in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
    dalam hal ini:
    • MY_HYBRID_PROJECT adalah nama organisasi hybrid Apigee
    • ENV_GROUP adalah nama grup lingkungan
    Error di atas menunjukkan bahwa apigee-watcher tidak dapat menemukan rahasia Kubernetes untuk grup lingkungan dari organisasi hybrid Apigee yang disebutkan di atas.
  2. Pastikan bahwa secret Kubernetes benar-benar tidak ada dengan menggunakan perintah berikut:
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
    <no output>
    Contoh ini tidak menunjukkan secret Kubernetes untuk MY_HYBRID_PROJECT-ENV_GROUP. File ini mungkin saja telah dihapus secara keliru.

Resolusi

Anda dapat membuat ulang secret Kubernetes yang hilang menggunakan sertifikat TLS dan informasi file kunci dari file overrides.yaml:

  1. Jalankan perintah berikut untuk membuat ulang secret yang tidak ada:
    apigeectl apply -f overrides/overrides.yaml --settings virtualhosts

    Output dari perintah di atas akan menunjukkan bahwa secret dibuat:

    secret/MY_HYBRID_PROJECT-ENV_GROUP created
  2. Pastikan secret Kubernetes berhasil dibuat menggunakan perintah berikut:
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP

    Output perintah ini akan menampilkan:

    MY_HYBRID_PROJECT-ENV_GROUP                   Opaque                2      7s

Jika masalah berlanjut, buka Harus Dikumpulkan Informasi Diagnostik.

Penyebab: Format sertifikat SSL salah

Diagnosis

Pertama, pastikan file sertifikat adalah file .PEM. Untuk memeriksa apakah format yang benar Sertifikat SSL dimuat ke apigee-ingressgateway, ikuti langkah-langkah berikut.

Jika Anda telah mengonfigurasi TLS satu arah menggunakan pasangan sertifikat/kunci seperti yang dijelaskan di Opsi 1: pasangan kunci/sertifikat, jalankan:

openssl x509 -in $CERT_FILE -text -noout

Contoh output (tanpa error):

Certificate:
  Data:
    Version: 1 (0x0)
    Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
    Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN
    Validity
      Not Before: Dec 18 09:40:23 2023 GMT
      Not After : May  1 09:40:23 2025 GMT
    Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com
    Subject Public Key Info:
      Public Key Algorithm: rsaEncryption
        RSA Public-Key: (2048 bit)
        Modulus:
          Trimmed
        Exponent: 65537 (0x10001)
    Signature Algorithm: sha1WithRSAEncryption
          Trimmed

Jika Anda telah mengonfigurasi TLS satu arah menggunakan secret Kubernetes seperti yang dijelaskan di Opsi 2: Rahasia Kubernetes, jalankan:

kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d > certfile ;
openssl x509 -in certfile -text -noout

kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -text

Contoh output (tanpa error):

Certificate:
  Data:
    Version: 1 (0x0)
    Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
    Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN
    Validity
      Not Before: Dec 18 09:40:23 2023 GMT
      Not After : May  1 09:40:23 2025 GMT
    Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com
    Subject Public Key Info:
      Public Key Algorithm: rsaEncryption
        RSA Public-Key: (2048 bit)
        Modulus:
          Trimmed
        Exponent: 65537 (0x10001)
  Signature Algorithm: sha1WithRSAEncryption
          Trimmed

Jika {i>output<i} dari perintah di atas terlihat seperti

unable to load certificate
136613728412992:error:0D078095:asn1 encoding routines:asn1_item_embed_d2i:sequence not constructed:../crypto/asn1/tasn_dec.c:321:Type=X509
136613728412992:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:../crypto/pem/pem_oth.c:33:

Untuk error seperti

error loading certificates
8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line

lihat bagian Resolusi.

Resolusi

Error tersebut dapat berbeda-beda bergantung pada error format dalam file sertifikat. Perbaiki error sertifikat jika perlu.

Jika {i>output<i} menunjukkan sertifikat, bukan error, pertimbangkan Penyebab: Kunci SSL tidak cocok dengan sertifikat SSL.

Penyebab: Kunci SSL tidak cocok dengan sertifikat SSL

Diagnosis

Jika Anda telah mengonfigurasi TLS satu arah menggunakan pasangan sertifikat/kunci seperti yang dijelaskan di Opsi 1: pasangan kunci/sertifikat, jalankan:

diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)

Contoh output (tanpa error):

diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem)
<No output>

Jika Anda telah mengonfigurasi TLS satu arah menggunakan secret Kubernetes seperti yang dijelaskan di Opsi 2: Rahasia Kubernetes, jalankan:

diff -q <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)

Contoh output (tanpa error):

diff -q <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)
<No output>

Jika output dari perintah di atas menampilkan error seperti:

unable to load Private Key
133504499987776:error:09091064:PEM routines:PEM_read_bio_ex:bad base64 decode:../crypto/pem/pem_lib.c:949:
Files /dev/fd/63 and /dev/fd/62 differ

maka Kunci SSL tidak cocok dengan sertifikat SSL dan lihat Resolusi.

Resolusi

Pastikan Anda memberikan kunci pribadi yang benar beserta kunci yang sesuai Sertifikat SSL. Perbaiki semua masalah kunci pribadi dan sertifikat SSL.

Jika Anda tidak melihat output perintah apa pun, berarti sertifikat SSL dan kunci SSL cocok.

Harus Mengumpulkan Informasi Diagnostik

Jika masalah berlanjut setelah mengikuti petunjuk pada halaman ini, kumpulkan informasi diagnostik berikut dan memberikannya kepada Dukungan Apigee:

  1. Seluruh output panjang curl tempat Anda melihat error.
  2. Ambil gambar tcpdump di komputer tempat Anda melihat error dan bagikan dengan menghapus semua informasi sensitif dan alamat IP.
  3. Siapkan seluruh topologi jaringan dan aliran jaringan setelah berkonsultasi dengan jaringan Anda akan dibagikan kepada Dukungan Apigee.