diff --git a/client/cmake/ios.cmake b/client/cmake/ios.cmake index ab820c712..1e30afb1e 100644 --- a/client/cmake/ios.cmake +++ b/client/cmake/ios.cmake @@ -136,10 +136,21 @@ set_property(TARGET ${PROJECT} APPEND PROPERTY RESOURCE add_subdirectory(ios/networkextension) add_dependencies(${PROJECT} networkextension) -set_property(TARGET ${PROJECT} PROPERTY XCODE_EMBED_FRAMEWORKS - "${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/OpenVPNAdapter.framework" +set(OPENVPN_FRAMEWORK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios") +set(OPENVPN_EMBEDDED_FRAMEWORKS + "${OPENVPN_FRAMEWORK_DIR}/OpenVPNAdapter.framework" + "${OPENVPN_FRAMEWORK_DIR}/OpenVPNClient.framework" + "${OPENVPN_FRAMEWORK_DIR}/mbedTLS.framework" + "${OPENVPN_FRAMEWORK_DIR}/LZ4.framework" ) -set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/) -target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/OpenVPNAdapter.framework") +set_property(TARGET ${PROJECT} PROPERTY XCODE_EMBED_FRAMEWORKS "${OPENVPN_EMBEDDED_FRAMEWORKS}") +set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS "$(inherited) ${OPENVPN_FRAMEWORK_DIR}") +foreach(_framework ${OPENVPN_EMBEDDED_FRAMEWORKS}) + target_link_libraries(networkextension PRIVATE "${_framework}") +endforeach() + +set_property(TARGET networkextension PROPERTY XCODE_EMBED_FRAMEWORKS "${OPENVPN_EMBEDDED_FRAMEWORKS}") +set_property(TARGET networkextension PROPERTY XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY ON) +set_property(TARGET networkextension PROPERTY XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS "$(inherited) ${OPENVPN_FRAMEWORK_DIR}") diff --git a/client/configurators/openvpn_configurator.cpp b/client/configurators/openvpn_configurator.cpp index bb3dbd4c6..75c611d76 100644 --- a/client/configurators/openvpn_configurator.cpp +++ b/client/configurators/openvpn_configurator.cpp @@ -83,12 +83,30 @@ QString OpenVpnConfigurator::createConfig(const ServerCredentials &credentials, return ""; } + auto sanitizeStaticKey = [](const QString &key) { + QStringList lines = key.split('\n'); + QStringList filtered; + filtered.reserve(lines.size()); + for (const QString &line : lines) { + const QString trimmed = line.trimmed(); + if (trimmed.startsWith('#')) { + continue; + } + filtered.append(line); + } + QString result = filtered.join('\n'); + if (!result.endsWith('\n')) { + result.append('\n'); + } + return result; + }; + config.replace("$OPENVPN_CA_CERT", connData.caCert); config.replace("$OPENVPN_CLIENT_CERT", connData.clientCert); config.replace("$OPENVPN_PRIV_KEY", connData.privKey); if (config.contains("$OPENVPN_TA_KEY")) { - config.replace("$OPENVPN_TA_KEY", connData.taKey); + config.replace("$OPENVPN_TA_KEY", sanitizeStaticKey(connData.taKey)); } else { config.replace("", ""); config.replace("", ""); @@ -117,7 +135,7 @@ QString OpenVpnConfigurator::processConfigWithLocalSettings(const QPair Void) { ovpnLog(.info, message: "Setup and launch") - let str = String(decoding: ovpnConfiguration, as: UTF8.self) + var configString = String(decoding: ovpnConfiguration, as: UTF8.self) + + let digest = SHA256.hash(data: ovpnConfiguration) + let digestString = digest.map { String(format: "%02x", $0) }.joined() + ovpnLog(.info, title: "ConfigDigest", message: digestString) + + let hasTlsAuthOpen = configString.contains("") + let hasTlsAuthClose = configString.contains("") + ovpnLog(.info, title: "ConfigFlags", message: "tls-auth open=\(hasTlsAuthOpen) close=\(hasTlsAuthClose)") + + let lines = configString.split(separator: "\n") + let head = lines.prefix(10).joined(separator: "\n") + let tail = lines.suffix(10).joined(separator: "\n") + ovpnLog(.debug, title: "ConfigHead", message: head) + ovpnLog(.debug, title: "ConfigTail", message: tail) + + if let start = configString.range(of: ""), + let end = configString.range(of: "", range: start.upperBound..