AFNetWorking https 双向认证

客户端验证服务端证书:

需要http配置路径需要域名

1:先项目中倒入服务端证书 sever.cer,

2.然后设置 AFSecurityPolicy

self.manager = [AFHTTPRequestOperationManager manager];

self.manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init];

[self.manager.requestSerializer setValue:@"iphone" forHTTPHeaderField:@"header-platform"];

self.manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];

self.manager.securityPolicy.allowInvalidCertificates = YES;

self.manager.securityPolicy.validatesDomainName = NO;

self.manager.securityPolicy.validatesCertificateChain = NO;

客户端会变了项目中的证书和服务端的证书匹配

服务端验证客户端证书,首先把服务端的证书client.p12 导入到服务端的密钥库里

然后在 AFURLConnectionOperation.m中加入以下方法

- (OSStatus)extractIdentity:(CFDataRef)inP12Data :(SecIdentityRef*)identity {

OSStatus securityError = errSecSuccess;

CFStringRef password = CFSTR("clic1234");

const void *keys[] = { kSecImportExportPassphrase };

const void *values[] = { password };

CFDictionaryRef options = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL);

CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);

securityError = SecPKCS12Import(inP12Data, options, &items);

if (securityError == 0)

{

CFDictionaryRef ident = CFArrayGetValueAtIndex(items,0);

const void *tempIdentity = NULL;

tempIdentity = CFDictionaryGetValue(ident, kSecImportItemIdentity);

*identity = (SecIdentityRef)tempIdentity;

}

if (options) {

CFRelease(options);

}

return securityError;

}

把AFURLConnectionOperation.m中的

- (void)connection:(NSURLConnection *)connection

willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

替换成

- (void)connection:(NSURLConnection *)connection

willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

{

NSString *thePath = [[NSBundle mainBundle] pathForResource:@"client" ofType:@"p12"];

NSLog(@"thePath===========%@",thePath);

NSData *PKCS12Data = [[NSData alloc] initWithContentsOfFile:thePath];

CFDataRef inPKCS12Data = (__bridge CFDataRef)PKCS12Data;

SecIdentityRef identity = NULL;

// extract the ideneity from the certificate

[self extractIdentity :inPKCS12Data :&identity];

SecCertificateRef certificate = NULL;

SecIdentityCopyCertificate (identity, &certificate);

const void *certs[] = {certificate};

//                        CFArrayRef certArray = CFArrayCreate(kCFAllocatorDefault, certs, 1, NULL);

// create a credential from the certificate and ideneity, then reply to the challenge with the credential

//NSLog(@"identity=========%@",identity);

NSURLCredential *credential = [NSURLCredential credentialWithIdentity:identity certificates:nil persistence:NSURLCredentialPersistencePermanent];

//           credential = [NSURLCredential credentialWithIdentity:identity certificates:(__bridge NSArray*)certArray persistence:NSURLCredentialPersistencePermanent];

[challenge.sender useCredential:credential forAuthenticationChallenge:challenge];

}

然后就可以进行双向认证了

时间: 2024-10-25 08:02:18

AFNetWorking https 双向认证的相关文章

rails+apache2+passenger+ssl实现https双向认证通信

rails+apache2+passenger+ssl实现https双向认证通信 环境: 系统:Centos7 服务器:apache(httpd) 2.4.6 制作工具:openssl 1.0.1 Rails版本 :4.1.6 准备工作: 安装apache和openssl #yum install  httpd  httpd-devel httpd-tools #yum install openssl 安张mod_ssl #yum install mod_ssl 一.创建根证书 1创建CA私钥

利用tomcat服务器配置https双向认证

首先请保证已经安装好jdk,并且环境变量以及配置好了 第一步.为服务器生成证书: 使用toolkey为tomcat生成证书,假定目标机器的域名为localhost,使用如下命令生成:keytool –genkey –v –aliaslocalhost_server RSA –keystore localhost_server.store  –validity 36500 第二步.为客户端生成证书: 为浏览器生成证书,以便让服务器来验证它.为了能保证证书顺利导入至IE和Firefox,证书格式应该

HTTPS 双向认证构建移动设备安全体系

HTTPS 双向认证构建移动设备安全体系 对于一些高安全性要求的企业内项目,我们有时希望能够对客户端进行验证.这个时候我们可以使用Https的双向认证机制来实现这个功能. 单向认证:保证server是真的,通道是安全的(对称密钥):双向认证:保证client和server是真的,通道是安全的(对称密钥): 要实现这么一个完整的安全体系,需要一个CA或者openssl自建CA来管理签发客户端证书.作为项目要求的场景可能是这样的,一个前端网站专门用于签发证书,通过电子邮件发送下载客户端证书邮件到移动

nginx与ios实现https双向认证

服务端配置 nginx关键配置如下: listen 443; server_name localhost; ssl on; ssl_certificate /usr/local/opt/nginx/certificates/server.cer; ssl_certificate_key /usr/local/opt/nginx/certificates/server.key.pem; ssl_client_certificate /usr/local/opt/nginx/certificates

tomcat https双向认证

没啥可写的,直接看这些博文吧... 注:server.xml 双向认证 注意得配:truststoreFile,单向不用 浏览器客户端p12证书,需要添加到服务器的jks文件中. http://www.blogjava.net/stevenjohn/archive/2012/08/22/385989.html http://www.360doc.com/content/10/0401/23/633992_21237818.shtml http://www.blogjava.net/stevenj

Android Https双向认证 + GRPC

keywords:android https 双向认证android GRPC https 双向认证 ManagedChannel channel = OkHttpChannelBuilder.forAddress("xxx",yyy) .overrideAuthority("zzz") .sslSocketFactory(sslFactory) .build(); 1.千万不要像官网案例那样设置setPlaintext(true),这个是设置明文,我们用的是密文

tomcat构建HTTPS双向认证

第一步:为服务器生成证书 # keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/local/ac/web/tomcat.keystore -validity 36500 (参数简要说明:"/etc/tomcat.keystore"含义是将证书文件保存在路径/usr/local/ac/web/下,证书文件名称是tomcat.keystore :"-validity 36500"含义是证书有效期,36500

ASIHTTPRequest实现https双向认证请求

什么是双向认证呢?简而言之,就是服务器端对请求它的客户端要进行身份验证,客户端对自己所请求的服务器也会做身份验证.服务端一旦验证到请求自己的客户端为不可信任的,服务端就拒绝继续通信.客户端如果发现服务端为不可信任的,那么也中止通信. 双向认证的算法理论是RSA,(点击此处了解RSA算法原理). 双向认证具体又是通过安全证书的方式来实现的,安全证书可用openssl或java程序来生成,用于双向认证的安全证书中保存了密钥对,证书颁发机构信 息,签名信息,签名算法,颁发对象,有效期等信息.双向认证中

iOS 开发笔记-AFNetWorking https SSL认证

一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探 其实这么做的话还是不够的 . 我们还需要防止中间人攻击(不明白的自己去百度).攻击者通过伪造的ssl证书使app连接到了伪装的假冒的服务器上,这是个严重的问题!那么如何防止中间人攻击呢? 首先web服务器必须提供一个ssl证书,需要一个 .crt 文件,然后设置app只能连接有效ssl证书的服务器. 在开始写代码前,先要把 .crt 文件转成 .cer 文件,然后