====== Troubleshooting ======
Hier finden Sie Lösungen für häufige Probleme beim OpenSSL Build.
----
===== Build-Fehler =====
==== "stdlib.h not found" oder "windows.h not found" ====
**Symptom:**
fatal error C1083: Cannot open include file: 'stdlib.h': No such file or directory
**Ursache:** Windows SDK nicht installiert oder nicht im Pfad.
**Lösung:**
# Option 1: Windows SDK installieren
winget install Microsoft.WindowsSDK.10.0.22621
# Option 2: In Visual Studio Installer
# → "Einzelne Komponenten" → "Windows 10 SDK" auswählen
Dann: Visual Studio Umgebung neu laden:
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
----
==== "perl is not recognized" ====
**Symptom:**
'perl' is not recognized as an internal or external command
**Ursache:** Perl nicht installiert oder nicht im PATH.
**Lösung:**
# Perl installieren
winget install StrawberryPerl.StrawberryPerl
# PATH manuell setzen (falls nach Neustart immer noch nicht gefunden)
set PATH=C:\Strawberry\perl\bin;%PATH%
----
==== "NASM not found" ====
**Symptom:**
NASM not found - please read INSTALL.md
**Ursache:** NASM nicht installiert oder nicht im PATH.
**Lösung A: NASM installieren (empfohlen)**
winget install NASM.NASM
# PATH setzen (Pfad kann variieren!)
set PATH=%LOCALAPPDATA%\bin\NASM;%PATH%
# Prüfen
nasm -v
**Lösung B: Ohne NASM bauen (langsamer)**
perl Configure VC-WIN64A no-asm --prefix=D:\Projects\openssl-3.6.0\bin
Ohne NASM sind AES und SHA deutlich langsamer!
----
==== "cl.exe not found" ====
**Symptom:**
'cl' is not recognized as an internal or external command
**Ursache:** Visual Studio Umgebung nicht geladen.
**Lösung:**
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
**Tipp:** Starten Sie immer mit der "Developer Command Prompt for VS 2022" aus dem Startmenü - dort ist die Umgebung bereits geladen.
----
==== "nmake hängt bei 'nmake clean'" ====
**Symptom:** ''nmake clean'' antwortet nicht oder bricht mit Fehler ab.
**Ursache:** Bekanntes Problem bei vorherigen fehlgeschlagenen Builds.
**Lösung:**
# Makefile manuell löschen
del makefile
# Neu konfigurieren
perl Configure VC-WIN64A --prefix=D:\Projects\openssl-3.6.0\bin
# Neu bauen
nmake
----
==== "LNK1181: cannot open input file '*.obj'" ====
**Symptom:**
LINK : fatal error LNK1181: cannot open input file 'crypto\aes\aes-x86_64.obj'
**Ursache:** Vorheriger Build fehlgeschlagen, Objektdateien fehlen.
**Lösung:**
# Alles löschen und neu starten
del makefile
nmake clean 2>nul
perl Configure VC-WIN64A --prefix=D:\Projects\openssl-3.6.0\bin
nmake
----
===== PowerShell-Probleme =====
==== "cl.exe verursacht Fehler trotz Erfolg" ====
**Symptom:** PowerShell-Skript bricht ab, obwohl ''cl.exe'' funktioniert.
**Ursache:** ''cl.exe'' schreibt Versionsinformationen nach stderr, was bei ''$ErrorActionPreference = "Stop"'' als Fehler interpretiert wird.
**Lösung im Skript:**
# cl.exe Ausgabe richtig behandeln
try {
$clOutput = & cl 2>&1 | Out-String
Write-Host "cl.exe gefunden"
} catch {
Write-Host "cl.exe gefunden (stderr ignoriert)"
}
----
==== "Execution Policy verhindert Skript" ====
**Symptom:**
File D:\...\build_openssl.ps1 cannot be loaded because running scripts is disabled
**Lösung:**
# Option 1: Für diese Session erlauben
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
# Option 2: Beim Aufruf umgehen
powershell.exe -ExecutionPolicy Bypass -File "build_openssl.ps1"
----
===== Laufzeit-Probleme =====
==== "DLL not found" bei Programmstart ====
**Symptom:**
The program can't start because libcrypto-3-x64.dll is missing
**Lösung:**
1. DLLs in den Anwendungsordner kopieren:
copy D:\Projects\openssl-3.6.0\bin\bin\libcrypto-3-x64.dll .\
copy D:\Projects\openssl-3.6.0\bin\bin\libssl-3-x64.dll .\
2. Oder in .csproj automatisch kopieren:
PreserveNewest
PreserveNewest
----
==== "ML-DSA/ML-KEM nicht verfügbar" ====
**Symptom:**
openssl list -signature-algorithms | findstr mldsa
# Keine Ausgabe
**Mögliche Ursachen:**
1. **Falsche OpenSSL-Version** - Benötigt 3.6.0 oder neuer
openssl version
# Muss sein: OpenSSL 3.6.0 oder höher
2. **Provider nicht geladen**
openssl list -providers
# Sollte "default" und eventuell "oqsprovider" zeigen
----
==== "FIPS provider not available" ====
**Symptom:**
openssl list -providers
# Zeigt kein "fips"
**Lösung:**
1. Wurde mit ''enable-fips'' gebaut?
perl Configure VC-WIN64A enable-fips --prefix=...
nmake
nmake install_sw install_fips
2. Ist ''openssl.cnf'' korrekt konfiguriert?
# In openssl.cnf:
[openssl_init]
providers = provider_sect
[provider_sect]
fips = fips_sect
base = base_sect
[fips_sect]
activate = 1
[base_sect]
activate = 1
----
===== Netzwerk-Probleme =====
==== "Git clone schlägt fehl" ====
**Symptom:** Timeout oder Verbindungsfehler bei ''git clone''.
**Lösung für Unternehmens-Proxy:**
# Proxy konfigurieren
git config --global http.proxy http://proxy.firma.de:8080
git config --global https.proxy http://proxy.firma.de:8080
**Lösung für SSL-Zertifikatfehler:**
# Temporär SSL-Prüfung deaktivieren (nur für Download!)
git config --global http.sslVerify false
# Nach Download wieder aktivieren
git config --global http.sslVerify true
----
===== Weitere Hilfe =====
Falls Ihr Problem hier nicht aufgeführt ist:
* [[https://github.com/openssl/openssl/blob/master/NOTES-WINDOWS.md|OpenSSL Windows Notes]]
* [[https://github.com/openssl/openssl/issues|OpenSSL GitHub Issues]]
* [[https://stackoverflow.com/questions/tagged/openssl|StackOverflow OpenSSL]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//