

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo di una libreria libcrypto personalizzata in AWS SDK per C\$1\$1
<a name="libcrypto"></a>

 Per impostazione predefinita, AWS SDK per C\$1\$1 utilizza la libreria crittografica di sistema predefinita per la sicurezza del livello di trasporto. Tuttavia, l'SDK for C\$1\$1 può essere configurato opzionalmente per utilizzare una libreria libcrypto diversa quando si crea l'SDK dal codice sorgente. Ciò significa funzionalmente che tutte le operazioni crittografiche verranno dirottate verso un'implementazione personalizzata di OpenSSL. Ad esempio, potreste voler utilizzare la [https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)libreria in [modalità FIPS per ottenere uno standard FIPS](https://aws.amazon.com/blogs/security/aws-lc-is-now-fips-140-3-certified/) nella vostra applicazione.

## Come creare una libcrypto personalizzata nell'SDK for C\$1\$1
<a name="howToBuildLibcrypto"></a>

### Passaggio 1: crea o ottieni la tua libreria libcrypto
<a name="buildObtainLibCrypto"></a>

[https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)Questo è un esempio di libreria libcrypto alternativa, ma qualsiasi distribuzione di OpenSSL o equivalente a OpenSSL funzionerebbe. 

L'SDK for C\$1\$1 e la sua dipendenza CRT usano entrambi libcrypto per le loro funzioni crittografiche ed entrambi devono gestire le dipendenze allo stesso modo. L'SDK for C\$1\$1 dipende da due diversi client HTTP a seconda che la richiesta utilizzi la funzionalità dell'SDK. `CRT S3` Il CRT dipende in particolare da [s2n](https://github.com/aws/s2n-tls), un'implementazione TLS inizializzata all'avvio. Sia l'SDK che il team s2n dispongono di un parametro cmake per forzare l'uso di una libreria libcrypto condivisa indipendentemente dal valore di. [BUILD\$1SHARED\$1LIBS](cmake-params.md#cmake-build-shared-libs) In genere, si desidera che il client HTTP CRT e il normale client HTTP utilizzino lo stesso libcrypto. In questo caso, ciò significherebbe che entrambi fanno riferimento a OpenSSL nell'albero delle dipendenze. L'SDK lo fornisce tramite [AWS\$1USE\$1CRYPTO\$1SHARED\$1LIBS](cmake-params.md#cmake-use-crypto) e s2n (per le chiamate basate su CRT) lo fornisce tramite. [https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39](https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39) La risoluzione delle dipendenze è la stessa tra queste due librerie e in genere sono impostate per corrispondere, sebbene sia possibile impostarle esplicitamente in modo che siano diverse.

Ad esempio, per utilizzarla `AWS-LC` come libreria libcrypto, dovresti crearla come segue:

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

### Passaggio 2: crea curl dal codice sorgente o usa una distribuzione curl con la tua libreria libcrypto
<a name="BuildCurlWithLibCrypto"></a>

L'SDK for C\$1\$1 richiede che sul sistema sia installato un client HTTP che verrà utilizzato per effettuare richieste HTTP. Il client HTTP deve essere creato con libcrypto che intendi utilizzare. Il client HTTP è responsabile delle operazioni TLS e, pertanto, utilizza la libreria libcrypto.

 Nell'esempio seguente, la libreria curl viene ricostruita utilizzando una versione installata di. `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
```

### Passaggio 3: Costruisci l'SDK usando le librerie libcrypto e curl
<a name="BuildUsingLibcryptoCurl"></a>

L'SDK for C\$1\$1 ora può essere creato utilizzando gli artefatti libcrypto e curl creati in precedenza. Questa build dell'SDK utilizzerà la libreria libcrypto personalizzata per tutte le funzionalità crittografiche.

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

## Riunire tutto in un'immagine docker
<a name="dockerImageForLibcrypto"></a>

Il seguente file Docker di esempio mostra come implementare questi passaggi nell'ambiente 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 .
```