Como posso solucionar problemas de cadeia de certificados e certificados autoassinados para o Amazon API Gateway com domínios personalizados e TLS mútuo habilitado?

Data da última atualização: 01/11/2022

Estou usando a autenticação mútua Transport Layer Security (TLS) com o Amazon API Gateway com um nome de domínio personalizado. Estou recebendo erros na cadeia de certificados ou no certificado autoassinado. Como posso solucionar esse problema?

Breve descrição

Resolução

Para obter uma lista de mensagens de erro específicas ao invocar sua API do Amazon API Gateway, execute um comando curl semelhante ao seguinte:

$ curl -v https://mtls.example.info/test-apigw-mtls --key self-signed.key --cert self-signed.pem:"example"

Erros do cliente

“curl: (58) não foi possível carregar o certificado do cliente PEM, erro OpenSSL error:02001002:system library:fopen:Arquivo ou diretório inexistente, (nenhuma chave encontrada, senha errada ou formato de arquivo errado?”

Esse erro significa que o arquivo PEM tem o nome, a localização ou o formato de arquivo incorreto. Por exemplo, o formato do arquivo de certificado armazenado localmente é.crt, mas o arquivo .pem foi usado na solicitação da API. Para resolver isso, certifique-se de que o certificado do cliente local tenha o formato e o nome corretos.

“curl: (6) Não foi possível resolver o host: mtls.example.info”

O cliente não conseguiu resolver o nome de domínio. Verifique se o nome de domínio e a configuração estão corretos.

“url: (58) schannel: Falha ao importar arquivo de certificado autoassinado.pem, o último erro é 0x80092002”

Esse erro significa que há um problema com o arquivo .pem do cliente local. Certifique-se de que o arquivo .pem inclua o nome e o formato corretos.

“curl: (58) não é possível definir o arquivo de chave privada: 'self-signed.key' do tipo PEM”

Esse erro significa que há um problema com o arquivo do cliente local. Certifique-se de que a chave privada fornecida na solicitação HTTP não esteja ausente e esteja correta.

Erros do servidor

“Acesso negado. Motivo: certificado autoassinado.”

Verifique se o certificado de cliente autoassinado na solicitação da API não foi alterado nem está corrompido.

Os seguintes itens devem corresponder exatamente:

  • O módulo da chave privada (private.key) usado para assinar o certificado autoassinado no truststore no Amazon S3 (bundle.crt ou bundle.pem).
  • O módulo do certificado do cliente passado na solicitação da API (client.crt).

Para comparar os dois módulos, execute os seguintes comandos OpenSSL:

$ openssl rsa -noout -modulus -in private.key
$ openssl x509 -noout -modulus -in bundle.crt
$ openssl x509 -noout -modulus -in client.crt

Observação: para produzir um valor de hash mais curto a fim de facilitar a comparação, você pode usar PIPE para enviar o módulo de saída em uma função de hash criptográfica. Por exemplo: openssl sha1 .

$ openssl [operation] -noout -modulus -in [data] | openssl sha1

Exemplo de saídas de comando válidas:

2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb

Para confirmar a integridade dos dados, verifique se não houve nenhuma modificação de dados no nível do conteúdo executando o seguinte comando diff:

$ diff client.crt bundle.crt