博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AFNetWorking https 雙向認證
阅读量:5865 次
发布时间:2019-06-19

本文共 4120 字,大约阅读时间需要 13 分钟。

hot3.png

客戶端驗證服務端證書:

需要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];

}

然後就可以進行雙向認證了

 , 

更多相關文章

  • 折騰了兩天終于搞好了,查看了很多資料並嘗試了上十次才終于配置好,爲了大家不走彎路,特寫此文 一. 服務端環境 CNETOS-6.5 Tomcat 7 jdk7 openssl-1.0.2-beta1.tar.gz 二.源碼安裝及證書申請與簽發 將openssl-1.0.2-beta1.tar.gz ...

  • 系統需求: 1. Windows系統或Linux系統 2. 安裝並配置JDK 1.6.0_13 3. 安裝並配置Tomcat 6.0 第一步:爲服務器生成證書 1. Windows系統 "運行"控制台,進入%JAVA_HOME%/bin目錄 使用keytool爲Tomcat生成證 ...

  • 本文是1:1模式,N:1模式請參見新的一篇博客<SSL雙向認證(高清版)> -- 我是 標題太長了不知道該怎麽起,索性就把keyword列出來吧~ WebService的WS-*搞了一天沒搞定,看樣子PHP應該是徹底抛棄SOAP協議了,google翻爛了也沒找到什麽靠譜的解決方案. 合作 ...

  • OpenSSL生成證書 要生成證書的目錄下建立幾個文件和文件夾,有./demoCA/ ./demoCA/newcerts/ ./demoCA/private/ ./demoCA/index.txt (空文件,生成證書時會將數據記錄寫入)./demoCA/serial (在serial文件中寫入第一個 ...

  • 1.在tomcat中安裝axis2插件 2.生成證書,用jdk自帶的keytool 服務端 keytool -genkey -alias Server -dname "CN=192.168.10.100, OU=JH, O=JH, L=HangZhou, S=ZheJiang, C=CN& ...

  • 1. 證書層級結構2. 服務器結構tomcat不要求認證客戶端,nginx要求認證客戶端3. tomcat配置注意點tomcat的服務器證書的CN必須爲tomcat_backend4. nginx配置注意點使用openssl從pfx文件中導出pem格式公鑰1openssl pkcs12 -clcer ...

  • 一.爲什麽要實施雙向認證(Why)雙向認證一般使用在B2B系統或企業內部系統中,目的就是阻止無關人員訪問系統,哪怕就一個登錄頁面也不行.只有系統管理員給你發放了證書,你才能訪問到該系統.二.准備工作(Getting ready)1. 你系統中要有JDK2. 你要有一個Servlet容器,這裏使用to ...

  • 很久沒有更新LAMP的相關文檔了,剛好最近單位做項目需要用到apache的SSL虛擬主機雙向認證,剛好之前在做LAMP的時候順帶做過SSL模塊加載,SO參考了google大量文檔,用了半天時間搞定,這裏總結出來給大家分享一下. 該方案是爲了實現apache下實現SSL虛擬主機雙向認證,從而實現可信任 ...

源地址: 

转载于:https://my.oschina.net/u/1244672/blog/548536

你可能感兴趣的文章
各种sqlite管理工具
查看>>
切片练习
查看>>
退信原因分析及解决办法
查看>>
项目: Zabbix监控搭建部署
查看>>
华为2016编程题
查看>>
APMServ 5.2.6.Apache启动失败,请检查相关配置。2.MySQL5.1启动失败的解决方法
查看>>
extJs学习基础4 Ext.each的用法
查看>>
Linux分区
查看>>
(转)IntelliJ IDEA java项目导入jar包,打jar包
查看>>
软件质量与测试--第六周作业 软件测试和评估
查看>>
实验4 颜色、字符串资源的使用
查看>>
Windows7配置python环境变量
查看>>
POJ 1654 Area 多边形面积 G++会WA
查看>>
apt 和 apt-get的区别
查看>>
学习园地
查看>>
Keras网络层之卷积层
查看>>
VS2017 调试不能命中断点问题
查看>>
7. Python运算符之逻辑、成员、身份运算符及优先级
查看>>
VirtualBox虚拟机网络设置(四种方式)
查看>>
通过构造器配置Bean
查看>>