에서 최소 TLS 버전 적용 AWS SDK for C++ - AWS SDK for C++

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

에서 최소 TLS 버전 적용 AWS SDK for C++

AWS 서비스와 통신할 때 보안을 강화하려면 TLS 1.2 이상을 사용하도록 C++용 SDK를 구성해야 합니다. TLS 1.3을 사용할 것을 권장합니다.

AWS SDK for C++ 는 교차 플랫폼 라이브러리입니다. 원하는 플랫폼에서 애플리케이션을 빌드하고 실행할 수 있습니다. 플랫폼마다 기본 HTTP 클라이언트에 따라 다를 수 있습니다.

기본적으로 macOS, Linux, Android 및 기타 Windows가 아닌 플랫폼은 libcurl을 사용합니다. libcurl 버전이 7.34.0보다 이후인 경우 TLS 1.0은 기본 HTTP 클라이언트에서 사용하는 최소 버전입니다.

Windows의 경우 기본 라이브러리는 WinHttp입니다. Windows는 사용 가능한 TLS 1.0, TLS 1.1, TLS 1.2 및 TLS 1.3 프로토콜에 사용할 실제 프로토콜을 결정합니다. WinINetIXMLHttpRequest2는 Windows에서 사용할 수 있는 다른 두 가지 옵션입니다. CMake 중 및 런타임에 기본 라이브러리를 대체하도록 애플리케이션을 구성할 수 있습니다. 이 두 HTTP 클라이언트의 경우 Windows에서 보안 프로토콜도 결정합니다.

AWS SDK for C++ 또한는 기본 HTTP 클라이언트를 재정의할 수 있는 유연성도 제공합니다. 예를 들어 사용자 지정 HTTP 클라이언트 팩토리를 사용하여 libcurl을 적용하거나 원하는 HTTP 클라이언트를 사용할 수 있습니다. TLS 1.2를 최소 버전으로 사용하려면 사용 중인 HTTP 클라이언트 라이브러리를 알고 있어야 합니다.

모든 플랫폼에서 libcurl을 사용하여 특정 TLS 버전 적용

이 단원에서는 AWS SDK for C++ 가 HTTP 프로토콜 지원의 종속성으로 libcurl을 사용하고 있다고 가정합니다. TLS 버전을 명시적으로 지정하려면 최소 libcurl 버전 7.34.0이 필요합니다. 또한의 AWS SDK for C++ 소스 코드를 수정한 다음 다시 빌드해야 할 수 있습니다.

다음 절차에서는 이러한 작업을 수행하는 방법을 보여줍니다.

libcurl을 사용하여 TLS 1.2를 적용하려면

  1. libcurl 설치가 버전 7.34.0 이상인지 확인합니다.

  2. GitHub AWS SDK for C++ 에서의 소스 코드를 다운로드합니다.

  3. aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp를 열고 다음 코드 줄을 찾습니다.

    #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
  4. 필요한 경우 다음과 같이 함수 호출의 마지막 파라미터를 변경합니다.

    #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
  5. 앞의 코드 변경을 수행한 경우 https://github.com/aws/aws-sdk-cpp#building-the-sdk AWS SDK for C++

  6. 애플리케이션의 서비스 클라이언트에 대해이 옵션이 아직 활성화되지 않은 경우 클라이언트 구성verifySSL에서를 활성화합니다.

libcurl을 사용하여 TLS 1.3을 적용하려면

TLS 1.3을 적용하려면 이전 섹션의 단계를 따라 대신 CURL_SSLVERSION_TLSv1_3 옵션을 설정합니다CURL_SSLVERSION_TLSv1_2.

Windows에서 특정 TLS 버전 적용

다음 절차에서는 WinHttp, WinINet 또는 IXMLHTTPRequest2를 사용하여 TLS 1.2 또는 TLS 1.3을 적용하는 방법을 보여줍니다.

사전 조건: Windows TLS 지원 결정

WinHttp을 사용하여 TLS 1.2 또는 TLS 1.3을 적용하려면

WinHttp는 허용 가능한 보안 프로토콜을 명시적으로 설정하는 API를 제공합니다. 그러나 런타임 시 이를 구성 가능하게 하려면의 소스 코드를 수정 AWS SDK for C++ 한 다음 다시 빌드해야 합니다.

  1. GitHub AWS SDK for C++ 에서의 소스 코드를 다운로드합니다.

  2. aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp를 열고 다음 코드 줄을 찾습니다.

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

    WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3 옵션 플래그는 현재 빌드 시스템에 TLS 1.3이 있는 경우 정의됩니다. 자세한 내용은 Microsoft 웹 사이트의 WINHTTP_OPTION_SECURE_PROTOCOLSTLS 프로토콜 버전 지원을 참조하세요.

  3. 다음 중 하나를 선택합니다.

    • TLS 1.2를 적용하려면:

      #else 명령에서 다음과 같이 flags 변수의 값을 변경합니다.

      DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
    • TLS 1.3을 적용하려면:

      #if defined(WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3) 명령에서 다음과 같이 flags 변수의 값을 변경합니다.

      DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3;
  4. 앞의 코드 변경을 수행한 경우 https://github.com/aws/aws-sdk-cpp#building-the-sdk AWS SDK for C++

  5. 애플리케이션의 서비스 클라이언트에 대해이 옵션이 아직 활성화되지 않은 경우 클라이언트 구성verifySSL에서를 활성화합니다.

WinINet 및 IXMLHTTPRequest2를 사용하여 TLS 1.2를 적용하려면

WinINet 및 IXMLHTTPRequest2 라이브러리에 대한 보안 프로토콜을 지정하는 API는 없습니다. 따라서는 운영 체제에 기본값을 AWS SDK for C++ 사용합니다. 다음 절차와 같이 Windows 레지스트리를 업데이트하여 TLS 1.2 사용을 적용할 수 있습니다. 하지만 그 결과는 Schannel에 의존하는 모든 애플리케이션에 영향을 미치는 글로벌 변경이라는 점에 유의하세요.

  1. 레지스트리 편집기를 열고 로 이동합니다Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.

  2. 아직 존재하지 않는 경우 , TLS 1.0, TLS 1.1및 하위 키를 생성합니다TLS 1.2.

  3. 각 하위 키에서 Client 하위 키와 Server 하위 키를 생성합니다.

  4. 다음 키와 값을 생성합니다.

    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

    TLS 1.2\Client\Enabled는 1로 설정된 유일한 키입니다. 이 키를 1로 설정하면 TLS 1.2가 허용되는 유일한 보안 프로토콜로 적용됩니다.

WinINet 및 IXMLHTTPRequest2를 사용하여 TLS 1.3을 적용하려면

WinINet 및 IXMLHTTPRequest2 라이브러리에 대한 보안 프로토콜을 지정하는 API는 없습니다. 따라서는 운영 체제에 기본값을 AWS SDK for C++ 사용합니다. 다음 절차에 표시된 대로 Windows 레지스트리를 업데이트하여 TLS 1.3 사용을 적용할 수 있습니다. 하지만 그 결과는 Schannel에 의존하는 모든 애플리케이션에 영향을 미치는 글로벌 변경이라는 점에 유의하세요.

  1. 레지스트리 편집기를 열고 로 이동합니다Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.

  2. 아직 존재하지 않는 경우 , TLS 1.0, TLS 1.1 TLS 1.2 및 하위 키를 생성합니다TLS 1.3.

  3. 각 하위 키에서 Client 하위 키와 Server 하위 키를 생성합니다.

  4. 다음 키와 값을 생성합니다.

    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

    TLS 1.3\Client\Enabled는 1로 설정된 유일한 키입니다. 이 키를 1로 설정하면 TLS 1.3이 허용되는 유일한 보안 프로토콜로 적용됩니다.