Я создал прокси-сервер MITM Go для перехвата всех запросов. Я также разрабатываю корпоративное приложение Flutter для iOS, которое использует собственное хранилище доверенных сертификатов внутри приложения (поэтому оно не зависит от хранилища доверенных сертификатов ОС), и я сохранил свой сертификат .pem в активах приложения. Проверка сертификата работает для внутренних офисных порталов с использованием хранилища доверенных сертификатов в приложении, но когда я пытаюсь открыть общедоступные порталы, такие как Microsoft Outlook, мой прокси-сервер показывает ошибку TLS: невозможно выполнить рукопожатие: EOF (HTTP 403). Как я могу решить эту проблему?
Я создал прокси-сервер MITM Go для перехвата всех запросов. Я также разрабатываю корпоративное приложение Flutter для iOS, которое использует собственное хранилище доверенных сертификатов внутри приложения (поэтому оно не зависит от хранилища доверенных сертификатов ОС), и я сохранил свой сертификат .pem в активах приложения. Проверка сертификата работает для внутренних офисных порталов с использованием хранилища доверенных сертификатов в приложении, но когда я пытаюсь открыть общедоступные порталы, такие как Microsoft Outlook, мой прокси-сервер показывает ошибку TLS: невозможно выполнить рукопожатие: EOF (HTTP 403). Как я могу решить эту проблему? [code]class WebviewProxyConfig { static const MethodChannel _channel = MethodChannel('webview_proxy_config');
static final WebviewProxyConfig _instance = WebviewProxyConfig._internal(); static WebviewProxyConfig get instance => _instance; WebviewProxyConfig._internal();
Future webivewProxyConfig(String proxyHost, String proxyPort, String endpoint, String userIdHash, String tenantIdHash, String sessionId) async { try { if (Platform.isIOS) { final isTrusted = await CertificateManager.instance.checkCertificateTrustStatus(); if (!isTrusted) { debugPrint("Certificate not trusted. Proxy configuration may not work correctly."); } }
guard let serverTrust = challenge.protectionSpace.serverTrust, let customCA = customCA else { completionHandler(.performDefaultHandling, nil) return }
let anchorCertificates = [customCA] as CFArray SecTrustSetAnchorCertificates(serverTrust, anchorCertificates)
var error: CFError? let isTrusted = SecTrustEvaluateWithError(serverTrust, &error)
if isTrusted { completionHandler(.useCredential, URLCredential(trust: serverTrust)) } else { print("Custom Native Validation Failed for \(challenge.protectionSpace.host)") completionHandler(.cancelAuthenticationChallenge, nil) } } [/code] Все шаги и код, которые я упомянул, описывают мой подход.