ios - 我在 ios 中的 webview 上传递 ssl 证书时遇到问题

标签 ios ssl-certificate

我正在使用 uiwebview。我已将 ssl pinning 应用于 AFNetworking API 调用。但我无法在 webview 上传递证书固定。我需要知道如何在 webview 重定向上传递 ssl 证书固定。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [LivefyreAPICalls sslpinning:manager :@"certificate.com" :@"cer"];

NSString *content =[request.URL absoluteString];
    NSArray *urlComponents = [content componentsSeparatedByString:@"&"];

for (NSString *keyValuePair in urlComponents)
{
    NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];
    NSString *key = [[pairComponents firstObject] stringByRemovingPercentEncoding];
    NSString *value = [[pairComponents lastObject] stringByRemovingPercentEncoding];
    [queryStringDictionary setObject:value forKey:key];
}

if ([queryStringDictionary valueForKey:@"id_token"]) {
    [[UserNetwork manager] setUserFromSessionFromToken:[queryStringDictionary valueForKey:@"id_token"] :nil];
    if ([UserNetwork manager].networkUsers.count >=1) {

        SettingsViewController *settingsView=[self.storyboard instantiateViewControllerWithIdentifier:@"SettingsViewController"];
        [self.navigationController pushViewController:settingsView animated:NO];
    }else{
        LiveBlogsTableViewController *blogView=[self.storyboard instantiateViewControllerWithIdentifier:@"liveblog"];
        [self.navigationController pushViewController:blogView animated:YES];
    }
}
return YES;
}

最佳答案

UiWebView 没有公开任何直接的 API,但它仍然可以使用 NSURLProtocol 实现,它使您能够验证所有传出网络请求的证书。虽然它确实需要做很多工作,但更好的解决方案是使用 WKWebView,它提供了一种通过 WKNavigationDelegate's webView:didReceiveAuthenticationChallenge 进行固定的明确方法: completionHandler: ( https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKNavigationDelegate_Ref/index.html ).

本文的“在 Web View 中固定”部分有更多详细信息:https://datatheorem.github.io/TrustKit/getting-started.html它也是一个用于在 iOS 应用程序中实现公钥固定的库。

也请查看此链接:

https://github.com/antekarin/ssl-pinning-swift

同时查看此博客: http://ryandavis.io/allowing-uiwebview-to-accept-self-signed-certificates/

关于ios - 我在 ios 中的 webview 上传递 ssl 证书时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43615299/

相关文章:

ios - 在另一个 ViewController 中更改元素

ios - 如何在钛合金 XML 中支持不同的分辨率

java - 使用 InstallCert.java 下载可信证书

ssl - 如何验证 SSL 密码列表?

security - 关于 SSL 和 HTTPS 的好文章?

android - 具有离线访问和本地安全性和跨平台的类似 Google Drive/Dropbox 的解决方案

ios - viewForHeaderInSection 滚动时消失

ios - 夏令时与 NSTimeZone 最佳实践

azure - 能否将 SSL 证书与即用即付的 Azure 应用服务相关联?

ssl - 安全和获取证书 : designing a protocol