

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan pustaka libcrypto khusus di AWS SDK untuk C\$1\$1
<a name="libcrypto"></a>

 Secara default, AWS SDK untuk C\$1\$1 menggunakan perpustakaan kriptografi sistem default untuk keamanan lapisan transport. Namun, SDK for C\$1\$1 secara opsional dapat dikonfigurasi untuk menggunakan pustaka libcrypto yang berbeda saat membuat SDK dari sumber. Ini secara fungsional berarti bahwa semua operasi kriptografi akan dialihkan ke implementasi khusus OpenSSL. Misalnya, Anda mungkin ingin menggunakan [https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)pustaka dalam [mode FIPS](https://aws.amazon.com/blogs/security/aws-lc-is-now-fips-140-3-certified/) untuk mencapai standar FIPS dalam aplikasi Anda.

## Cara membuat libcrypto khusus ke dalam SDK for C\$1\$1
<a name="howToBuildLibcrypto"></a>

### Langkah 1: Bangun atau dapatkan perpustakaan libcrypto Anda
<a name="buildObtainLibCrypto"></a>

[https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)Ini adalah salah satu contoh pustaka libcrypto alternatif, tetapi distribusi OpenSSL atau OpenSSL yang setara akan berfungsi. 

SDK for C\$1\$1, dan ketergantungannya CRT, keduanya menggunakan libcrypto untuk fungsi kriptografinya dan keduanya perlu menangani dependensi yang sama. SDK for C\$1\$1 bergantung pada dua klien HTTP yang berbeda tergantung pada apakah permintaan menggunakan fungsionalitas SDK`CRT S3`. CRT secara khusus bergantung pada [s2n](https://github.com/aws/s2n-tls), implementasi TLS yang diinisialisasi pada waktu mulai. Baik SDK dan tim s2n memiliki parameter cmake untuk memaksa penggunaan perpustakaan libcrypto bersama terlepas dari nilainya. [BUILD\$1SHARED\$1LIBS](cmake-params.md#cmake-build-shared-libs) Biasanya, Anda ingin klien HTTP CRT dan klien HTTP biasa menggunakan libcrypto yang sama. Dalam hal ini, itu berarti keduanya mereferensikan OpenSSL di pohon ketergantungan. SDK menyediakan ini melalui [AWS\$1USE\$1CRYPTO\$1SHARED\$1LIBS](cmake-params.md#cmake-use-crypto) dan s2n (untuk panggilan berbasis CRT) menyediakan ini melalui. [https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39](https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39) Resolusi ketergantungan sama antara kedua pustaka ini, dan biasanya ini diatur agar cocok, meskipun Anda dapat secara eksplisit mengaturnya menjadi berbeda.

Misalnya, untuk digunakan `AWS-LC` sebagai perpustakaan libcrypto, Anda akan membangunnya sebagai berikut:

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

### Langkah 2: Buat curl dari sumber atau gunakan distribusi curl dengan pustaka libcrypto Anda
<a name="BuildCurlWithLibCrypto"></a>

SDK for C\$1\$1 mengharuskan klien HTTP diinstal pada sistem yang akan digunakan untuk membuat permintaan HTTP. Klien HTTP harus dibangun dengan libcrypto yang ingin Anda gunakan. Klien HTTP bertanggung jawab atas operasi TLS dan, dengan demikian, menggunakan perpustakaan libcrypto Anda.

 Dalam contoh berikut, pustaka curl dibangun kembali menggunakan versi yang diinstal. `AWS-LC`

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

### Langkah 3: Bangun SDK menggunakan libcrypto dan curl libraries
<a name="BuildUsingLibcryptoCurl"></a>

SDK for C\$1\$1 sekarang dapat dibangun menggunakan artefak libcrypto dan curl yang dibuat sebelumnya. Build SDK ini akan menggunakan pustaka libcrypto khusus untuk semua fungsi kriptografi.

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

## Menyatukan semuanya dalam gambar docker
<a name="dockerImageForLibcrypto"></a>

Contoh file Docker berikut menunjukkan cara menerapkan langkah-langkah ini di lingkungan 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 .
```