Inhaltsverzeichnis
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
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)