diff options
| author | Bug Magnet <marco.nikic@mullvad.net> | 2024-10-14 15:28:50 +0200 |
|---|---|---|
| committer | Bug Magnet <marco.nikic@mullvad.net> | 2024-10-14 15:28:52 +0200 |
| commit | 2cdf896f101e0179dca78146d2ccd935e4591135 (patch) | |
| tree | d09853d96987d04617f9be1c05bd8d1701517e13 /ios/MullvadREST | |
| parent | 12ccbe386fc41f0bca6b047434cbd9483953cc8d (diff) | |
| download | mullvadvpn-2cdf896f101e0179dca78146d2ccd935e4591135.tar.xz mullvadvpn-2cdf896f101e0179dca78146d2ccd935e4591135.zip | |
Check AddressCache as well when overriding hostname for SSL validation
Diffstat (limited to 'ios/MullvadREST')
3 files changed, 9 insertions, 4 deletions
diff --git a/ios/MullvadREST/ApiHandlers/RESTURLSession.swift b/ios/MullvadREST/ApiHandlers/RESTURLSession.swift index 99bafcee3c..a1c6431df4 100644 --- a/ios/MullvadREST/ApiHandlers/RESTURLSession.swift +++ b/ios/MullvadREST/ApiHandlers/RESTURLSession.swift @@ -7,9 +7,10 @@ // import Foundation +import Network extension REST { - public static func makeURLSession() -> URLSession { + public static func makeURLSession(addressCache: AddressCache) -> URLSession { let certificatePath = Bundle(for: SSLPinningURLSessionDelegate.self) .path(forResource: "le_root_cert", ofType: "cer")! let data = FileManager.default.contents(atPath: certificatePath)! @@ -17,7 +18,8 @@ extension REST { let sessionDelegate = SSLPinningURLSessionDelegate( sslHostname: defaultAPIHostname, - trustedRootCertificates: [secCertificate] + trustedRootCertificates: [secCertificate], + addressCache: addressCache ) let sessionConfiguration = URLSessionConfiguration.ephemeral diff --git a/ios/MullvadREST/ApiHandlers/SSLPinningURLSessionDelegate.swift b/ios/MullvadREST/ApiHandlers/SSLPinningURLSessionDelegate.swift index 2d0d1ca406..a5fd867770 100644 --- a/ios/MullvadREST/ApiHandlers/SSLPinningURLSessionDelegate.swift +++ b/ios/MullvadREST/ApiHandlers/SSLPinningURLSessionDelegate.swift @@ -14,12 +14,14 @@ import Security final class SSLPinningURLSessionDelegate: NSObject, URLSessionDelegate { private let sslHostname: String private let trustedRootCertificates: [SecCertificate] + private let addressCache: REST.AddressCache private let logger = Logger(label: "SSLPinningURLSessionDelegate") - init(sslHostname: String, trustedRootCertificates: [SecCertificate]) { + init(sslHostname: String, trustedRootCertificates: [SecCertificate], addressCache: REST.AddressCache) { self.sslHostname = sslHostname self.trustedRootCertificates = trustedRootCertificates + self.addressCache = addressCache } // MARK: - URLSessionDelegate @@ -40,6 +42,7 @@ final class SSLPinningURLSessionDelegate: NSObject, URLSessionDelegate { "\(IPv4Address.loopback)", "\(IPv6Address.loopback)", "\(REST.defaultAPIEndpoint.ip)", + "\(addressCache.getCurrentEndpoint().ip)", ] if overridenHostnames.contains(hostName) { hostName = sslHostname diff --git a/ios/MullvadREST/Transport/ProxyConfigurationTransportProvider.swift b/ios/MullvadREST/Transport/ProxyConfigurationTransportProvider.swift index b17a9bd043..6d20fa1440 100644 --- a/ios/MullvadREST/Transport/ProxyConfigurationTransportProvider.swift +++ b/ios/MullvadREST/Transport/ProxyConfigurationTransportProvider.swift @@ -27,7 +27,7 @@ public class ProxyConfigurationTransportProvider { } public func makeTransport(with configuration: PersistentProxyConfiguration) throws -> RESTTransport { - let urlSession = REST.makeURLSession() + let urlSession = REST.makeURLSession(addressCache: addressCache) switch configuration { case .direct: return URLSessionTransport(urlSession: urlSession) |
