• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - SSL 证书混淆

[复制链接]
菜鸟教程小白 发表于 2022-12-12 19:02:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我显然错过了啊哈!因为我一直在研究使用 CA 或自签名证书等以获得对安全 URL https 的访问权限,但我仍然无法完全理解它,我主要是在与其他人代码和解决方案一起尝试并获得我的工作,我显然缺乏基本的了解,所以希望该网站的居民可以提供帮助。

基本上,我有一个使用自签名证书与 https 服务器通信的应用程序。

我认为访问服务器所需的证书和 key 都存储在存储在应用程序根包中的 p12 中。然后我通过我在互联网上找到的这段代码将这个 p12 添加到手机或应用程序钥匙串(keychain)中

NSString *p12Path = [[NSBundle mainBundle] pathForResource:p12Name ofType"p12"];
NSData *p12Data = [[NSData alloc] initWithContentsOfFile:p12Path];
NSError *error = nil;
NSData *data = [[SFHFKeychainUtils getPasswordForUsername:[[UIDevice currentDevice]name] andServiceName:serviceName error:&error] dataUsingEncoding:NSUTF8StringEncoding];
[self transform:data];
NSString *pass = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
CFStringRef password = (__bridge CFStringRef)pass;
const void *keys[] = { kSecImportExportPassphrase };
const void *values[] = { password };
CFDictionaryRef optionsDictionary = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL);
CFArrayRef p12Items;

OSStatus result = SecPKCS12Import((__bridge CFDataRef)p12Data, optionsDictionary,&p12Items);

if(result == noErr)
{
    CFDictionaryRef identityDict = CFArrayGetValueAtIndex(p12Items, 0);
    SecIdentityRef identityApp =(SecIdentityRef)CFDictionaryGetValue(identityDict,kSecImportItemIdentity);

    SecCertificateRef certRef;
    SecIdentityCopyCertificate(identityApp,&certRef);

    SecCertificateRef certArray[1] = { certRef };
    CFArrayRef myCerts = CFArrayCreate(NULL, (void *)certArray, 1, NULL);
    CFRelease(certRef);

    NSURLCredential *credential = [NSURLCredential credentialWithIdentity:identityApp certificates__bridge NSArray *)myCerts persistence:NSURLCredentialPersistencePermanent];
    CFRelease(myCerts);

    [[RKObjectManager sharedManager].HTTPClient setDefaultCredential:credential];
}

而且,这似乎有效,但我必须启用它

_httpClient = [RKObjectManager sharedManager].HTTPClient;
[_httpClient setAllowsInvalidSSLCertificate:YES];

否则它无法连接,现在我看到各种帖子说,你需要将此设置为是以允许自签名证书,但同时我看到其他帖子说它应该只用于开发否则这会使使用 https 完全多余。显然冗余安全性很差,所以我将其设置为 no...并且它无法连接。

那么,真的有人有任何链接,或者可以抽出一些时间自己来填补我对这些东西如何工作的知识空白吗?这将不胜感激,并且不会让我从老板那里得到悲伤。



Best Answer-推荐答案


这需要由 AFNetworking 处理,称为“SSL Pinning”。查看文档 here有关如何启用该功能并提供您的证书的详细信息。还有有用的信息here .

关于ios - SSL 证书混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870770/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap