Generar y configurar un certificado SSL para la autenticación de backend - Amazon API Gateway

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Generar y configurar un certificado SSL para la autenticación de backend

Puede utilizar API Gateway para generar un certificado SSL y usar su clave pública en el backend para verificar que las solicitudes HTTP a su sistema backend proceden de API Gateway. Esto permite que el backend HTTP controle y acepte únicamente las solicitudes procedentes de Amazon API Gateway, incluso si el backend está disponible públicamente.

nota

Puesto que algunos servidores backend no son compatibles con la autenticación SSL de los clientes de la manera en que lo es API Gateway, podrían devolver un error de certificado SSL. Para obtener una lista de servidores del backend incompatibles, consulte Notas importantes de Amazon API Gateway.

Los certificados SSL generados por API Gateway son autofirmados y solo la clave pública de un certificado está visible en la consola de API Gateway o a través de las API.

Generar un certificado cliente mediante la consola de API Gateway

  1. Abra la consola de Amazon API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija una API de REST.

  3. En el panel de navegación principal, elija Certificados de cliente.

  4. En el panel Certificados de cliente, elija Generar certificado.

  5. (Opcional) En Description (Descripción), introduzca una descripción.

  6. Elija Generar certificado para generar el certificado. API Gateway genera un certificado nuevo y devuelve el GUID del nuevo certificado junto con la clave pública codificada en PEM.

Ahora está listo para configurar una API para que utilice el certificado.

Configurar una API para que use certificados SSL

En estas instrucciones, se presupone que usted ya ha completado Generar un certificado cliente mediante la consola de API Gateway.

  1. En la consola de API Gateway, cree o abra una API para la que desee utilizar el certificado cliente. Asegúrese de que la API se ha implementado en una etapa.

  2. En el panel de navegación principal, elija Etapas.

  3. En la sección Detalles de la etapa, elija Editar.

  4. En el Certificado de cliente, seleccione un certificado.

  5. Elija Guardar cambios.

    Si la API se ha implementado anteriormente en la consola de API Gateway, tendrá que volver a implementarla para que los cambios surtan efecto. Para obtener más información, consulte Reimplementación de una API de REST en una etapa.

Una vez seleccionado y guardado un certificado para la API, API Gateway utilizará el certificado para todas las llamadas a las integraciones HTTP de la API.

Test Invoke para verificar la configuración del certificado cliente

  1. Elija un método de API. Elija la pestaña Test (Prueba). Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña Pruebas.

  2. En el Certificado de cliente, seleccione un certificado.

  3. Seleccione Test (Probar).

API Gateway presentará el certificado SSL elegido al backend HTTP para autenticar la API.

Configuración del servidor HTTPS backend para verificar el certificado cliente

En estas instrucciones, se presupone que ya ha completado Generar un certificado cliente mediante la consola de API Gateway y ha descargado una copia del certificado cliente. Puede descargar un certificado de cliente mediante una llamada a clientcertificate:by-id de la API REST de API Gateway o a get-client-certificate de la AWS CLI.

Antes de configurar un servidor HTTPS backend para verificar el certificado SSL cliente de API Gateway, debe haber obtenido la clave privada codificada en PEM y un certificado de servidor proporcionado por una entidad de certificación de confianza.

Si el nombre de dominio del servidor es myserver.mydomain.com, el valor de CNAME del certificado del servidor debe ser myserver.mydomain.com o *.mydomain.com.

Las entidades de certificación admitidas incluyen Let's Encrypt o alguna de las Entidades de certificación compatibles con API Gateway para las integraciones HTTP y Proxy HTTP.

Como ejemplo, supongamos que el archivo de certificado de cliente es apig-cert.pem y los archivos de clave privada del servidor y certificado son server-key.pem y server-cert.pem, respectivamente. Para un servidor Node.js en el backend, puede configurar el servidor de manera similar a la siguiente:

var fs = require('fs'); var https = require('https'); var options = { key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem'), ca: fs.readFileSync('apig-cert.pem'), requestCert: true, rejectUnauthorized: true }; https.createServer(options, function (req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(443);

Para una aplicación node-express, puede usar los módulos client-certificate-auth para autenticar las solicitudes cliente con certificados codificados en PEM.

Para el resto de servidores HTTPS, consulte la documentación del servidor.

Rotar un certificado cliente que va a caducar

El certificado cliente generado por API Gateway es válido durante 365 días. Debe rotar el certificado antes de que caduque un certificado cliente en una etapa de API para evitar tiempos de inactividad de la API. Puede verificar la fecha de vencimiento del certificado mediante una llamada a clientCertificate:by-id de la API REST de API Gateway o al comando AWS CLI de get-client-certificate y mediante la inspección de la propiedad expirationDate devuelta.

Para rotar un certificado de cliente, haga lo siguiente:

  1. Genere un nuevo certificado de cliente mediante una llamada a clientcertificate:generate de la API REST de API Gateway o al comando de la AWS CLI generate-client-certificate. En este tutorial, suponemos que el nuevo ID del certificado cliente es ndiqef.

  2. Actualice el servidor backend para incluir el nuevo certificado cliente. No elimine el certificado cliente existente todavía.

    Algunos servidores pueden requerir reiniciar para finalizar la actualización. Consulte la documentación del servidor para saber si debe reiniciar el servidor durante la actualización.

  3. Actualice la etapa de la API de forma que utilice el nuevo certificado cliente llamando a stage:update de la API REST de API Gateway, con el nuevo ID de certificado cliente (ndiqef):

    PATCH /restapis/{restapi-id}/stages/stage1 HTTP/1.1 Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20170603T200400Z Authorization: AWS4-HMAC-SHA256 Credential=... { "patchOperations" : [ { "op" : "replace", "path" : "/clientCertificateId", "value" : "ndiqef" } ] }

    o llamando al comando de la CLI update-stage.

  4. Actualice el servidor backend para eliminar el certificado antiguo.

  5. Elimine el certificado antiguo de API Gateway llamando al comando clientcerfiticate:delete de la API REST de API Gateway y especificando el clientCertificateId (a1b2c3) del certificado antiguo:

    DELETE /clientcertificates/a1b2c3

    o llamando al comando de la CLI delete-client-certificate:

    aws apigateway delete-client-certificate --client-certificate-id a1b2c3

Para rotar un certificado de cliente en la consola para una API implementada anteriormente, haga lo siguiente:

  1. En el panel de navegación principal, elija Certificados de cliente.

  2. En el panel Certificados de cliente, elija Generar certificado.

  3. Abra la API para la que desee utilizar el certificado cliente.

  4. Elija Stages (Etapas) en la API seleccionada y, a continuación, elija una etapa.

  5. En la sección Detalles de la etapa, elija Editar.

  6. En Certificado de cliente, seleccione el nuevo certificado.

  7. Para guardar la configuración, elija Guardar cambios.

    Tiene que volver a implementar la API para que los cambios surtan efecto. Para obtener más información, consulte Reimplementación de una API de REST en una etapa.