

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden einer benutzerdefinierten libcrypto-Bibliothek in der AWS SDK für C\$1\$1
<a name="libcrypto"></a>

 Standardmäßig AWS SDK für C\$1\$1 verwendet der die kryptografische Standardbibliothek des Systems für die Sicherheit auf Transportschicht. Das SDK for C\$1\$1 kann jedoch optional so konfiguriert werden, dass es beim Erstellen des SDK aus dem Quellcode eine andere libcrypto-Bibliothek verwendet. Dies bedeutet funktionell, dass alle kryptografischen Operationen auf eine benutzerdefinierte Implementierung von OpenSSL umgeleitet werden. Möglicherweise möchten Sie die [https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)Bibliothek beispielsweise im [FIPS-Modus verwenden, um einen FIPS-Standard](https://aws.amazon.com/blogs/security/aws-lc-is-now-fips-140-3-certified/) in Ihrer Anwendung zu erreichen.

## Wie man ein benutzerdefiniertes Libcrypto in das SDK for C\$1\$1 einbaut
<a name="howToBuildLibcrypto"></a>

### Schritt 1: Erstellen oder beziehen Sie Ihre libcrypto-Bibliothek
<a name="buildObtainLibCrypto"></a>

Dies [https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)ist ein Beispiel für eine alternative libcrypto-Bibliothek, aber jede Distribution von OpenSSL oder einem OpenSSL-Äquivalent würde funktionieren. 

Das SDK for C\$1\$1 und seine Abhängigkeit, die CRT, verwenden beide libcrypto für ihre kryptografischen Funktionen und beide müssen Abhängigkeiten auf die gleiche Weise handhaben. Das SDK for C\$1\$1 hängt von zwei verschiedenen HTTP-Clients ab, je nachdem, ob die Anfrage die `CRT S3` SDK-Funktionalität verwendet. Das CRT ist speziell von [s2n](https://github.com/aws/s2n-tls) abhängig, einer TLS-Implementierung, die beim Start initialisiert wird. Sowohl das SDK als auch das s2n-Team haben einen cmake-Parameter, um die Verwendung einer gemeinsam genutzten libcrypto-Bibliothek unabhängig vom Wert von zu erzwingen. [BUILD\$1SHARED\$1LIBS](cmake-params.md#cmake-build-shared-libs) Normalerweise möchten Sie, dass der CRT-HTTP-Client und der reguläre HTTP-Client dasselbe libcrypto verwenden. In diesem Fall würde das bedeuten, dass beide im Abhängigkeitsbaum auf OpenSSL verweisen. Das SDK stellt dies über bereit [AWS\$1USE\$1CRYPTO\$1SHARED\$1LIBS](cmake-params.md#cmake-use-crypto) und s2n (für CRT-basierte Aufrufe) stellt dies über bereit. [https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39](https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39) Die Auflösung der Abhängigkeiten zwischen diesen beiden Bibliotheken ist dieselbe, und in der Regel sind sie so eingestellt, dass sie übereinstimmen, obwohl Sie sie auch explizit als unterschiedlich festlegen können.

Um sie beispielsweise `AWS-LC` als libcrypto-Bibliothek zu verwenden, würden Sie sie wie folgt erstellen:

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

### Schritt 2: Erstellen Sie Curl aus dem Quellcode oder verwenden Sie eine Curl-Distribution mit Ihrer libcrypto-Bibliothek
<a name="BuildCurlWithLibCrypto"></a>

Das SDK for C\$1\$1 erfordert, dass auf dem System ein HTTP-Client installiert ist, der für HTTP-Anfragen verwendet wird. Der HTTP-Client muss mit der Datei libcrypto erstellt werden, die Sie verwenden möchten. Der HTTP-Client ist für TLS-Operationen verantwortlich und verwendet daher Ihre libcrypto-Bibliothek.

 Im folgenden Beispiel wird die curl-Bibliothek mit einer installierten Version von neu erstellt. `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
```

### Schritt 3: Erstellen Sie das SDK mit den Bibliotheken libcrypto und curl
<a name="BuildUsingLibcryptoCurl"></a>

Das SDK for C\$1\$1 kann jetzt mit den zuvor erstellten libcrypto- und curl-Artefakten erstellt werden. Dieser Build des SDK verwendet die benutzerdefinierte libcrypto-Bibliothek für alle kryptografischen Funktionen.

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

## Alles in einem Docker-Image zusammenführen
<a name="dockerImageForLibcrypto"></a>

Die folgende Docker-Beispieldatei zeigt, wie diese Schritte in der Amazon Linux 2023-Umgebung implementiert werden.

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