Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.
Sintoma
As solicitações da API Apigee híbrida falham com erros de conexão TLS. Esses erros geralmente são redefinições de conexão e falhas de handshake de alerta.
Mensagens de erro
As chamadas de API falham com TLS semelhante ao erro mostrado abaixo, ou outros erros, mas não idênticos:
* 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
Causas possíveis
Causa | Descrição | Instruções de solução de problemas aplicáveis para |
---|---|---|
Secret do Kubernetes do Ingress ausente | O secret do Kubernetes para org-envgroup não está no namespace da Apigee. |
Apigee híbrido |
Certificado SSL formatado incorretamente | O certificado SSL apontado para a seção virtualhosts do arquivo de substituições está formatado incorretamente. | Apigee híbrido |
As chaves SSL não correspondem ao certificado SSL | As chaves SSL não correspondem ao certificado SSL apontado na seção virtualhosts do arquivo de modificações. | Apigee híbrido |
Causa: secret do Kubernetes de entrada ausente
Diagnóstico
- Analise os registros dos pods
apigee-watcher
no namespace da Apigee e confira se há erros.
Talvez você veja um erro como este:
em que:NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP" in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
MY_HYBRID_PROJECT
é o nome da organização da Apigee híbrida.ENV_GROUP
é o nome do grupo de ambiente
apigee-watcher
não encontrou o secret do K8S para o grupo de ambiente mencionado acima da organização da Apigee híbrida. - Verifique se os secrets K8S estão realmente ausentes usando o seguinte comando:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
<no output>
Este exemplo não mostra secrets do Kubernetes paraMY_HYBRID_PROJECT-ENV_GROUP
. Elas podem ter sido excluídas por engano.
Resolução
É possível recriar os secrets ausentes do Kubernetes usando as informações dos arquivos de chaves e certificados TLS
do arquivo overrides.yaml
:
- Execute o comando a seguir para recriar as chaves secretas ausentes:
apigeectl apply -f overrides/overrides.yaml --settings virtualhosts
A saída do comando acima deve mostrar que o secret foi criado:
secret/MY_HYBRID_PROJECT-ENV_GROUP created
- Verifique se os secrets do Kubernetes foram criados usando o comando a seguir:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
A saída desse comando vai mostrar:
MY_HYBRID_PROJECT-ENV_GROUP Opaque 2 7s
Se o problema persistir, acesse Precisa de informações de diagnóstico.
Causa: certificado SSL formatado incorretamente
Diagnóstico
Primeiro, verifique se o arquivo do certificado é .PEM. Para verificar se o certificado SSL formatado corretamente foi carregado no apigee-ingressgateway
, siga estas etapas.
Se você configurou o TLS unidirecional usando um par de certificado/chave, conforme descrito em
Opção 1: par de chave/certificado,
executar:
openssl x509 -in $CERT_FILE -text -noout
Exemplo de saída (sem erros):
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
Se você configurou o TLS unidirecional usando um secret do Kubernetes, conforme descrito na Opção 2: secret do Kubernetes, execute:
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
Exemplo de saída (sem erros):
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
Se a saída do comando acima for semelhante a
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:
Para erros como
error loading certificates 8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line
consulte a seção Resolução.
Resolução
Os erros podem variar dependendo do erro de formato do arquivo de certificado. Corrija o erro de certificado, se necessário.
Se a saída mostrar o certificado em vez de um erro, considere Causa: as chaves SSL não correspondem ao certificado SSL.
Causa: as chaves SSL não correspondem ao certificado SSL
Diagnóstico
Se você configurou o TLS unidirecional usando o par de certificado/chave, conforme descrito na Opção 1: par de chave/certificado, execute:
diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)
Exemplo de saída (sem erros):
diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem)
<No output>
Se você configurou o TLS unidirecional usando o secret do Kubernetes, conforme descrito na Opção 2: secret do Kubernetes, execute:
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)
Exemplo de saída (sem erros):
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>
Se a saída do comando acima mostrar um erro como:
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
as chaves SSL não correspondem ao certificado SSL e consulte a seção Resolução.
Resolução
Verifique se você está fornecendo as chaves privadas corretas e os certificados SSL correspondentes. Corrija qualquer problema com a chave privada e o certificado SSL.
Se você não vir nenhuma saída do comando, o certificado SSL e a chave SSL correspondem.
É necessário coletar informações de diagnóstico
Se o problema persistir depois que você seguir as instruções nesta página, colete as seguintes informações de diagnóstico e envie-as ao suporte da Apigee:
- Toda a saída detalhada
curl
em que você vê o erro. - Capture um
tcpdump
na máquina em que você está vendo os erros e compartilhe-o removendo todas as informações sensíveis e endereços IP. - Deixe toda a topologia e o fluxo de rede prontos após consultar sua equipe de rede para serem compartilhados com o suporte da Apigee.