

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.

# Terminación de HTTPS en instancias EC2 que ejecutan Python
<a name="https-singleinstance-python"></a>

En los tipos de contenedores de Python que utilizan Apache HTTP Server con Web Server Gateway Interface (WSGI), puede utilizar un [archivo de configuración](ebextensions.md) para permitir que Apache HTTP Server use HTTPS.

Añada el siguiente fragmento al [archivo de configuración](ebextensions.md), sustituyendo los marcadores de posición de certificado y las claves privadas tal como se indica, y guarde el archivo en el directorio `.ebextensions` del paquete de código fuente. El archivo de configuración realiza las siguientes tareas:
+ La clave `packages` usa yum para instalar `mod_ssl`.
+ La clave `files` crea los siguientes archivos en la instancia:  
`/etc/httpd/conf.d/ssl.conf`  
Configura el servidor de Apache. Si la aplicación no se llama `application.py`, cambie el texto resaltado en el valor de `WSGIScriptAlias` por la ruta local de la aplicación. Por ejemplo, una aplicación de django podría estar en `django/wsgi.py`. La ubicación debe coincidir con el valor de la opción `WSGIPath` que estableció en el entorno.  
En función de los requisitos de la aplicación, es posible que tenga que agregar también otros directorios al parámetro **python-path**.   
`/etc/pki/tls/certs/server.crt`  
Crea el archivo de certificado en la instancia. *certificate file contents*Sustitúyalo por el contenido de su certificado.  
YAML usa la sangría uniforme. Utilice el mismo nivel de sangría cuando sustituya el contenido en el archivo de configuración de ejemplo y asegúrese de que el editor de texto utiliza espacios para la sangría, no tabuladores.
Si tiene certificados intermedios, inclúyalos en `server.crt` después del certificado del sitio.  

  ```
        -----BEGIN CERTIFICATE-----
    certificate file contents
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    first intermediate certificate
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    second intermediate certificate
    -----END CERTIFICATE-----
  ```  
`/etc/pki/tls/certs/server.key`  
Crea el archivo de clave privada en la instancia. *private key contents*Sustitúyalo por el contenido de la clave privada utilizada para crear la solicitud de certificado o el certificado autofirmado. 
+ La clave `container_commands` detiene el servicio httpd una vez que está todo configurado para que el servicio use el nuevo archivo `https.conf` y certificado.

**nota**  
El ejemplo solo funciona en entornos que utilizan la plataforma [Python](create-deploy-python-container.md).

**Example .ebextensions/https-instance.config**  

```
packages:
  yum:
    mod_ssl: []
    
files:
  /etc/httpd/conf.d/ssl.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule wsgi_module modules/mod_wsgi.so
      WSGIPythonHome /var/app/venv/staging-LQM1lest
      WSGISocketPrefix run/wsgi
      WSGIRestrictEmbedded On
      Listen 443
      <VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile "/etc/pki/tls/certs/server.crt"
        SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
        
        Alias /static/ /var/app/current/static/
        <Directory /var/app/current/static>
        Order allow,deny
        Allow from all
        </Directory>
        
        WSGIScriptAlias / /var/app/current/application.py
        
        <Directory /var/app/current>
        Require all granted
        </Directory>
        
        WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \
          python-path=/var/app/current \
          python-home=/var/app/venv/staging-LQM1lest \
          home=/var/app/current \
          user=webapp \
          group=webapp
        WSGIProcessGroup wsgi-ssl
        
      </VirtualHost>
      
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
       
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
      
container_commands:
  01killhttpd:
    command: "killall httpd"
  02waitforhttpddeath:
    command: "sleep 3"
```

**nota**  
Evite confirmar un archivo de configuración que contenga su clave privada en el control de código fuente. Una vez comprobada la configuración y confirmado su funcionamiento, almacene la clave privada en Amazon S3 y modifique la configuración para descargarla durante la implementación. Para obtener instrucciones, consulte [Almacenamiento seguro de claves privadas en Amazon S3](https-storingprivatekeys.md).

**Nota para los entornos de Amazon Linux 2023**  
En Amazon Linux 2023, `mod_wsgi` debe instalarse por separado, ya que no está disponible en los repositorios de paquetes. Para obtener instrucciones de instalación, consulte [mod\$1wsgi](https://pypi.org/project/mod-wsgi/) en PyPI.

En un entorno de instancia única, también debe modificar el grupo de seguridad de la instancia para permitir el tráfico en el puerto 443. El siguiente archivo de configuración recupera el ID del grupo de seguridad mediante una CloudFormation [función](ebextensions-functions.md) y le agrega una regla.

**Example .ebextensions/ .config https-instance-single**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

[Para un entorno con equilibrio de carga, se configura el equilibrador de carga para que el [tráfico seguro pase intacto o para que lo descifre y vuelva a cifrar para cifrarlo](https-tcp-passthrough.md).](configuring-https-endtoend.md) end-to-end