【Https】iOS 端两种Https数据传输加密方法

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介:

http数据传输传输的是明文,未进行加密的数据链可以在网络中设置代理进行截取,尽管会有token等验证手段,但数据被监听还是不可避免的,这点使用网络抓包软件就能做到。

而对于https数据加密后传输的数据,抓到的数据包都只是乱码,安全性大幅提高,也是当前大势所趋。

下面就介绍一下使用ASIHttpRequest 和 AFNetworking两种三方库进行https加密的方式。

原料: 1、相应的ASIHttpRequest、AFNetworking配置完成 2、相应的证书文件

一、ASIHttpRequest

` / 测试https接口 /

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:httpsUrl];    

SecIdentityRef identity = NULL;

SecTrustRef trust = NULL;NSData *cerData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"证书文件名" ofType:@"文件类型"]];

[[self class] extractIdentity:&identity andTrust:&trust fromPKCS12Data:cerData];

request = [ASIHTTPRequest requestWithURL:httpsUrl];

[request setClientCertificateIdentity:identity];

/ 是否验证服务器端证书,如果此项为yes那么服务器端证书必须为合法的证书机构颁发的,而不能是自己用openssl 或java生成的证书 /

[request setValidatesSecureCertificate:NO];

[request setRequestMethod:@"GET"];

[request startSynchronous];NSError *error = [request error];if (!error) {    NSString *response = [request responseString];    NSLog(@"response is : %@",response);    NSLog(@"获取数据成功");

}

else {

    NSLog(@"Failed to save to data store: %@", [error localizedDescription]);    NSLog(@"%@",[error userInfo]);

}

}

/ 提取证书 /

  • (BOOL)extractIdentity:(SecIdentityRef )identityRef andTrust:(SecTrustRef)trustRef fromPKCS12Data:(NSData *)CerData {

    OSStatus securityError = errSecSuccess;

    NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:@"证书密码" forKey:(id)kSecImportExportPassphrase];

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

    securityError = SecPKCS12Import((CFDataRef)CerData,(CFDictionaryRef)optionsDictionary,&items);

    if (securityError == 0) {

    CFDictionaryRef myIdentityAndTrust = CFArrayGetValueAtIndex (items, 0);const void *tempIdentity = NULL;
    
    tempIdentity = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemIdentity);
    
    *identityRef = (SecIdentityRef)tempIdentity;const void *tempTrust = NULL;
    
    tempTrust = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemTrust);
    
    *trustRef = (SecTrustRef)tempTrust;

    } else {

    NSLog(@"Failed with error code %d",(int)securityError);

    / 若报错 -26275 文件读取不出数据,此时可将文件格式进行更改,再重新导入项目 /

    return NO;

    }

    return YES;

} ` 二、AFNetworking

/ 测试https接口 /

  • (void)testClientCertificate

{

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer = [AFHTTPResponseSerializer serializer];/*
 Https SSL 验证。
 */[manager setSecurityPolicy:[self SetSecurityPolicy]];

[manager GET:@"https://www.demo.com/method.php" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress)

 {     NSLog(@"%@",downloadProgress);

 }

     success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {         NSData * responsedata=(NSData *)responseObject;         NSString * response =[[NSString alloc]initWithData: responsedata encoding:NSUTF8StringEncoding];         NSLog(@"%@", response);         NSLog(@"获取数据成功");

     }

     failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull   error) {         NSLog(@"%@",error);

     }];

}

/ 设置安全证书 /

  • (AFSecurityPolicy * )SetSecurityPolicy {

    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书名称" ofType:@"证书后缀"];

    NSData *certData = [NSData dataWithContentsOfFile:cerPath];

    / AFSSLPinningModeCertificate 使用证书验证模式 /

    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

    / allowInvalidCertificates 是否允许自建证书,默认为NO / securityPolicy.allowInvalidCertificates = NO;

    / validatesDomainName 是否需要验证域名,默认为YES; /

    securityPolicy.validatesDomainName = YES;

    securityPolicy.pinnedCertificates = [NSSet setWithArray:@[certData]];

    return securityPolicy;

}











本文转自 卓行天下  51CTO博客,原文链接:http://blog.51cto.com/9951038/1766640,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
3月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
14天前
|
安全 网络安全 数据安全/隐私保护
内网IP地址实现HTTPS加密访问教程
在内网环境中,为确保数据传输的安全性,绑定SSL证书搭建HTTPS服务器至关重要。本文介绍了内网IP地址的前期准备、申请SSL证书的步骤以及客户端配置方法。具体包括选择合适的CA、注册账号、提交申请、下载证书,并在客户端导入根证书,确保通信数据的安全加密。推荐使用JoySSL提供的技术解决方案,确保内网设备通信安全。
内网IP地址实现HTTPS加密访问教程
|
17天前
|
域名解析 算法 安全
免费申请https加密全攻略
访问JoySSL官网注册账号,申请免费SSL证书。选择证书类型,填写域名信息,生成CSR文件,验证域名所有权。下载并部署证书至服务器,测试HTTPS连接。注意定期续期,确保兼容性和安全性。如有问题,可联系JoySSL客服。
|
1月前
|
存储 安全 前端开发
端到端加密:确保数据传输安全的最佳实践
【10月更文挑战第12天】端到端加密(E2EE)是确保数据传输安全的重要手段,通过加密技术保障数据在传输过程中的隐私与完整性,防止第三方窃听和篡改。本文介绍E2EE的工作原理、核心优势及实施步骤,并探讨其在即时通讯、文件共享和金融服务等领域的应用,强调了选择加密协议、密钥管理、数据加密及安全接口设计的重要性,旨在帮助企业和开发者有效保护用户数据,满足数据保护法规要求。
|
2月前
|
安全 网络安全 数据安全/隐私保护
HTTPS中的加密算法
HTTPS中的加密算法
|
1月前
|
安全 网络协议 网络安全
【HTTPS】对称加密和非对称加密
【HTTPS】对称加密和非对称加密
36 0
在FlashFXP中设置数据传输模式为PORT(主动模式)的两种方法
在FlashFXP中设置数据传输模式为PORT(主动模式)的两种方法
|
3月前
|
iOS开发
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
191 0
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
|
4月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
96 10
|
3月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享安卓与iOS开发中的线程管理比较
【8月更文挑战第30天】本文将探讨网络安全与信息安全的重要性,并分享关于网络安全漏洞、加密技术和安全意识的知识。我们将了解常见的网络攻击类型和防御策略,以及如何通过加密技术和提高安全意识来保护个人和组织的信息安全。