

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Aplicando uma versão mínima do TLS no AWS SDK para C\+\+
<a name="enforcing-tls"></a>

Para aumentar a segurança na comunicação com os AWS serviços, você deve configurar o SDK for C\+\+ para usar o TLS 1.2 ou posterior. Recomendamos utilizar o TLS 1.3.

 AWS SDK para C\+\+ É uma biblioteca multiplataforma. É possível compilar e executar sua aplicação nas plataformas desejadas. Plataformas diferentes podem depender de diferentes clientes HTTP subjacentes.

Por padrão, macOS, Linux, Android e outras plataformas não Windows usam [libcurl](https://curl.haxx.se/libcurl/). Se a versão da libcurl for posterior à 7.34.0, o TLS 1.0 será a versão mínima usada pelos clientes HTTP subjacentes.

Para Windows, a biblioteca padrão é [WinHttp](https://docs.microsoft.com/en-us/windows/win32/winhttp). O Windows decide o protocolo real a ser usado entre os protocolos TLS 1.0, TLS 1.1, TLS 1.2 e TLS 1.3 disponíveis. [Win INet](https://docs.microsoft.com/en-us/windows/win32/wininet) e [IXMLHttpRequest2](https://docs.microsoft.com/en-us/windows/win32/api/_ixhr2) são as outras duas opções disponíveis no Windows. Você pode configurar seu aplicativo para substituir a biblioteca padrão durante CMake e em tempo de execução. Para esses dois clientes HTTP, o Windows também decide o protocolo seguro.

 AWS SDK para C\+\+ Também oferece a flexibilidade de substituir os clientes HTTP padrão. Por exemplo, você pode aplicar a libcurl ou usar os clientes HTTP que quiser usando uma fábrica de clientes HTTP personalizados. Portanto, para usar o TLS 1.2 como a versão mínima, você deve saber qual biblioteca cliente HTTP está usando.

## Impor uma versão TLS específica com libcurl em todas as plataformas
<a name="enforce-tls-1-2-with-libcurl-on-all-platforms"></a>

Esta seção pressupõe que o AWS SDK para C\+\+ esteja usando libcurl como uma dependência para suporte ao protocolo HTTP. Para especificar explicitamente a versão do TLS, você precisará de uma versão libcurl mínima de 7.34.0. Além disso, talvez seja necessário modificar o código-fonte do AWS SDK para C\+\+ e depois recompilá-lo.

O procedimento a seguir mostra como realizar essas tarefas.

### Como impor o TLS 1.2 com libcurl
<a name="to-enforce-tls-1-2-with-libcurl"></a>

1. Verifique se a versão de sua instalação da libcurl é pelo menos a 7.34.0.

1. Baixe o código-fonte AWS SDK para C\+\+ do formulário [GitHub](http://github.com/aws/aws-sdk-cpp).

1. Abra o arquivo `aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp` e encontre as linhas de código a seguir.

   ```
   #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 necessário, altere o último parâmetro na chamada da função da maneira a seguir.

   ```
   #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 você realizou as alterações de código anteriores, crie e instale o de AWS SDK para C\+\+ acordo com as instruções em [https://github.com/aws/aws-sdk-cpp\# building-the-sdk](https://github.com/aws/aws-sdk-cpp#building-the-sdk).

1. Para o cliente de serviço em sua aplicação, habilite `verifySSL` na configuração do cliente, se essa opção ainda não estiver habilitada.

### Como impor o TLS 1.3 com libcurl
<a name="to-enforce-tls-1-3-with-libcurl"></a>

Para impor o TLS 1.3, siga as etapas na seção anterior, definindo a opção `CURL_SSLVERSION_TLSv1_3` em vez de `CURL_SSLVERSION_TLSv1_2`.

## Impor uma versão específica do TLS no Windows
<a name="enforce-tls-1-2-on-windows"></a>

Os procedimentos a seguir mostram como aplicar o TLS 1.2 ou o TLS 1.3 com WinHttp, Win INet ou. IXMLHTTPRequest2

### Pré-requisito: determinar o suporte ao TLS no Windows
<a name="prerequisite-enable-tls-1-1-and-1-2-on-windows"></a>
+ Determine o suporte à versão do protocolo TLS disponível para seu sistema, conforme descrito em [https://docs.microsoft.com/en-us/windows/win32/secauthn/protocols- in-tls-ssl —schannel-ssp](https://docs.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-) -.
+ Se você estiver executando o Windows 7 SP1 ou o Windows Server 2008 R2 SP1, precisará garantir que o suporte ao TLS 1.2 esteja habilitado no registro, conforme descrito em [https://docs.microsoft.com/en-us/windows- server/security/tls/tls -registry-settings \#tls -12](https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12). Se estiver executando uma distribuição anterior, você deverá atualizar seu sistema operacional. 

### Para aplicar o TLS 1.2 ou o TLS 1.3 com WinHttp
<a name="to-enforce-tls-1-2-with-winhttp"></a>

WinHttp fornece uma API para definir explicitamente os protocolos seguros aceitáveis. No entanto, para tornar isso configurável no runtime, você precisa modificar o código-fonte do AWS SDK para C\+\+ e depois recompilá-lo.

1. Baixe o código-fonte AWS SDK para C\+\+ do formulário [GitHub](http://github.com/aws/aws-sdk-cpp).

1. Abra o arquivo `aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp` e encontre as linhas de código a seguir.

   ```
   #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());
   }
   ```

   O sinalizador de opção `WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3` é definido caso o TLS 1.3 esteja presente no sistema de compilação atual. Para acessar mais informações, consulte [WINHTTP\_OPTION\_SECURE\_PROTOCOLS](https://learn.microsoft.com/en-us/windows/win32/winhttp/option-flags#winhttp_option_secure_protocols) e o [suporte à versão do protocolo TLS](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-#tls-protocol-version-support) no site da Microsoft.

1. Escolha uma das seguintes opções:
   + **Para impor o TLS 1.2:**

     De acordo com a diretiva `#else`, altere o valor da variável `flags` da forma a seguir.

     ```
     DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
     ```
   + **Para impor o TLS 1.3:**

     De acordo com a diretiva `#if defined(WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3)`, altere o valor da variável `flags` da forma a seguir.

     ```
     DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3;
     ```

1. Se você realizou as alterações de código anteriores, crie e instale o de AWS SDK para C\+\+ acordo com as instruções em [https://github.com/aws/aws-sdk-cpp\# building-the-sdk](https://github.com/aws/aws-sdk-cpp#building-the-sdk).

1. Para o cliente de serviço em sua aplicação, habilite `verifySSL` na configuração do cliente, se essa opção ainda não estiver habilitada.

### Para aplicar o TLS 1.2 com Win e INet IXMLHTTPRequest2
<a name="to-enforce-tls-1-2-with-wininet-and-ixmlhttprequest2"></a>

Não há API para especificar o protocolo seguro para o Win INet e as IXMLHTTPRequest2 bibliotecas. Portanto, AWS SDK para C\+\+ ele usa o padrão para o sistema operacional. Você pode atualizar o Registro do Windows para impor o uso do TLS 1.2, conforme mostrado no procedimento a seguir. No entanto, saiba que o resultado é uma mudança global que afeta todas as aplicações que dependem do Schannel.

1. Abra o Editor de Registro e acesse `Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols`.

1. Se elas ainda não existirem, crie as seguintes subchaves: `TLS 1.0,`, `TLS 1.1` e `TLS 1.2`.

1. Em cada uma, crie as seguintes subchaves: `Client` e `Server`.

1. Crie as chaves e os valores a seguir.

   ```
    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
   ```

   Observe que `TLS 1.2\Client\Enabled` é a única chave definida como 1. Definir essa chave como 1 impõe o TLS 1.2 como o único protocolo seguro aceitável.

### Para aplicar o TLS 1.3 com Win e INet IXMLHTTPRequest2
<a name="to-enforce-tls-1-3-with-wininet-and-ixmlhttprequest2"></a>

Não há API para especificar o protocolo seguro para o Win INet e as IXMLHTTPRequest2 bibliotecas. Portanto, AWS SDK para C\+\+ ele usa o padrão para o sistema operacional. Você pode atualizar o Registro do Windows para impor o uso do TLS 1.3, conforme mostrado no procedimento a seguir. No entanto, saiba que o resultado é uma mudança global que afeta todas as aplicações que dependem do Schannel.

1. Abra o Editor de Registro e acesse `Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols`.

1. Se elas ainda não existirem, crie as seguintes subchaves: `TLS 1.0,`, `TLS 1.1`, `TLS 1.2` e `TLS 1.3`.

1. Em cada uma, crie as seguintes subchaves: `Client` e `Server`.

1. Crie as chaves e os valores a seguir.

   ```
    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
   ```

   Observe que `TLS 1.3\Client\Enabled` é a única chave definida como 1. Definir essa chave como 1 impõe o TLS 1.3 como o único protocolo seguro aceitável.