OpenSSL wird nicht geladen
PostQuantumConfig.EnablePostQuantum oder die erste Operation mit PQ-Anteil wirft eine
CryptographicException mit einer dieser Meldungen:
PostQuantumConfig.OpenSslPath 'C:\OpenSSL\bin' does not exist. 'libcrypto-3-x64.dll' not found in PostQuantumConfig.OpenSslPath 'C:\OpenSSL\bin'. 'libcrypto.so.3' not found in the default library search path. Install OpenSSL 3.5 or later, or set PostQuantumConfig.OpenSslPath. OpenSSL 3.0.0 or higher required. Found version 1.1.1 in 'C:\OpenSSL\bin\libcrypto-3-x64.dll'. Cannot load 'C:\OpenSSL\bin\libcrypto-3.dll': Win32 error 193 (a 32-bit process needs the x86 build of OpenSSL). PostQuantumConfig.OpenSslPath was changed to 'D:\other' after libcrypto had been loaded from 'C:\OpenSSL\bin\libcrypto-3-x64.dll'. Set OpenSslPath before the first cryptographic operation.
Umgebung
Alle Zielsysteme mit dem Anbieter für OpenSSL: .NET Framework, .NET Core 3.1 und .NET 8 unter Windows, Linux und macOS. Blazor WebAssembly ist nicht betroffen, weil es OpenSSL als WebAssembly-Modul mitbringt.
Ursache
Die Bibliothek lädt libcrypto einmal je Prozess, aus PostQuantumConfig.OpenSslPath oder, ohne diese
Angabe, über die Bibliothekssuche des Betriebssystems. Sie prüft danach, ob die Datei die Schnittstelle von
OpenSSL 3 hat, also mindestens Version 3.0. Die Meldung nennt, welcher Schritt gescheitert ist:
| Meldung | Ursache |
|---|---|
does not exist | Das Verzeichnis in OpenSslPath gibt es nicht. |
not found in PostQuantumConfig.OpenSslPath | Im Verzeichnis fehlt die Datei mit dem Namen, den Betriebssystem und Prozessarchitektur verlangen. |
not found in the default library search path | Ohne OpenSslPath hat die Suche des Betriebssystems keine libcrypto gefunden. |
or higher required. Found version | Die Datei trägt den Namen einer OpenSSL-3-Bibliothek, ist aber älter als 3.0, etwa eine umbenannte Kopie. |
Win32 error 193 | Die Datei passt nicht zur Prozessarchitektur, etwa eine 64-Bit-DLL in einem 32-Bit-Prozess. |
was changed to … after libcrypto had been loaded | OpenSslPath wurde nach dem ersten Laden geändert. Die Bibliothek wechselt die Installation während eines Prozesses nicht. |
Lösung
- Installieren Sie OpenSSL ab 3.5 für die Architektur des Prozesses: 64 Bit, 32 Bit oder ARM. Ab 3.5 bietet der Default-Provider ML-DSA und ML-KEM an.
- Setzen Sie
PostQuantumConfig.OpenSslPathbeim Start der Anwendung auf das Verzeichnis mitlibcrypto, bevor die erste kryptografische Operation läuft. Unter Windows ist das das Verzeichnisbinder Installation. - Prüfen Sie den Dateinamen:
libcrypto-3-x64.dll(Windows, 64 Bit),libcrypto-3.dll(Windows, 32 Bit),libcrypto-3-arm64.dll(Windows auf ARM),libcrypto.so.3(Linux),libcrypto.3.dylib(macOS). - Ändern Sie
OpenSslPathnach dem Start nicht mehr. Für eine andere Installation starten Sie den Prozess neu.
Nach einem gescheiterten EnablePostQuantum enthält PostQuantumConfig.InitializationError die Meldung, und
DefaultMode behält seinen bisherigen Wert. Wie Sie OpenSSL einbinden, beschreibt
So binden Sie OpenSSL ein. Lädt OpenSSL, bietet aber ML-DSA oder ML-KEM
nicht an, hilft OpenSSL bietet ML-DSA oder ML-KEM nicht an.