AWS SDK for C++에서 사용자 지정 libcrypto 라이브러리 사용 - AWS SDK for C++

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

AWS SDK for C++에서 사용자 지정 libcrypto 라이브러리 사용

기본적으로는 AWS SDK for C++는 전송 계층 보안을 위해 기본 시스템 암호화 라이브러리를 사용합니다. 그러나 소스에서 SDK를 빌드할 때 다른 libcrypto 라이브러리를 사용하도록 선택적으로 SDK for C++를 구성할 수 있습니다. 즉, 모든 암호화 작업이 OpenSSL의 사용자 지정 구현으로 전환됩니다. 예를 들어 애플리케이션에서 FIPS 표준을 달성하기 위해 AWS-LC 라이브러리를 FIPS 모드로 사용할 수 있습니다.

SDK for C++에 사용자 지정 libcrypto를 빌드하는 방법

1단계: libcrypto 라이브러리 빌드 또는 가져오기

AWS-LC는 libcrypto 라이브러리를 대체할 수 있는 한 가지 예이지만, OpenSSL 또는 OpenSSL과 동등한 배포판이라면 무엇이든 사용할 수 있습니다.

SDK for C++와 그 종속성인 CRT는 모두 암호화 기능에 libcrypto를 사용하며, 둘 다 동일한 방식으로 종속성을 처리해야 합니다. SDK for C++는 요청이 SDK의 CRT S3 기능을 사용하는지 여부에 따라 두 가지 다른 HTTP 클라이언트에 의존합니다. 특히 CRT는 시작 시점에 초기화되는 TLS 구현인 s2n에 의존합니다. SDK와 s2n 팀 모두 BUILD_SHARED_LIBS 값에 관계없이 공유 libcrypto 라이브러리 사용을 강제하는 cmake 파라미터를 제공합니다. 일반적으로 CRT HTTP 클라이언트와 일반 HTTP 클라이언트가 동일한 libcrypto를 사용하도록 설정하는 것이 바람직합니다. 이 경우 양쪽 모두 종속성 트리에서 OpenSSL을 참조해야 함을 의미합니다. SDK는 AWS_USE_CRYPTO_SHARED_LIBS 를 통해, s2n(CRT 기반 호출용)은 S2N_USE_CRYPTO_SHARED_LIBS를 통해 이를 제공합니다. 두 라이브러리 간의 의존성 해결 방식은 동일하며 일반적으로 일치하도록 설정되지만, 명시적으로 다르게 설정할 수도 있습니다.

예를 들어 AWS-LC를 libcrypto 라이브러리로 사용하려면 다음과 같이 빌드합니다.

git clone --depth 1 -b fips-2022-11-02 https://github.com/aws/aws-lc && \ cd aws-lc && \ mkdir build && \ cd build && \ cmake -G Ninja \ -DCMAKE_INSTALL_LIBDIR=lib \ -DCMAKE_INSTALL_PREFIX=/lc-install .. && \ cmake --build . && \ cmake --install . && \ rm -rf ./* && \ cmake -G Ninja \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_INSTALL_LIBDIR=lib \ -DCMAKE_INSTALL_PREFIX=/lc-install .. && \ cmake --build . && \ cmake --install .

2단계: 소스에서 curl 빌드하거나 libcrypto 라이브러리가 포함된 curl 배포 사용

SDK for C++를 사용하려면 HTTP 요청을 수행할 시스템에 HTTP 클라이언트가 설치되어 있어야 합니다. HTTP 클라이언트는 사용하려는 libcrypto로 빌드해야 합니다. HTTP 클라이언트는 TLS 작업을 담당하므로 libcrypto 라이브러리가 사용됩니다.

다음 예에서는 설치된 AWS-LC 버전을 사용하여 curl 라이브러리를 다시 빌드합니다.

git clone --depth 1 -b curl-8_5_0 https://github.com/curl/curl && \ cd curl && \ autoreconf -fi && \ mkdir build && \ cd build && \ ../configure \ --enable-warnings \ --enable-werror \ --with-openssl=/lc-install \ --prefix=/curl-install && \ make && \ make install

3단계: libcrypto 및 curl 라이브러리를 사용하여 SDK 빌드

이제 이전에 생성한 libcrypto 및 curl 아티팩트를 사용하여 SDK for C++를 빌드할 수 있습니다. 이 SDK 빌드는 모든 암호화 기능에 사용자 지정 libcrypto 라이브러리를 사용합니다.

git clone --depth 1 --recurse-submodules https://github.com/aws/aws-sdk-cpp \ cd aws-sdk-cpp && \ mkdir build && \ cd build && \ cmake -G Ninja \ -DCMAKE_PREFIX_PATH="/curl-install;/lc-install;" \ -DBUILD_ONLY="s3" \ -DCMAKE_INSTALL_PREFIX=/sdk-install \ -DAUTORUN_UNIT_TESTS=OFF .. && \ cmake --build . && \ cmake --install .

Docker 이미지에 모두 통합

다음 샘플 Docker 파일은 Amazon Linux 2023 환경에서 이러한 단계를 구현하는 방법을 보여줍니다.

# User AL2023 Base image FROM public.ecr.aws/amazonlinux/amazonlinux:2023 # Install Dev Tools RUN yum groupinstall -y "Development Tools" RUN yum install -y cmake3 ninja-build # Build and install AWS-LC on the fips branch both statically and dynamically. RUN git clone --depth 1 -b fips-2022-11-02 https://github.com/aws/aws-lc && \\ cd aws-lc && \\ mkdir build && \\ cd build && \\ cmake -G Ninja \\ -DCMAKE_INSTALL_LIBDIR=lib \\ -DCMAKE_INSTALL_PREFIX=/lc-install .. && \\ cmake --build . && \\ cmake --install . && \\ rm -rf ./* && \\ cmake -G Ninja \\ -DBUILD_SHARED_LIBS=ON \\ -DCMAKE_INSTALL_LIBDIR=lib \\ -DCMAKE_INSTALL_PREFIX=/lc-install .. && \\ cmake --build . && \\ cmake --install . # Build and install curl targeting AWS-LC as openssl RUN git clone --depth 1 -b curl-8_5_0 https://github.com/curl/curl && \\ cd curl && \\ autoreconf -fi && \\ mkdir build && \\ cd build && \\ ../configure \\ --enable-warnings \\ --enable-werror \\ --with-openssl=/lc-install \\ --prefix=/curl-install && \\ make && \\ make install # Build and install SDK using the Curl and AWS-LC targets previously built RUN git clone --depth 1 --recurse-submodules https://github.com/aws/aws-sdk-cpp \\ cd aws-sdk-cpp && \\ mkdir build && \\ cd build && \\ cmake -G Ninja \\ -DCMAKE_PREFIX_PATH="/curl-install;/lc-install;" \\ -DBUILD_ONLY="s3" \\ -DCMAKE_INSTALL_PREFIX=/sdk-install \\ -DAUTORUN_UNIT_TESTS=OFF .. && \\ cmake --build . && \\ cmake --install .