利用自签证书实现HTTPS,获取服务端https证书

By admin in 4858.com on 2019年3月26日

近年支付1个须求,涉及取得服务端https证书。一般进行https调用我们都不太关心底层细节,直接接纳WebClient或许HttpWebRequest来发送请求,那三种办法都心有余而力不足获取证书消息,要求用到ServicePoint,那几个类用于提供HTTP连接的军管。

单向认证流程:

2015年苹果在发表会上赤诚的颁发二零一七年十一月124日周密达成https,全部曾经上架或提交审查的都必须改换,不然审核不经过,下架。由此对https做了有的驾驭。

4858.com ,http和https在普通工作中相信我们随时蒙受,不过中间的区分测度大多数校友只晓得https会对报文进行加密后传输,但是中间的细节是哪些的估价都不太能说的知晓,那些难点是小编老是面试必问难题,面了许几人不论是前者的还是后端的同桌基本都没能答得很好的,前几日就详细介绍下http和https的界别,让我们随后不再只了止痛面。
http自己只是二个互联网应用层的商议,首先客户端和服务器端之间通过网络多次握手后肯定连通性后就足以创设TCP连接,进行报导了。http没有加密机制,供给合作SSL(安全套接层)或TLS(安全传输层协议)来对通讯实行加密。合营SSL使用得http则称之为https。http和https在实际进度中最大差异在于互连网握手的差别性,下边就根本说下握手的经过。

 

  1. 客户端向服务端发送SSL协议版本号、加密算法系列、随机数等新闻。
  2. 服务端给客户端重临SSL协议版本号、加密算法系列、随机数等音信,同时也回到服务器端的证件,即公钥证书
  3. 客户端选择服务端重返的新闻验证服务器的合法性,包罗:
    • 证件是不是过期
    • 发形服务器证书的CA是不是牢靠
    • 回去的公钥是不是能正确解开重返证书中的数字签名
    • 服务器证书上的域名是不是和服务器的实际域名相匹配
  4. 表达通过后,将持续实行通讯,不然,终止通信
  5. 利用自签证书实现HTTPS,获取服务端https证书。客户端向服务端发送温馨所能支持的相得益彰加密方案,供服务器端进行精选
  6. 服务器端在客户端提供的加密方案中精选加密程度最高的加密方法。
  7. 服务器将采取好的加密方案经过公开格局赶回给客户端
  8. 客户端接收到服务端再次回到的加密方法后,使用该加密方法变通产生随机码,用作通讯进程中对称加密的密钥,使用服务端再次回到的公钥进行加密,将加密后的随机码发送至服务器
  9. 服务器收到客户端重临的加密音讯后,使用本身的私钥举行解密,获取对称加密密钥。在接下去的对话中,服务器和客户端将会使用该密码举办对称加密,保障通讯进度中消息的安全。
1、https原理

4858.com 1Paste_Image.png

HTTPS 是 http 的晋升版,使音讯的互相越发安全。HTTPS 是由 HTTP + SSL /
TLS组成的。服务端和客户端的音信传输都会由此TLS实行加密,所以传输的数额都以加密后的数额。具体的加密和平解决密如下:

  1. 客户端发起HTTPS请求这么些没什么好说的,便是用户在浏览器里输入1个https网址,然后连接到server的443端口。(http
    连接的是server的80端口)
  2. 服务端的布署利用HTTPS协议的服务器必需要有一套数字证书,能够团结制造,也能够向公司报名。不相同正是上下一心公布的注解供给客户端验证通过,才能够继续走访,而利用受信赖的店铺申请的阐明则不会弹出提醒页面(startssl正是个不利的选料,有1年的免费服务)。那套证书其实正是一对公钥和私钥。假如对公钥和私钥不老聃楚,能够想像成一把钥匙和三个锁头,只是满世界唯有你一位有那把钥匙,你能够把锁头给外人,别人能够用那几个锁把主要的事物锁起来,然后发给你,因为只有你一个人有那把钥匙,所以唯有你才能来看被那把锁锁起来的东西。
  3. 传送证书那些注脚其实正是公钥,只是包括了很多消息,如证书的颁发机构,过期时间等等。
  4. 客户端解析证书那有些干活是有客户端的TLS来形成的,首先会表明公钥是不是行得通,比如发表机构,过期光阴等等,借使发现很是,则会弹出一个警告框,提醒证书存在难题。要是证件没有失水准,那么就生成三个随即值。然后用表明对该随机值举办加密。就仿佛上边说的,把自由值用锁头锁起来,那样除非有钥匙,不然看不到被锁住的内容。
  5. 传递加密消息这一部分传递的是用证件加密后的人身自由值,目标就是让服务端得到这些自由值,未来客户端和服务端的通讯就足以透过那一个自由值来进展加密解密了。
  6. 服务段解密消息服务端用私钥解密后,获得了客户端传过来的专擅值,然后把内容通过该值进行对称加密。所谓对称加密正是,将消息和私钥通过某种算法混合在联合,那样除非知道私钥,不然无法获得内容,而恰巧客户端和服务端都领会那个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
  7. 传输加密后的消息那有个别音信是服务段用私钥加密后的音讯,能够在客户端被复苏
  8. 客户端解密音讯客户端用在此之前生成的私钥解密服务段传过来的音信,于是获取精通密后的始末。整个进程第1方正是监听到了多少,也胸中无数。

http握手

http是从未有过安全性处理的,所以只做了简约的二次网络连通性握手。

4858.com 2

Screenshot 2018-02-27 15.24.08

1.客户端发送syn包

客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

2.服务端发送SYN+ACK

服务器收到syn包,必须承认客户的SYN(ack=j+1),同时自身也发送3个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

3.客户端发送ACK

客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完成,客户端和服务器进入ESTABLISHED状态,达成壹遍握手。

写个德姆o,拿博客园首页试一下:

4858.com 3

二 、获取证书

4858.com 4Paste_Image.png

上海教室是双向认证的示意图:客户端Client 和 服务端Server
都有2个证件信任库,因为是自签的,所以须要将证书导入,这样才能印证证书是不是合法。比如:客户端要表达服务端的证件是不是行得通,就务须导入服务器的证书,做比较,获取服务器的评释方法如下:使用IE浏览器,打开连接

4858.com 5D(0WAMWU`L8NUK9O)A7$B1.png4858.com 6ORA6D_G@36UG44HCHU5{XZM.png4858.com 7%$R3Z$})%$OQ3WAUPOY0}FC.png4858.com 880SJKL3(0S6~ZH`}HHX$161.png4858.com 9UEEBFITOL0KZ2~W87%29UGP.png

![]SHQY$BWN{__8U@P((ZRQ.png]()

到此截至,证书获得成功

https握手

https在http的底子上参与了SSL协议,SSL依靠证书来验证服务器的身价,并为浏览器和服务器之间的通讯加密。具体是怎么着开始展览加密,解密,验证的,且看下图(图片来源互联网)。

4858.com 10

Screenshot 2018-02-27 10.54.23

  1. 客户端发起https请求

  2. 服务端的配备

运用https协议的服务器必供给有一套数字证书,能够是友好制作可能CA证书。不相同正是投机发表的证件供给客户端验证通过,才方可接二连三访问,而使用CA证书则不会弹出提示页面。那套证书其实正是一对公钥和私钥。公钥给客户端加密应用,私钥给协调解密使用。

  1. 传递证书

这几个注明其实正是公钥,只是包罗了广大音讯,如证书的揭露机构,过期时光等。

  1. 客户端解析证书

那部分行事是有客户端的TLS来形成的,首先会注脚公钥是不是可行,比如发表机构,过期时间等,若是发现相当,则会弹出三个警示框,提醒证书存在难点。假使证件没反常,那么就生成1个随着值,然后用证明对该随机值进行加密。

  1. 传递加密信息

那有个别传递的是用申明加密后的妄动值,目标正是让服务端得到那一个自由值,现在客户端和服务端的通讯就能够通过那么些自由值来拓展加密解密了,其实那就是一个对称密钥传递的进程,通过非对称加密来担保密钥安全传递。

  1. 服务端解密消息

服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值举办对称加密。所谓对称加密就是,将音讯和私钥通过某种算法混合在一起,那样除非知道私钥,不然不能够获取内容,而恰巧客户端和服务端都晓得那么些私钥,所以即使加密算法够彪悍,私钥够复杂,数据就够安全。

  1. 传输加密后的音讯

那部分音讯是服务段用私钥加密后的音讯,能够在客户端被复苏。

  1. 客户端解密音讯

客户端用从前生成的私钥解密服务段传过来的音信,于是获取精通密后的情节。

using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;

namespace GetServerCertificateDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //用WebClient访问新浪首页
            var http = new WebClient();
            var uri = new Uri("https://www.sina.com.cn");
            http.DownloadString(uri);

            //通过Uri获取ServicePoint
            var servicePoint = ServicePointManager.FindServicePoint(uri);

            //取服务端证书,X509Certificate格式,转一下
            var serverCert = new X509Certificate2(servicePoint.Certificate);
            Console.WriteLine("颁发给:{0}", serverCert.Subject);
            Console.WriteLine("颁发者:{0}", serverCert.Issuer);
            Console.WriteLine("序列号:{0}", serverCert.SerialNumber);
            Console.WriteLine("指  纹:{0}", serverCert.Thumbprint);
            Console.WriteLine("起  始:{0}", serverCert.NotBefore);
            Console.WriteLine("过  期:{0}", serverCert.NotAfter);
        }
    }
}

20160310160503593.jpg

叁 、代码配置

本人用的是AFNetworking第2框架,配置如下。在呼吁方法中添加以下代码

 //https AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; securityPolicy.allowInvalidCertificates = YES; //是否允许使用自签证书 securityPolicy.validatesDomainName = NO; //是否需要验证域名,默认是YES NSString *requestString = [NSString stringWithFormat:@"%@%@",URLDoman,methodName]; _session = [AFHTTPSessionManager manager]; _session.responseSerializer = [AFHTTPResponseSerializer serializer]; _session.securityPolicy = securityPolicy; //设置证书校验模式 //设置超时 [_session.requestSerializer willChangeValueForKey:@"timeoutinterval"]; _session.requestSerializer.timeoutInterval = TimeoutInterval; [_session.requestSerializer didChangeValueForKey:@"timeoutinterval"]; _session.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringCacheData; //身份验证回调 __weak typeof weakSelf = self; [_session setSessionDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession * _Nonnull session, NSURLAuthenticationChallenge * _Nonnull challenge, NSURLCredential *__autoreleasing _Nullable * _Nullable credential) { //获取服务器的trust object SecTrustRef serverTrust = [[challenge protectionSpace]serverTrust]; //导入多张CA证书 NSString *cerPath = [[NSBundle mainBundle]pathForResource:@"ca" ofType:@"cer"];//自签证书 NSData *caCert = [NSData dataWithContentsOfFile:cerPath]; NSArray *cerArray = @[caCert]; weakSelf.session.securityPolicy.pinnedCertificates = cerArray; SecCertificateRef caRef = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCert); NSCAssert(caRef!=nil, @"caRef is nil"); NSArray *caArray = @[(__bridge id)]; NSCAssert(caArray != nil, @"caArray is nil"); OSStatus status = SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)caArray); SecTrustSetAnchorCertificatesOnly(serverTrust, NO); NSCAssert(errSecSuccess == status, @"SecTrustSetAnchorCertificates failed"); //选择质询认证的处理方式 NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; __autoreleasing NSURLCredential *credentiall = nil; //NSURLAuthenticationMethodServerTrus咨询认证方式 if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { //基于客户端的安全策略来决定是否信任该服务器,不信任则响应质询 if ([weakSelf.session.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { //创建质询证书 credentiall = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; //确认质询方式 if (credential) { disposition = NSURLSessionAuthChallengeUseCredential; }else{ disposition = NSURLSessionAuthChallengePerformDefaultHandling; } }else{ //取消质询 disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; } }else{ disposition = NSURLSessionAuthChallengePerformDefaultHandling; } return disposition; }];

https对比http优缺点

优点:

  • 证书认证,https客户端在拉手的时候会获取到服务端给的公钥,客户端通过地点的TLS校验公钥证书的真假;http没有声明校验的进度所以无法校验服务器的真真假假,并且服务器也不知所措校验客户端是还是不是合法,很简单被DDOS攻击。
  • 完整性校验,https会对报文做散列,通过散列来担保报文没有被歪曲,而http不大概判断报文有没有被篡改过。
  • 电视发表加密,在方方面面https传输层加密的进度中,全数的报文头和报文娱体育都以对称加密的,幸免被缴获。注意https加密是在传输层,https报文在被打包成tcp报文的时候做到加密的长河,无论是https的header域也好,body域也罢都是会被加密的。

HTTPS一般使用的加密与HASH算法如下:

非对称加密算法:RSA,DSA/DSS

对称加密算法:AES,RC4,3DES

HASH算法:MD5,SHA1,SHA256

缺点:

  • 进度变慢,那里说的速度变慢其实也是相持的,毕竟做了注明校验,加解密的动作,所以肯定是会变慢的,那里能够由此SSL硬件加快器来增进https访问的速度。

https的欠缺相对于优点来说依然得以承受的,并且近期游人如织阳台都全站使用https了,apple
store出于用户安全考虑也不收受使用http接口的app上架了。

 

双向认证流程:

注意项:
苹果ATS对HTTPS证书也是有要求的a、服务器所有的连接使用TLS1.2以上版本b、HTTPS证书必须使用SHA256以上哈希算法签名c、HTTPS证书必须使用RSA 2048位或ECC 256位以上公钥算法d、使用前向加密技术

到此,运维App互联网请求是没什么难点的了。

提醒:使用自签的证书,苹果审核不自然能通过。祝我们好运….

好文推荐:HTTPS原理双向认证单双向认证iOS用自签署证书达成HTTPS请求的规律实例讲解iOS开发HTTPS落成之信任SSL证书和自签定证书iOS使用自签订契约证书完结HTTPS请求

20170216
补充单向认证和双向认证的运用处境:单向认证:一般都以使用在Web页面,用于提醒用户眼下作客页面没有获取认证,访问有风险。可是照旧能够访问双向认证:移动端建议是选拔双向认证,安全性强,并且只借使只行使单向认证的话,跟http无区别,得不到平安保持。有如下三种情景出现:第三:假若运动端应用https请求https服务端,移动端就会声明服务端的评释有效性,若是或不是新妇的证件,则禁止访问。第一:假设运动端选择https请求http服务端,因为http是超文本,是无状态协议的,所以只要访问的财富存在就会重回数据给移动端。这样的话,就失去了注脚服务器合法的功用

总结

https肯定是将来的主流通信协议,能够知道https的握手进程基本就精晓了https的法则,在开发和平运动维安排进度中也能够对证件能够相比好的明亮了。https在普通行使进程中也会设有被中间人攻击的难题,被中间人攻击并不是因为https自个儿设计的题材,而是在应用进度中在客户端从未对服务器证书举办校验导致了中间人轮换公钥证书进行报文拦截篡改,所以在https使用的进程中必定要小心证件校验,不能差不离的依赖全体证件,那里介绍的https握手进度是单向认证,https还有双向认证就是除了表达服务端证书外,还会校验客户端证书,我们广大的网银U盾就是博学强记的双向认证,双向认证的安全性相当高,但与此同时用户体验也是最差的,未来稳步也被吐弃,除非是有的日喀则须要很高的风貌。好了,https就聊这么多,大家应该能够理解了吧。

运营看作用:

  1. 客户端向服务端发送SSL协议版本号、加密算法连串、随机数等音讯。
  2. 服务端给客户端重回SSL协议版本号、加密算法种类、随机数等新闻,同时也回到服务器端的注解,即公钥证书
  3. 客户端应用服务端再次来到的音信认证服务器的合法性,包涵:
    • 注解是还是不是过期
    • 发形服务器证书的CA是不是牢靠
    • 回来的公钥是不是能正确解开再次来到证书中的数字签名
    • 服务器证书上的域名是还是不是和服务器的实际域名相匹配
  4. 表达通过后,将继承展开通讯,不然,终止通讯
  5. 服务端须求客户端发送客户端的证书,客户端会将协调的表明发送至服务端
  6. 表明客户端的证书,通过认证后,会获取客户端的公钥
  7. 客户端向服务端发送温馨所能协助的相辅相成加密方案,供服务器端举行选用
  8. 劳务器端在客户端提供的加密方案中接纳加密程度最高的加密方法
  9. 将加密方案经过应用在此之前获得到的公钥举行加密,重回给客户端
  10. 客户端收到服务端再次来到的加密方案密文后,使用本人的私钥进行解密,获取具体加密方法,而后,产生该加密方法的随机码,用作加密进度中的密钥,使用从前从服务端证书中得到到的公钥举行加密后,发送给服务端
  11. 服务端收到客户端发送的新闻后,使用本人的私钥举办解密,获取对称加密的密钥,在接下去的对话中,服务器和客户端将会使用该密码举行对称加密,保险通讯进程中国国投息的四平。

4858.com 11

4858.com 12

上半有的是程序运转结果,下边是用Firefox查看的服务端证书信息,各项新闻都能对应上。假如程序中涉及多少个不等服务器的访问也没提到,关键在于依据Uri获取ServicePoint,然后取到的证书就是此服务器的了。

20160310160519781.jpg

 

是单向认证依旧双向认证首要看服务器的计划,与客户端无关。若是是双向认证,服务器在布局的时候必须安装clientAuth=“true”,单向则设置为false,暗中同意值为false。
单向认证须求服务器的公钥证书,大家后台提要求本人的server.cer,在网上看看有说AF
3.0之后必要用.der格式的,笔者用了.cer格式也尚未问题。
双向认证不仅须求服务器的公钥证书还亟需提供客户端证书,一般为.p12格式而且是包含密码的。

亟需看证书具体设置请看那里:http://m.blog.csdn.net/article/details?id=47173725

下边间接上代码(单向认证和双向认证适用同一套代码,只要证书配置的对就足以):

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //    设置超时时间
    [manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
    manager.requestSerializer.timeoutInterval = 30.f;
    [manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
    [manager.requestSerializer setValue:@"Content-Type" forHTTPHeaderField:@"application/json; charset=utf-8"];
    [manager setSecurityPolicy:[self customSecurityPolicy]];
    [self checkCredential:manager];
    [manager POST:@"这里填你的https地址" parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {
        NSLog(@"123");
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"成功:%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失败:%@",error);
    }];

- (AFSecurityPolicy*)customSecurityPolicy {
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    //获取证书路径
    NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"server" ofType:@"cer"];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    NSSet  *dataSet = [NSSet setWithArray:@[certData]];
    [securityPolicy setAllowInvalidCertificates:YES];//是否允许使用自签名证书
    [securityPolicy setPinnedCertificates:dataSet];//设置去匹配服务端证书验证的证书
    [securityPolicy setValidatesDomainName:NO];//是否需要验证域名,默认YES

    return securityPolicy;
}

//校验证书
- (void)checkCredential:(AFURLSessionManager *)manager
{
    [manager setSessionDidBecomeInvalidBlock:^(NSURLSession * _Nonnull session, NSError * _Nonnull error) {
    }];
    __weak typeof(manager)weakManager = manager;
    [manager setSessionDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession*session, NSURLAuthenticationChallenge *challenge, NSURLCredential *__autoreleasing*_credential) {
        NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;
        __autoreleasing NSURLCredential *credential =nil;
        NSLog(@"authenticationMethod=%@",challenge.protectionSpace.authenticationMethod);
        //判断服务器要求客户端的接收认证挑战方式,如果是NSURLAuthenticationMethodServerTrust则表示去检验服务端证书是否合法,NSURLAuthenticationMethodClientCertificate则表示需要将客户端证书发送到服务端进行检验
        if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
            // 基于客户端的安全策略来决定是否信任该服务器,不信任的话,也就没必要响应挑战
            if([weakManager.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) {
                // 创建挑战证书(注:挑战方式为UseCredential和PerformDefaultHandling都需要新建挑战证书)
                credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
                // 确定挑战的方式
                if (credential) {
                    //证书挑战  设计policy,none,则跑到这里
                    disposition = NSURLSessionAuthChallengeUseCredential;
                } else {
                    disposition = NSURLSessionAuthChallengePerformDefaultHandling;
                }
            } else {
                disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
            }
        } else { //只有双向认证才会走这里
            // client authentication
            SecIdentityRef identity = NULL;
            SecTrustRef trust = NULL;
            NSString *p12 = [[NSBundle mainBundle] pathForResource:@"client"ofType:@"p12"];
            NSFileManager *fileManager =[NSFileManager defaultManager];

            if(![fileManager fileExistsAtPath:p12])
            {
                NSLog(@"client.p12:not exist");
            }
            else
            {
                NSData *PKCS12Data = [NSData dataWithContentsOfFile:p12];

                if ([self extractIdentity:&identity andTrust:&trust fromPKCS12Data:PKCS12Data])
                {
                    SecCertificateRef certificate = NULL;
                    SecIdentityCopyCertificate(identity, &certificate);
                    const void*certs[] = {certificate};
                    CFArrayRef certArray =CFArrayCreate(kCFAllocatorDefault, certs,1,NULL);
                    credential =[NSURLCredential credentialWithIdentity:identity certificates:(__bridge  NSArray*)certArray persistence:NSURLCredentialPersistencePermanent];
                    disposition =NSURLSessionAuthChallengeUseCredential;
                }
            }
        }
        *_credential = credential;
        return disposition;
    }];
}

//读取p12文件中的密码
- (BOOL)extractIdentity:(SecIdentityRef*)outIdentity andTrust:(SecTrustRef *)outTrust fromPKCS12Data:(NSData *)inPKCS12Data {
    OSStatus securityError = errSecSuccess;
    //client certificate password
    NSDictionary*optionsDictionary = [NSDictionary dictionaryWithObject:@"123456"
                                                                 forKey:(__bridge id)kSecImportExportPassphrase];

    CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
    securityError = SecPKCS12Import((__bridge CFDataRef)inPKCS12Data,(__bridge CFDictionaryRef)optionsDictionary,&items);

    if(securityError == 0) {
        CFDictionaryRef myIdentityAndTrust =CFArrayGetValueAtIndex(items,0);
        const void*tempIdentity =NULL;
        tempIdentity= CFDictionaryGetValue (myIdentityAndTrust,kSecImportItemIdentity);
        *outIdentity = (SecIdentityRef)tempIdentity;
        const void*tempTrust =NULL;
        tempTrust = CFDictionaryGetValue(myIdentityAndTrust,kSecImportItemTrust);
        *outTrust = (SecTrustRef)tempTrust;
    } else {
        NSLog(@"Failedwith error code %d",(int)securityError);
        return NO;
    }
    return YES;
}

刚起先公司要求做https认证的时候本身是少数都不懂的,究竟此前没做过,然后就到网上找资料,下德姆o,弄了两日一向没弄出来,以为是协调代码写错了,就随处查资料,最终才发觉是服务器证书配置有失水准。上边的代码都以经小编求证无误的,只要证书配置不错就能够的。那边是双向认证的德姆o

参考自:http://www.jianshu.com/p/a84237b07611
http://blog.csdn.net/duanbokan/article/details/50847612

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有