

# Generación y configuración de un certificado SSL para la autenticación de backend en API Gateway
<a name="getting-started-client-side-ssl-authentication"></a>

 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](api-gateway-known-issues.md). 

 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. 

**Topics**
+ [Generar un certificado cliente mediante la consola de API Gateway](#generate-client-certificate)
+ [Configurar una API para que use certificados SSL](#configure-api)
+ [Test Invoke para verificar la configuración del certificado cliente](#test-invoke)
+ [Configuración del servidor HTTPS backend para verificar el certificado cliente](#certificate-validation)
+ [Rotar un certificado cliente que va a caducar](#certificate-rotation)
+ [Entidades de certificación compatibles con API Gateway para las integraciones HTTP y Proxy HTTP en API Gateway](api-gateway-supported-certificate-authorities-for-http-endpoints.md)

## Generar un certificado cliente mediante la consola de API Gateway
<a name="generate-client-certificate"></a>

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

1. Elija una API de Rest o de WebSocket.

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

1. En el panel **Certificados de cliente**, elija **Generar certificado**.

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

1. 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
<a name="configure-api"></a>

En estas instrucciones, se presupone que usted ya ha completado [Generar un certificado cliente mediante la consola de API Gateway](#generate-client-certificate).

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

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

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

1. En el **Certificado de cliente**, seleccione un certificado.

1. Seleccione **Save changes (Guardar cambios)**.

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
<a name="test-invoke"></a>

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

1. En el **Certificado de cliente**, seleccione un certificado. 

1. Seleccione **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
<a name="certificate-validation"></a>

En estas instrucciones, se presupone que ya ha completado [Generar un certificado cliente mediante la consola de API Gateway](#generate-client-certificate) y ha descargado una copia del certificado cliente. Puede descargar un certificado de cliente mediante una llamada a [https://docs.aws.amazon.com/apigateway/latest/api/API_GetClientCertificate.html](https://docs.aws.amazon.com/apigateway/latest/api/API_GetClientCertificate.html) de la API REST de API Gateway o a [https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-client-certificate.html](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-client-certificate.html) 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](https://letsencrypt.org/) o alguna de las [Entidades de certificación compatibles con API Gateway para las integraciones HTTP y Proxy HTTP en API Gateway](api-gateway-supported-certificate-authorities-for-http-endpoints.md). 

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](http://expressjs.com/), puede usar los módulos [client-certificate-auth](https://www.npmjs.com/package/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
<a name="certificate-rotation"></a>

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.

### Rotación de un certificado cliente que va a caducar mediante la Consola de administración de AWS
<a name="certification-rotation-console"></a>

El siguiente procedimiento muestra cómo rotar un certificado de cliente en la consola para una API implementada anteriormente.

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

1. En el panel **Certificados de cliente**, elija **Generar certificado**.

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

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

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

1. En **Certificado de cliente**, seleccione el nuevo certificado.

1. Para guardar la configuración, elija **Guardar cambios**.

### Rotación de un certificado de cliente que va a caducar mediante la AWS CLI
<a name="certificate-rotation-cli"></a>

 Puede verificar la fecha de vencimiento del certificado mediante una llamada a [clientCertificate:by-id](https://docs.aws.amazon.com/apigateway/latest/api/API_GetClientCertificate.html) de la API de REST de API Gateway o al comando AWS CLI de [get-client-certificate](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-client-certificate.html) y mediante la inspección de la propiedad [expirationDate](https://docs.aws.amazon.com/apigateway/latest/api/API_ClientCertificate.html#expirationDate) devuelta.

Para rotar un certificado de cliente, haga lo siguiente:

1. Genere un nuevo certificado de cliente mediante una llamada a [clientcertificate:generate](https://docs.aws.amazon.com/apigateway/latest/api/API_GenerateClientCertificate.html) de la API REST de API Gateway o al comando de la AWS CLI [generate-client-certificate](https://docs.aws.amazon.com/cli/latest/reference/apigateway/generate-client-certificate.html). En este tutorial, suponemos que el nuevo ID del certificado cliente es `ndiqef`.

1.  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.

1.  Actualice la etapa de la API de forma que utilice el nuevo certificado cliente llamando a [stage:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html) 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"
       }
     ]
   }
   ```

   También puede usar el comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html).

   Si está utilizando una API de WebSocket, use el comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-stage.html) de `apigatewayv2`.

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

1.  Elimine el certificado antiguo de API Gateway llamando al comando [clientcerfiticate:delete](https://docs.aws.amazon.com/apigateway/latest/api/API_DeleteClientCertificate.html) de la API REST de API Gateway y especificando el clientCertificateId (`a1b2c3`) del certificado antiguo:

   ```
   DELETE /clientcertificates/a1b2c3 
   ```

   También puede llamar al comando [delete-client-certificate](https://docs.aws.amazon.com/cli/latest/reference/apigateway/delete-client-certificate.html):

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