3.4 Linux Build (WSL)

Diese Anleitung zeigt, wie Sie OpenSSL unter Linux in WSL2 kompilieren.


Wann brauche ich einen Linux-Build?

Anwendung Linux-Build nötig?
Docker Container Ja
Linux Server Ja
L4Re Microkernel Ja (Cross-Compilation für aarch64)
.NET auf Windows Nein (Windows-Build nutzen)
WASM/Blazor Separat (siehe WASM Build)

Voraussetzungen

  • ☑ WSL2 mit Ubuntu 24.04 LTS (empfohlen) oder Fedora
  • ☑ Build-Werkzeuge installiert
  • ☑ Für aarch64: Cross-Compiler installiert

WSL einrichten


WSL2 Ubuntu 24.04 Installation

# PowerShell (Administrator)
wsl --install Ubuntu-24.04 --no-launch
wsl -d Ubuntu-24.04

Build-Schritte

Schritt 1: Build-Abhängigkeiten installieren

Ubuntu 24.04 (empfohlen):

sudo apt-get update
sudo apt-get install -y \
    build-essential \
    perl \
    git \
    wget \
    file
 
# Für aarch64 Cross-Compilation:
sudo apt-get install -y \
    gcc-aarch64-linux-gnu \
    g++-aarch64-linux-gnu \
    binutils-aarch64-linux-gnu

Fedora:

sudo dnf install -y gcc make perl git wget file
# Cross-Compiler für aarch64 sind in Fedora schwieriger zu installieren
# Ubuntu 24.04 wird empfohlen

Schritt 2: Quellen zum Linux-Dateisystem kopieren

WICHTIG: NTFS-Symlink-Problem

Der Build direkt auf dem Windows-Dateisystem (/mnt/d/…) schlägt fehl, weil NTFS keine Linux-Symlinks unterstützt. OpenSSL erstellt Symlinks wie libcrypto.so → libcrypto.so.3.

Lösung: Quellen immer ins Linux-Dateisystem (/opt/…) kopieren!

# Build-Verzeichnis erstellen
sudo mkdir -p /opt/openssl-build
sudo chown $(id -u):$(id -g) /opt/openssl-build
 
# Windows-Laufwerk mounten (falls nicht auto-gemountet)
sudo mkdir -p /mnt/d
sudo mount -t drvfs D: /mnt/d 2>/dev/null || true
 
# Quellen kopieren (mit tar für vollständige Kopie)
cd /mnt/d/Workspace/openssl-3.6.0/l4re/src
tar cf - . | tar xf - -C /opt/openssl-build

Schritt 3: Konfigurieren (x86_64)

cd /opt/openssl-build
 
# Standard-Konfiguration
./Configure linux-x86_64 \
    --prefix=/opt/openssl-3.6 \
    --openssldir=/opt/openssl-3.6/ssl \
    shared
 
# ODER mit FIPS-Modul (empfohlen für Produktion):
./Configure linux-x86_64 \
    --prefix=/opt/openssl-3.6 \
    --openssldir=/opt/openssl-3.6/ssl \
    enable-fips \
    shared

Schritt 4: Kompilieren

# Mit allen CPU-Kernen bauen
make -j$(nproc)

$(nproc) gibt die Anzahl der CPU-Kerne zurück. Auf einer 8-Kern-CPU: make -j8

Schritt 5: Installieren

sudo make install

aarch64 Cross-Compilation (für L4Re/ARM64)

Für ARM64-Targets wie L4Re Microkernel:

# Separates Build-Verzeichnis für aarch64
sudo rm -rf /opt/openssl-aarch64-build
sudo mkdir -p /opt/openssl-aarch64-build
sudo chown $(id -u):$(id -g) /opt/openssl-aarch64-build
 
# Quellen kopieren
cd /mnt/d/Workspace/openssl-3.6.0/l4re/src
tar cf - . | tar xf - -C /opt/openssl-aarch64-build
 
# Konfigurieren für aarch64
cd /opt/openssl-aarch64-build
./Configure linux-aarch64 \
    --cross-compile-prefix=aarch64-linux-gnu- \
    --prefix=/opt/openssl-3.6-aarch64 \
    --openssldir=/opt/openssl-3.6-aarch64/ssl \
    shared \
    enable-fips \
    no-async
 
# Bauen
make -j$(nproc)
 
# Ergebnis prüfen
file libcrypto.so.3
# Erwartete Ausgabe: ELF 64-bit LSB shared object, ARM aarch64

Ergebnis

x86_64 Build Output

/opt/openssl-3.6/
├── bin/
│   └── openssl                # CLI Tool
├── include/
│   └── openssl/               # Header für FFI
├── lib64/
│   ├── libcrypto.so.3         # ~7.4 MB - Crypto Library
│   ├── libssl.so.3            # ~1.3 MB - SSL/TLS Library
│   ├── libcrypto.a            # Static Library
│   ├── libssl.a
│   └── ossl-modules/
│       └── fips.so            # ~3.2 MB - FIPS Provider
└── ssl/
    ├── openssl.cnf
    └── fipsmodule.cnf         # FIPS-Konfiguration

aarch64 Build Output

Datei Größe Beschreibung
libcrypto.so.3 ~6.8 MB Crypto Library (ARM64)
libssl.so.3 ~1.2 MB SSL/TLS Library (ARM64)
fips.so ~2.3 MB FIPS Provider (ARM64)
fipsmodule.cnf ~1 KB FIPS-Konfiguration

Testen

# Version prüfen
/opt/openssl-3.6/bin/openssl version -a
# Erwartete Ausgabe: OpenSSL 3.6.0 1 Oct 2025
 
# Provider prüfen (FIPS sollte aufgelistet sein)
/opt/openssl-3.6/bin/openssl list -providers
 
# Post-Quantum Algorithmen prüfen
/opt/openssl-3.6/bin/openssl list -signature-algorithms | grep -i mldsa
/opt/openssl-3.6/bin/openssl list -kem-algorithms | grep -i mlkem
 
# Shared Library Format prüfen
file /opt/openssl-3.6/lib64/libcrypto.so.3
# x86_64: ELF 64-bit LSB shared object, x86-64

Ergebnisse nach Windows kopieren

# x86_64 Libraries
mkdir -p /mnt/d/Workspace/openssl-3.6.0/l4re/bin/x86_64
cp /opt/openssl-3.6/lib64/libcrypto.so.3 /mnt/d/Workspace/openssl-3.6.0/l4re/bin/x86_64/
cp /opt/openssl-3.6/lib64/libssl.so.3 /mnt/d/Workspace/openssl-3.6.0/l4re/bin/x86_64/
cp /opt/openssl-3.6/lib64/ossl-modules/fips.so /mnt/d/Workspace/openssl-3.6.0/l4re/bin/x86_64/
cp /opt/openssl-3.6/ssl/fipsmodule.cnf /mnt/d/Workspace/openssl-3.6.0/l4re/bin/x86_64/
 
# aarch64 Libraries
mkdir -p /mnt/d/Workspace/openssl-3.6.0/l4re/bin/aarch64
cp /opt/openssl-aarch64-build/libcrypto.so.3 /mnt/d/Workspace/openssl-3.6.0/l4re/bin/aarch64/
cp /opt/openssl-aarch64-build/libssl.so.3 /mnt/d/Workspace/openssl-3.6.0/l4re/bin/aarch64/
cp /opt/openssl-aarch64-build/providers/fips.so /mnt/d/Workspace/openssl-3.6.0/l4re/bin/aarch64/
cp /opt/openssl-aarch64-build/providers/fipsmodule.cnf /mnt/d/Workspace/openssl-3.6.0/l4re/bin/aarch64/

Für Docker-Images

Dockerfile Beispiel

FROM ubuntu:24.04 AS builder
 
# Build-Tools installieren
RUN apt-get update && apt-get install -y \
    build-essential perl git wget file
 
# OpenSSL Quellen kopieren
COPY openssl-src/ /build/src/
 
# Bauen mit FIPS
WORKDIR /build/src
RUN ./Configure linux-x86_64 enable-fips --prefix=/opt/openssl && \
    make -j$(nproc) && \
    make install
 
# Runtime Image
FROM ubuntu:24.04
 
# Nur die fertigen Binaries kopieren
COPY --from=builder /opt/openssl /opt/openssl
 
# Pfad setzen
ENV PATH="/opt/openssl/bin:$PATH"
ENV LD_LIBRARY_PATH="/opt/openssl/lib64:$LD_LIBRARY_PATH"

Multi-Stage Build für .NET

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
 
# OpenSSL-Libraries kopieren
COPY --from=openssl-builder /opt/openssl/lib64/libcrypto.so.3 /app/
COPY --from=openssl-builder /opt/openssl/lib64/libssl.so.3 /app/
 
WORKDIR /src
COPY . .
RUN dotnet build -c Release

Fehlerbehebung

"ln: failed to create symbolic link: Operation not permitted"

Problem: Build auf NTFS-Dateisystem (/mnt/d/…)

Lösung: Quellen ins Linux-Dateisystem kopieren (siehe Schritt 2)

USB-Laufwerke werden nicht erkannt

Problem: USB-Datenträger (externe Festplatten, USB-Sticks) werden in WSL2 nicht automatisch gemountet.

Lösung: Manuell mounten mit metadata-Flag:

sudo mkdir -p /mnt/d
sudo mount -t drvfs D: /mnt/d -o metadata

Ohne metadata-Flag werden Dateien möglicherweise nicht korrekt auf das Windows-Dateisystem geschrieben!

"Can't locate OpenSSL/fallback.pm"

Problem: Unvollständige Quellen (util/perl/ fehlt)

Lösung: Quellen mit tar kopieren statt cp -r

Cross-Compilation: "file in wrong format"

Problem: Alte x86_64-Artefakte im Build-Verzeichnis

Lösung: make clean vor dem Build ausführen


Weiter zu


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional Letzte Aktualisierung: 2025-12-16 (verifiziert mit OpenSSL 3.6.0)

Zuletzt geändert: den 29.01.2026 um 15:14