Close #536: macos include OpenSSL legacy provider

Put it into the "PlugIns" directory and load it from there.
Show whether the legacy-provider was loaded in the About-Dialog.

CmakeLists.txt: Improve OpenSSL Major version detection
and replace the foreach() loop in misc/CMakeLists.txt
by the simpler list(TRANSFORM ...)
This commit is contained in:
Christian Hohnstaedt 2024-03-09 23:57:06 +01:00
parent c0df4b5740
commit b395eaa5cc
6 changed files with 37 additions and 15 deletions

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.16.0)
cmake_minimum_required(VERSION 3.19.0)
project(xca
DESCRIPTION "X Certificate and Key management"
@ -87,6 +87,11 @@ add_executable(xcadoc ${PROJECT_BINARY_DIR}/local.h)
include_directories(${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR})
if (NOT OPENSSL_VERSION)
# Educated guess
set(OPENSSL_VERSION 3.0.0)
endif()
if (APPLE)
execute_process(COMMAND brew --prefix OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE BREW_PREFIX ERROR_QUIET)
@ -98,8 +103,10 @@ elseif(WIN32)
if (NOT CMAKE_PREFIX_PATH)
set(CMAKE_PREFIX_PATH $ENV{UserProfile} $ENV{PROGRAMFILES}/OpenSSL-Win64)
endif()
if (NOT OPENSSL_LIBRARY_MAJOR)
set(OPENSSL_LIBRARY_MAJOR 3) # For OpenSSL 1.1.1 use "1_1"
if (OPENSSL_VERSION VERSION_GREATER_EQUAL 3.0.0)
set(OPENSSL_LIBRARY_MAJOR "3")
else()
set(OPENSSL_LIBRARY_MAJOR "1_1")
endif()
file(TO_CMAKE_PATH $ENV{WINDIR}/system32 SYSTEM32)
endif()
@ -119,6 +126,7 @@ get_filename_component(_qt_bin_dir "${qmake_executable}" DIRECTORY)
if (NOT OPENSSL_ROOT_DIR)
get_filename_component(OPENSSL_ROOT_DIR ${OPENSSL_INCLUDE_DIR} DIRECTORY)
endif()
file(TO_CMAKE_PATH ${OPENSSL_ROOT_DIR} OPENSSL_ROOT_DIR)
target_link_libraries(xcalib
OpenSSL::Crypto
@ -204,6 +212,13 @@ if(APPLE)
-always-overwrite ${APPSTORE}
COMMENT "Running macdeployqt..."
)
if (OPENSSL_VERSION VERSION_GREATER_EQUAL 3.0.0)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND cmake -E copy ${OPENSSL_ROOT_DIR}/lib/ossl-modules/legacy.dylib
$<TARGET_FILE_DIR:${PROJECT_NAME}>/../PlugIns/
COMMENT "Install OpenSSL legacy provider"
)
endif()
if (PROVISIONPROFILE)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND cmake -E copy ${PROVISIONPROFILE}
@ -269,7 +284,7 @@ elseif(WIN32)
${OPENSSL_ROOT_DIR}/bin/libcrypto-${OPENSSL_LIBRARY_MAJOR}-x64.dll
DESTINATION ${RUNTIME_DEST}
)
if (OPENSSL_LIBRARY_MAJOR EQUAL 3)
if (OPENSSL_VERSION VERSION_GREATER_EQUAL 3.0.0)
install(FILES ${OPENSSL_ROOT_DIR}/lib/ossl-modules/legacy.dll
DESTINATION ${RUNTIME_DEST})
endif()

View File

@ -119,13 +119,20 @@ int main(int argc, char *argv[])
}
#if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
{
QString path;
#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();
path = QCoreApplication::applicationDirPath();
#elif defined(Q_OS_MACOS)
path = QCoreApplication::applicationDirPath() + "/../PlugIns";
#endif
if (OSSL_PROVIDER_try_load(0, "legacy", 1))
if (!path.isEmpty()) {
OSSL_PROVIDER_set_default_search_path(NULL, path.toUtf8().data());
qDebug() << "OSSL_PROVIDER_set_default_search_path" << path;
}
}
MainWindow::legacy_loaded = OSSL_PROVIDER_try_load(0, "legacy", 1);
if (MainWindow::legacy_loaded)
qDebug() << "Legacy provider loaded";
else
qWarning() << "Legacy provider NOT loaded";

View File

@ -14,10 +14,8 @@ set_property(TARGET ${PROJECT_NAME}
PROPERTY MACOSX_BUNDLE_INFO_PLIST ${D}/Info.plist)
##### XCA Templates
set(TEMPLATES CA.xca TLS_server.xca TLS_client.xca)
foreach(templ ${TEMPLATES})
list(APPEND XCA_TEMPLATES ${S}/${templ})
endforeach()
list(APPEND XCA_TEMPLATES CA.xca TLS_server.xca TLS_client.xca)
list(TRANSFORM XCA_TEMPLATES PREPEND ${S}/)
target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${XCA_TEMPLATES})
list(APPEND APP_RESOURCES "${XCA_TEMPLATES}")

View File

@ -106,7 +106,7 @@ void MainWindow::about()
"<p>Copyright 2001 - 2024 by Christian Hohnstädt\n"
"<p>Version: %3<p>%1" /* commithash, OpenSSL & Qt Version */
"<p><a href=\"https://hohnstaedt.de/xca\">https://hohnstaedt.de/xca</a>"
"<p>Entropy strength: %2"
"<p>OpenSSL legacy provider%2 loaded"
"<p><table border=\"0\">"
"<tr><td>Installation path:</td><td>%4</td></tr>"
"<tr><td>User settings path:</td><td>%5</td></tr>"
@ -120,7 +120,7 @@ void MainWindow::about()
"</table><hr><center><u><b>Maintained Translations</b></u></center>"
"<p><table><tr>%8</tr></table>")
.arg(version)
.arg(Entropy::strength())
.arg(legacy_loaded ? "" : " not")
.arg(version_str(true))
.arg(nativeSeparator(QCoreApplication::applicationDirPath()))
.arg(nativeSeparator(getUserSettingsDir()))

View File

@ -47,6 +47,7 @@
OidResolver *MainWindow::resolver;
MainWindow *mainwin;
bool MainWindow::legacy_loaded;
void MainWindow::enableTokenMenu(bool enable)
{

View File

@ -89,6 +89,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow
void showDatabaseName();
public:
static bool legacy_loaded;
int exitApp;
QLabel *dbindex;
Help *helpdlg;