

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

# 에서 사용자 지정 libcrypto 라이브러리 사용 AWS SDK for C\$1\$1
<a name="libcrypto"></a>

 기본적으로는 전송 계층 보안을 위해 기본 시스템 암호화 라이브러리를 AWS SDK for C\$1\$1 사용합니다. 그러나 소스에서 SDK를 빌드할 때 다른 libcrypto 라이브러리를 사용하도록 선택적으로 SDK for C\$1\$1를 구성할 수 있습니다. 즉, 모든 암호화 작업이 OpenSSL의 사용자 지정 구현으로 전환됩니다. 예를 들어 애플리케이션에서 FIPS 표준을 달성하기 위해 [https://github.com/aws/aws-lc](https://github.com/aws/aws-lc) 라이브러리를 [FIPS 모드](https://aws.amazon.com/blogs/security/aws-lc-is-now-fips-140-3-certified/)로 사용할 수 있습니다.

## SDK for C\$1\$1에 사용자 지정 libcrypto를 빌드하는 방법
<a name="howToBuildLibcrypto"></a>

### 1단계: libcrypto 라이브러리 빌드 또는 가져오기
<a name="buildObtainLibCrypto"></a>

[https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)는 libcrypto 라이브러리를 대체할 수 있는 한 가지 예이지만, OpenSSL 또는 OpenSSL과 동등한 배포판이라면 무엇이든 사용할 수 있습니다.

SDK for C\$1\$1와 그 종속성인 CRT는 모두 암호화 기능에 libcrypto를 사용하며, 둘 다 동일한 방식으로 종속성을 처리해야 합니다. SDK for C\$1\$1는 요청이 SDK의 `CRT S3` 기능을 사용하는지 여부에 따라 두 가지 다른 HTTP 클라이언트에 의존합니다. 특히 CRT는 시작 시점에 초기화되는 TLS 구현인 [s2n](https://github.com/aws/s2n-tls)에 의존합니다. SDK와 s2n 팀 모두 [BUILD\$1SHARED\$1LIBS](cmake-params.md#cmake-build-shared-libs) 값에 관계없이 공유 libcrypto 라이브러리 사용을 강제하는 cmake 파라미터를 제공합니다. 일반적으로 CRT HTTP 클라이언트와 일반 HTTP 클라이언트가 동일한 libcrypto를 사용하도록 설정하는 것이 바람직합니다. 이 경우 양쪽 모두 종속성 트리에서 OpenSSL을 참조해야 함을 의미합니다. SDK는 [AWS\$1USE\$1CRYPTO\$1SHARED\$1LIBS](cmake-params.md#cmake-use-crypto)를 통해, s2n(CRT 기반 직접 호출용)은 [https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39](https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39)를 통해 이를 제공합니다. 두 라이브러리 간의 의존성 해결 방식은 동일하며 일반적으로 일치하도록 설정되지만, 명시적으로 다르게 설정할 수도 있습니다.

예를 들어 `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 배포 사용
<a name="BuildCurlWithLibCrypto"></a>

SDK for C\$1\$1를 사용하려면 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 빌드
<a name="BuildUsingLibcryptoCurl"></a>

이제 이전에 생성한 libcrypto 및 curl 아티팩트를 사용하여 SDK for C\$1\$1를 빌드할 수 있습니다. 이 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 이미지에 모두 통합
<a name="dockerImageForLibcrypto"></a>

다음 샘플 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 .
```