

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# でのカスタム libcrypto ライブラリの使用 AWS SDK for C\$1\$1
<a name="libcrypto"></a>

 デフォルトでは、 はトランスポートレイヤーのセキュリティにデフォルトのシステム暗号化ライブラリ AWS SDK for C\$1\$1 を使用します。ただし SDK for C\$1\$1 では、ソースから SDK をビルドする際に、オプションで別の libcrypto ライブラリを使用するように設定できます。これは、すべての暗号化オペレーションが OpenSSL のカスタム実装に置き換えられることを意味します。例えば、[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/)で使用することで、アプリケーションで FIPS 準拠が可能になります。

## 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` 機能を使用するかどうかに応じて、2 種類の HTTP クライアントのいずれかに依存します。CRT は特に [s2n](https://github.com/aws/s2n-tls) に依存しており、これは起動時に初期化される 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) を使用します。依存関係の解決はこれら 2 つのライブラリ間で同じであり、通常は一致するように設定されますが、明示的に異なるように設定することもできます。

例えば、libcrypto ライブラリとして `AWS-LC` を使用するには、次のようにビルドします。

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