¿Cómo puedo solucionar problemas relacionados con la cadena de certificados y los certificados autofirmados de Amazon API Gateway con los dominios personalizados y la TLS mutua habilitados?

Última actualización: 01/11/2022

Estoy usando la seguridad de la capa de transporte (TLS) mutua con Amazon API Gateway con un nombre de dominio personalizado. Recibo errores en la cadena de certificados o en los certificados autofirmados. ¿Cómo puedo solucionar este problema?

Descripción corta

Resolución

Para obtener una lista de mensajes de error específicos al invocar la API de Amazon API Gateway, ejecute un comando curl similar al siguiente:

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

Errores del cliente

“curl: (58) could not load PEM client certificate, OpenSSL error error:02001002:system library:fopen:No such file or directory, (no key found, wrong pass phrase, or wrong file format?” (“curl: (58) no se pudo cargar el certificado de cliente PEM, error de OpenSSL: error:02001002:system library:fopen: no existe dicho archivo o directorio, (no se ha encontrado la clave, la frase de paso es incorrecta o el formato de archivo es incorrecto”)

Este error significa que el archivo PEM tiene un nombre, una ubicación o un formato de archivo incorrectos. Por ejemplo, el formato del archivo de certificado almacenado localmente es .crt, pero en su lugar se utilizó el archivo .pem en la solicitud de la API. Para resolver este problema, asegúrese de que el certificado del cliente local tenga el formato y el nombre correctos.

“curl: (6) Could not resolve host: mtls.example.info” (“curl: (6) no se pudo resolver el host: mtls.example.info”)

El cliente no pudo resolver el nombre de dominio. Asegúrese de que el nombre de dominio y la configuración son correctos.

“url: (58) schannel: Failed to import cert file self-signed.pem, last error is 0x80092002” (“url: (58) schannel: no se pudo importar el archivo de certificados autofirmado .pem, el último error es 0x80092002”)

Este error significa que hay un problema con el archivo.pem del cliente local. Asegúrese de que el archivo .pem incluye el nombre y el formato correctos.

“curl: (58) unable to set private key file: 'self-signed.key' type PEM” (“curl: (58) no se pudoconfigurar el archivo de clave privada: “self-signed.key” tipo PEM”)

Este error significa que hay un problema con el archivo del cliente local. Asegúrese de que la clave privada proporcionada en la solicitud HTTP no falte y sea correcta.

Errores del servidor

“Acceso denegado. Motivo: certificado autofirmado”.

Compruebe que el certificado de cliente autofirmado en la solicitud de la API no se haya alterado ni dañado.

Los siguientes elementos deben coincidir exactamente:

  • El módulo de la clave privada (private.key) que se utiliza para firmar el certificado autofirmado en el almacén de confianza de Amazon S3 (bundle.crt obundle.pem).
  • El módulo del certificado del cliente pasado en la solicitud de API (client.crt).

Para comparar los dos módulos, ejecute los siguientes comandos de OpenSSL:

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

Nota: si quiere generar un valor hash más corto y facilitar la comparación, puede usar PIPE para enviar el módulo de salida a una función hash criptográfica. Por ejemplo: openssl sha1 .

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

Ejemplos de resultado de comandos válidos:

2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb

Para confirmar la integridad de los datos, compruebe que no haya habido ninguna modificación de datos en el contenido ejecutando el comando diff:

$ diff client.crt bundle.crt