Está a ver a documentação do Apigee e do Apigee Hybrid.
Veja a documentação do
Apigee Edge.
Sintoma
Os pedidos de API híbrida do Apigee falham com erros de ligação TLS. Normalmente, estes erros são reposições de ligação e falhas de handshake de alerta.
Mensagens de erro
As chamadas da API falham com TLS semelhante ao erro apresentado 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 resolução de problemas aplicáveis a |
---|---|---|
Segredo do Kubernetes de entrada em falta | O segredo do Kubernetes para org-envgroup está em falta no espaço de nomes do Apigee. |
Apigee Hybrid |
Certificado SSL com formatação incorreta | O certificado SSL indicado na secção virtualhosts do ficheiro de substituições tem um formato incorreto. | Apigee Hybrid |
As chaves SSL não correspondem ao certificado SSL | As chaves SSL não correspondem ao certificado SSL indicado na secção virtualhosts do ficheiro de substituições. | Apigee Hybrid |
Causa: secret do Kubernetes de entrada em falta
Diagnóstico
- Analise os registos dos pods
apigee-watcher
no espaço de nomes apigee e verifique se existem erros.
Pode observar um erro como o seguinte:
where: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 do Apigee HybridENV_GROUP
é o nome do grupo de ambientes
apigee-watcher
não conseguiu encontrar o segredo do Kubernetes para o grupo de ambientes mencionado acima da organização híbrida do Apigee. - Verifique se os segredos do Kubernetes estão realmente em falta através do 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
. Estas podem ter sido eliminadas por engano.
Resolução
Pode recriar os segredos do Kubernetes em falta com as informações dos ficheiros de chaves e certificados TLS
do ficheiro overrides.yaml
:
- Execute o seguinte comando para recriar os segredos em falta através do
Helm:
Execução de ensaio:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE \ --dry-run=server
Certifique-se de que inclui todas as definições apresentadas, incluindo
--atomic
para que a ação seja revertida em caso de falha.A sua instalação pode ou não ter sido configurada através de um ENV_GROUP_RELEASE_NAME diferente de ENV_GROUP. Para ver informações sobre as definições, consulte o artigo Instale o Apigee hybrid com o Helm.
Instale o gráfico:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE
- Verifique se os segredos do Kubernetes foram criados com êxito através do seguinte comando:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
O resultado deste comando deve mostrar:
MY_HYBRID_PROJECT-ENV_GROUP Opaque 2 7s
Se o problema persistir, aceda a Informações de diagnóstico obrigatórias.
Causa: certificado SSL formatado incorretamente
Diagnóstico
Primeiro, certifique-se de que o ficheiro de certificado é um ficheiro .PEM. Para verificar se o certificado SSL formatado corretamente foi carregado no apigee-ingressgateway
, siga estes passos.
Se configurou o TLS unidirecional com um par de certificado/chave, conforme descrito na
Opção 1: par de chave/certificado,
execute:
openssl x509 -in $CERT_FILE -text -noout
Um exemplo de resultado (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 configurou o TLS unidirecional através de 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
Um exemplo de resultado (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 o resultado 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 secção Resolução.
Resolução
Os erros podem variar consoante o erro de formato no ficheiro de certificado. Corrija o erro de certificado, se necessário.
Se o resultado mostrar o certificado em vez de um erro, considere o seguinte: Causa: as chaves SSL não correspondem ao certificado SSL.
Causa: as chaves SSL não correspondem ao certificado SSL
Diagnóstico
Se configurou o TLS unidirecional com um 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)
Um exemplo de resultado (sem erros):
diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem) <No output>
Se configurou o TLS unidirecional através do 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)
Um exemplo de resultado (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 o resultado 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. Consulte a secção de Resolução.
Resolução
Certifique-se de que está a fornecer as chaves privadas corretas e os respetivos certificados SSL. Corrija quaisquer problemas de chave privada e certificado SSL.
Se não vir qualquer resultado do comando, o certificado SSL e a chave SSL correspondem.
Informações de diagnóstico necessárias
Se o problema persistir depois de seguir as instruções nesta página, recolha as seguintes informações de diagnóstico e faculte-as ao apoio técnico do Apigee:
- O resultado detalhado
curl
completo em que vê o erro. - Capture um
tcpdump
na máquina em que está a ver os erros e partilhe-o removendo todas as informações confidenciais e endereços IP. - Tenha a topologia de rede completa e o fluxo de rede prontos após consultar a sua equipa de rede para partilhar com o apoio técnico do Apigee.