

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Terminazione di HTTPS su istanze EC2 che eseguono Python
<a name="https-singleinstance-python"></a>

Per i tipi di container Python che utilizzano Apache HTTP Server con l'interfaccia WSGI (Web Server Gateway Interface), devi utilizzare un [file di configurazione](ebextensions.md) per consentire ad Apache HTTP Server di utilizzare HTTPS.

Aggiungi il seguente frammento al [file di configurazione](ebextensions.md), sostituendo i segnaposto di certificato e chiave privata come indicato, quindi salvalo nella directory `.ebextensions` del bundle di origine. Il file di configurazione esegue le seguenti attività:
+ La chiave `packages` utilizza yum per installare `mod_ssl`.
+ La chiave `files` crea i seguenti file sull'istanza:  
`/etc/httpd/conf.d/ssl.conf`  
Configura il server Apache. Se la tua applicazione non è denominata `application.py`, sostituisci il testo evidenziato nel valore per `WSGIScriptAlias` con il percorso locale alla tua applicazione. Ad esempio, un'applicazione django può essere in `django/wsgi.py`. La posizione deve corrispondere al valore dell'opzione `WSGIPath` impostata per il tuo ambiente.  
A seconda dei requisiti dell'applicazione, potrebbe essere necessario aggiungere anche altre directory al parametro **python-path**.   
`/etc/pki/tls/certs/server.crt`  
Crea il file di certificato sull'istanza. Sostituiscilo *certificate file contents* con il contenuto del certificato.  
YAML si basa sulla coerenza del rientro. Utilizza lo stesso livello di rientro quando sostituisci del contenuto in un file di configurazione di esempio e assicurati che il tuo editor di testo utilizzi gli spazi e non le tabulazioni per il rientro.
Se disponi di certificati intermedi, includili in `server.crt` dopo il certificato del sito.  

  ```
        -----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 il file della chiave privata sull'istanza. Sostituiscilo *private key contents* con il contenuto della chiave privata utilizzata per creare la richiesta di certificato o il certificato autofirmato. 
+ La chiave `container_commands` interrompe il servizio httpd dopo che tutto è stato configurato in modo che il servizio utilizzi il nuovo certificato e il nuovo file `https.conf`.

**Nota**  
L'esempio funziona solo in ambienti che utilizzano la piattaforma [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**  
Non utilizzare un file di configurazione che contiene la tua chiave per il controllo delle origini. Una volta eseguito il test e verificato che la configurazione funzioni, archivia la tua chiave privata in Amazon S3 e modifica la configurazione per scaricarla durante la distribuzione. Per istruzioni, consulta [Archiviazione di chiavi private in modo sicuro in Amazon S3](https-storingprivatekeys.md).

**Nota per gli ambienti Amazon Linux 2023**  
Su Amazon Linux 2023, `mod_wsgi` deve essere installato separatamente in quanto non è disponibile negli archivi dei pacchetti. Per le istruzioni di installazione, vedi [mod\$1wsgi su PyPI](https://pypi.org/project/mod-wsgi/).

In un ambiente con una singola istanza, devi anche modificare il gruppo di sicurezza dell'istanza per consentire il traffico sulla porta 443. Il seguente file di configurazione recupera l'ID del gruppo di sicurezza utilizzando una CloudFormation [funzione](ebextensions-functions.md) e vi aggiunge una regola.

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

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

[Per un ambiente con bilanciamento del carico, è possibile configurare il sistema di bilanciamento del carico in modo da far [passare il traffico sicuro](https-tcp-passthrough.md) in modo inalterato oppure decriptarlo e ricrittografarlo per la crittografia.](configuring-https-endtoend.md) end-to-end