Update Windows build to install legacy.dll

Enable legacy provider to allow loading keys
encrypted with an ancient, insecure
algorithm like "pbeWithSHA1And40BitRC2-CBC" for PKCS#12/PFX

Install the dynamic.dll in the portable app and WIX installer.
This commit is contained in:
Christian 2024-02-12 20:28:24 +01:00 committed by Christian Hohnstaedt
parent 44be50a42f
commit a20e810405
4 changed files with 27 additions and 15 deletions

View File

@ -249,7 +249,7 @@ elseif(WIN32)
${CMAKE_BINARY_DIR}/doc/documentation.wxs
${CMAKE_BINARY_DIR}/misc/misc.wxs
${CMAKE_BINARY_DIR}/misc/dynamic.wxs
)
)
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE -mwindows -MD)
install(DIRECTORY
${CMAKE_BINARY_DIR}/platforms
@ -269,6 +269,10 @@ elseif(WIN32)
${OPENSSL_ROOT_DIR}/bin/libcrypto-${OPENSSL_LIBRARY_MAJOR}-x64.dll
DESTINATION ${RUNTIME_DEST}
)
if (OPENSSL_LIBRARY_MAJOR EQUAL 3)
install(FILES ${OPENSSL_ROOT_DIR}/lib/ossl-modules/legacy.dll
DESTINATION ${RUNTIME_DEST})
endif()
install(CODE "execute_process(COMMAND cmake -E chdir \${CMAKE_INSTALL_PREFIX} tar cvf ${RUNTIME_DEST}.zip --format=zip -- ${RUNTIME_DEST})")
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR})

View File

@ -103,12 +103,6 @@ int main(int argc, char *argv[])
signal(SIGSEGV, segv_handler_gui);
#endif
#if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
if (OSSL_PROVIDER_try_load(0, "legacy", 1))
qDebug() << "Legacy provider loaded";
else
qWarning() << "Legacy provider NOT loaded";
#endif
bool console_only = arguments::is_console(argc, argv);
XcaApplication *gui = nullptr;
QCoreApplication *coreApp = nullptr;
@ -124,6 +118,18 @@ int main(int argc, char *argv[])
is_gui_app = true;
}
#if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
#if defined(Q_OS_WIN32)
OSSL_PROVIDER_set_default_search_path(NULL,
QCoreApplication::applicationDirPath().toUtf8().data());
qDebug() << "OSSL_PROVIDER_set_default_search_path"
<< QCoreApplication::applicationDirPath();
#endif
if (OSSL_PROVIDER_try_load(0, "legacy", 1))
qDebug() << "Legacy provider loaded";
else
qWarning() << "Legacy provider NOT loaded";
#endif
QSharedPointer<UI_METHOD> uimeth(
UI_create_method("xca-method"), UI_destroy_method);
UI_method_set_writer(uimeth.data(), uiwriter);

View File

@ -5,6 +5,9 @@
<DirectoryRef Id="INSTALLDIR">
<Component Id="Clibcrypto11x64" Guid="44133d17-96b5-4aee-8a24-9c722482add5">
<File Id="libcrypto11x64.dll" Source="@OPENSSL_ROOT_DIR@/bin/libcrypto-@OPENSSL_LIBRARY_MAJOR@-x64.dll" KeyPath="yes"/>
<?if @OPENSSL_LIBRARY_MAJOR@ = 3 ?>
<File Id="libcryptolegacy.dll" Source="@OPENSSL_ROOT_DIR@/lib/ossl-modules/legacy.dll"/>
<?endif?>
</Component>
<Component Id="Cvcruntime140" Guid="f0b03b2a-14f7-4631-bfe3-d4c6c9b57e1d">
<File Id="vcruntime140.dll" Source="@SYSTEM32@/vcruntime140.dll" KeyPath="yes"/>

View File

@ -8,27 +8,26 @@ do_openssl() {
test -f "$OSSL".tar.gz || curl -O https://www.openssl.org/source/"$OSSL".tar.gz
test -d "$OSSL" || tar zxf "$OSSL".tar.gz
cd "$OSSL"
./Configure mingw64 --prefix=/c/OpenSSL --libdir=lib
./Configure mingw64 --prefix=$INSTALL_DIR --libdir=lib
make -j4
make install
}
BUILD=build
OSSL="openssl-3.1.4"
OSSL="openssl-3.1.5"
XCA_DIR="$(cd `dirname $0`/.. && pwd)"
TOP_DIR="`dirname $XCA_DIR`"
QT_DIR="$TOP_DIR/6.5.3/mingw_64"
QT_DIR="$TOP_DIR/QT/6.6.0/mingw_64"
BUILDDIR="$TOP_DIR/w64-release"
INSTALL_DIR="/c/OpenSSL"
JOBS=7
cd $TOP_DIR
PATH="$TOP_DIR/QT/Tools/mingw1120_64/bin:$INSTALL_DIR/bin:$PATH"
cd $TOP_DIR
do_openssl
cmake -B "$BUILDDIR" -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH="$QT_DIR" xca
cd $TOP_DIR
cmake -B "$BUILDDIR" -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH="$QT_DIR:$INSTALL_DIR" xca
cmake --build "$BUILDDIR" -j5
cmake --build "$BUILDDIR" -t install
cd "$BUILDDIR" && cpack