Ответ
Основное решение — обновить сертификат на сервере. После этого клиентские приложения заработают без изменений.
Временные решения (только для тестирования):
-
Отключить проверку сертификата в коде (iOS):
class UnsafeCertificateDelegate: NSObject, URLSessionDelegate { func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { // Опасность: принимаем любой сертификат let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!) completionHandler(.useCredential, credential) } } } // Использование let config = URLSessionConfiguration.default let session = URLSession(configuration: config, delegate: UnsafeCertificateDelegate(), delegateQueue: nil) -
Добавить исключение ATS в
Info.plist:<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>
Важно: Эти методы нельзя использовать в production. Они обходят защиту, делая соединение уязвимым для атак "человек посередине" (MITM). В продакшене всегда используйте валидные сертификаты от доверенных центров сертификации (CA).