

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

# Applicazione di una versione TLS minima nel AWS SDK per C\+\+
<a name="enforcing-tls"></a>

Per aumentare la sicurezza durante la comunicazione con AWS i servizi, è necessario configurare SDK for C\+\+ per utilizzare TLS 1.2 o versione successiva. È consigliabile utilizzare TLS 1.3.

 AWS SDK per C\+\+ È una libreria multipiattaforma. Puoi creare ed eseguire la tua applicazione sulle piattaforme che desideri. Piattaforme diverse potrebbero dipendere da diversi client HTTP sottostanti.

[Per impostazione predefinita, macOS, Linux, Android e altre piattaforme non Windows utilizzano libcurl.](https://curl.haxx.se/libcurl/) Se la versione di libcurl è successiva alla 7.34.0, TLS 1.0 è la versione minima utilizzata dai client HTTP sottostanti.

Per Windows, la libreria predefinita è. [WinHttp](https://docs.microsoft.com/en-us/windows/win32/winhttp) Windows decide il protocollo effettivo da utilizzare tra i protocolli TLS 1.0, TLS 1.1, TLS 1.2 e TLS 1.3 disponibili. [Win INet](https://docs.microsoft.com/en-us/windows/win32/wininet) e [IXMLHttpRequest2](https://docs.microsoft.com/en-us/windows/win32/api/_ixhr2) sono le altre due opzioni disponibili in Windows. È possibile configurare l'applicazione per sostituire la libreria predefinita durante CMake e in fase di esecuzione. Per questi due client HTTP, Windows decide anche il protocollo sicuro.

Fornisce AWS SDK per C\+\+ inoltre la flessibilità necessaria per sovrascrivere i client HTTP predefiniti. Ad esempio, puoi applicare libcurl o utilizzare i client HTTP che desideri utilizzando una fabbrica di client HTTP personalizzata. Quindi, per utilizzare TLS 1.2 come versione minima, devi conoscere la libreria client HTTP che stai utilizzando.

## Applica una versione TLS specifica con libcurl su tutte le piattaforme
<a name="enforce-tls-1-2-with-libcurl-on-all-platforms"></a>

Questa sezione presuppone che AWS SDK per C\+\+ stia utilizzando libcurl come dipendenza per il supporto del protocollo HTTP. Per specificare in modo esplicito la versione TLS, è necessaria una versione minima di libcurl 7.34.0. Inoltre, potrebbe essere necessario modificare il codice sorgente di e quindi ricostruirlo. AWS SDK per C\+\+ 

La procedura seguente mostra come eseguire queste operazioni.

### Per applicare TLS 1.2 con libcurl
<a name="to-enforce-tls-1-2-with-libcurl"></a>

1. Verifica che l'installazione di libcurl sia almeno la versione 7.34.0.

1. Scarica il codice sorgente per il modulo. AWS SDK per C\+\+ [GitHub](http://github.com/aws/aws-sdk-cpp)

1. Apri `aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp` e trova le seguenti righe di codice.

   ```
   #if LIBCURL_VERSION_MAJOR >= 7
   #if LIBCURL_VERSION_MINOR >= 34
   curl_easy_setopt(connectionHandle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
   #endif //LIBCURL_VERSION_MINOR
   #endif //LIBCURL_VERSION_MAJOR
   ```

1. Se necessario, modificate l'ultimo parametro nella chiamata di funzione come segue.

   ```
   #if LIBCURL_VERSION_MAJOR >= 7
   #if LIBCURL_VERSION_MINOR >= 34
   curl_easy_setopt(connectionHandle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
   #endif //LIBCURL_VERSION_MINOR
   #endif //LIBCURL_VERSION_MAJOR
   ```

1. Se hai apportato le modifiche precedenti al codice, compila e installalo AWS SDK per C\+\+ seguendo le istruzioni riportate in [https://github.com/aws/aws-sdk-cpp\#. building-the-sdk](https://github.com/aws/aws-sdk-cpp#building-the-sdk)

1. Per il client di servizio dell'applicazione, abilitalo `verifySSL` nella sua configurazione client, se questa opzione non è già abilitata.

### Per applicare TLS 1.3 con libcurl
<a name="to-enforce-tls-1-3-with-libcurl"></a>

Per applicare TLS 1.3, segui i passaggi nella sezione precedente impostando l'opzione invece di. `CURL_SSLVERSION_TLSv1_3` `CURL_SSLVERSION_TLSv1_2`

## Applica una versione TLS specifica su Windows
<a name="enforce-tls-1-2-on-windows"></a>

Le seguenti procedure mostrano come applicare TLS 1.2 o TLS 1.3 con WinHttp, Win o. INet IXMLHTTPRequest2

### Prerequisito: determinare il supporto TLS per Windows
<a name="prerequisite-enable-tls-1-1-and-1-2-on-windows"></a>
+ Determina la versione di supporto del protocollo TLS disponibile per il tuo sistema come descritto in [https://docs.microsoft.com/en-us/windows/win32/secauthn/protocols- in-tls-ssl](https://docs.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-) —schannel-ssp-.
+ [Se utilizzi Windows 7 SP1 o Windows Server 2008 R2 SP1, devi assicurarti che il supporto TLS 1.2 sia abilitato nel registro, come descritto in windows- -registry-settings \#tls -12. https://docs.microsoft.com/en-us/ server/security/tls/tls](https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12) Se si esegue una distribuzione precedente, è necessario aggiornare il sistema operativo. 

### Per applicare TLS 1.2 o TLS 1.3 con WinHttp
<a name="to-enforce-tls-1-2-with-winhttp"></a>

WinHttp fornisce un'API per impostare in modo esplicito i protocolli sicuri accettabili. Tuttavia, per renderlo configurabile in fase di esecuzione, è necessario modificare il codice sorgente di AWS SDK per C\+\+ e quindi ricostruirlo.

1. Scaricate il codice sorgente per il AWS SDK per C\+\+ modulo. [GitHub](http://github.com/aws/aws-sdk-cpp)

1. Apri `aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp` e trova le seguenti righe di codice.

   ```
   #if defined(WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3)
       DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 |
               WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3;
   #else
       DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
   #endif
   
   if (!WinHttpSetOption(GetOpenHandle(), WINHTTP_OPTION_SECURE_PROTOCOLS, &flags, sizeof(flags)))
   {
       AWS_LOGSTREAM_FATAL(GetLogTag(), "Failed setting secure crypto protocols with error code: " << GetLastError());
   }
   ```

   Il flag dell'`WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3`opzione è definito se TLS 1.3 è presente nel sistema di build corrente. [Per ulteriori informazioni, vedere [WINHTTP\_OPTION\_SECURE\_PROTOCOLS e il supporto della versione del protocollo TLS](https://learn.microsoft.com/en-us/windows/win32/winhttp/option-flags#winhttp_option_secure_protocols) sul sito Web Microsoft.](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-#tls-protocol-version-support)

1. Seleziona una delle seguenti opzioni:
   + **Per applicare TLS 1.2:**

     In base alla `#else` direttiva, modifica il valore della `flags` variabile, come segue.

     ```
     DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
     ```
   + **Per applicare TLS 1.3:**

     In base alla `#if defined(WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3)` direttiva, modifica il valore della `flags` variabile, come segue.

     ```
     DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3;
     ```

1. Se hai apportato le modifiche precedenti al codice, compila e installalo AWS SDK per C\+\+ seguendo le istruzioni riportate in [https://github.com/aws/aws-sdk-cpp\#. building-the-sdk](https://github.com/aws/aws-sdk-cpp#building-the-sdk)

1. Per il client di servizio dell'applicazione, abilitalo `verifySSL` nella sua configurazione client, se questa opzione non è già abilitata.

### Per applicare TLS 1.2 con Win e INet IXMLHTTPRequest2
<a name="to-enforce-tls-1-2-with-wininet-and-ixmlhttprequest2"></a>

Non esiste un'API per specificare il protocollo sicuro per Win INet e IXMLHTTPRequest2 le librerie. Quindi AWS SDK per C\+\+ utilizza l'impostazione predefinita per il sistema operativo. È possibile aggiornare il registro di Windows per imporre l'uso di TLS 1.2, come illustrato nella procedura seguente. Tieni presente, tuttavia, che il risultato è un cambiamento globale che influirà su tutte le applicazioni che dipendono da Schannel.

1. Apri l'editor del registro e vai a. `Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols`

1. Se non esistono già, crea le seguenti sottochiavi:`TLS 1.0,`,`TLS 1.1`, e`TLS 1.2`.

1. In ciascuna delle sottochiavi, create una `Client` sottochiave e una sottochiave. `Server`

1. Create le chiavi e i valori seguenti.

   ```
    Key name                          Key type   Value
    --------                          ---------  -----
    TLS 1.0\Client\DisabledByDefault  DWORD      0
    TLS 1.1\Client\DisabledByDefault  DWORD      0
    TLS 1.2\Client\DisabledByDefault  DWORD      0
    TLS 1.0\Client\Enabled            DWORD      0
    TLS 1.1\Client\Enabled            DWORD      0
    TLS 1.2\Client\Enabled            DWORD      1
   ```

   Notate che `TLS 1.2\Client\Enabled` è l'unica chiave impostata su 1. L'impostazione di questa chiave su 1 impone TLS 1.2 come unico protocollo sicuro accettabile.

### Per applicare TLS 1.3 con Win e INet IXMLHTTPRequest2
<a name="to-enforce-tls-1-3-with-wininet-and-ixmlhttprequest2"></a>

Non esiste un'API per specificare il protocollo sicuro per Win INet e IXMLHTTPRequest2 le librerie. Quindi AWS SDK per C\+\+ utilizza l'impostazione predefinita per il sistema operativo. È possibile aggiornare il registro di Windows per imporre l'uso di TLS 1.3, come illustrato nella procedura seguente. Tieni presente, tuttavia, che il risultato è un cambiamento globale che influirà su tutte le applicazioni che dipendono da Schannel.

1. Apri l'editor del registro e vai a. `Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols`

1. Se non esistono già, crea le seguenti sottochiavi:`TLS 1.0,`,`TLS 1.1`, `TLS 1.2` e`TLS 1.3`.

1. In ciascuna delle sottochiavi, create una `Client` sottochiave e una sottochiave. `Server`

1. Create le chiavi e i valori seguenti.

   ```
    Key name                          Key type   Value
    --------                          ---------  -----
    TLS 1.0\Client\DisabledByDefault  DWORD      0
    TLS 1.1\Client\DisabledByDefault  DWORD      0
    TLS 1.2\Client\DisabledByDefault  DWORD      0
    TLS 1.3\Client\DisabledByDefault  DWORD      0
    TLS 1.0\Client\Enabled            DWORD      0
    TLS 1.1\Client\Enabled            DWORD      0
    TLS 1.2\Client\Enabled            DWORD      0
    TLS 1.3\Client\Enabled            DWORD      1
   ```

   Notate che `TLS 1.3\Client\Enabled` è l'unica chiave impostata su 1. L'impostazione di questa chiave su 1 impone TLS 1.3 come unico protocollo sicuro accettabile.