AFNetWorking https请求 SSL认证 自制证书
2024-08-24 20:02:09
1.服务器会给一个证书,一般为.pem格式证书
2.将.pem格式的证书转换成.cer格式的证书
打开电脑自带终端 ,进入到桌面 cd Desktop 回车回到桌面Desktop Admin$
输入命令 openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der
这句话的意思是 将你的证书.pem格式转换成.cer格式的证书
3.双击打开在钥匙串中可以看到你的这个证书 ,右键导出证书 注意存储为名字格式为 www.baidu.com
导出后,将证书拖入你的工程项目中
4.在你的网络工具类.m文件中
// 封装的网络请求工具类 #import "YYCHttpTool.h"
#import "AFNetworking.h"
#import "YYCCommon.h" /**
* 是否开启https SSL 验证
*
* @return YES为开启,NO为关闭
*/
#define openHttpsSSL YES
/**
* SSL 证书名称,仅支持cer格式。“app.bishe.com.cer”,则填“app.bishe.com”
*/
#define certificate @"baidu.com" @implementation YYCHttpTool
/**
* GET请求
*
* @param url 请求路径
* @param params 请求参数
* @param success 请求成功
* @param failure 请求失败
*/
+(void)GET:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
// 1.创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; //设置加载时间
mgr.requestSerializer.timeoutInterval = 5.0f; mgr.responseSerializer = [AFHTTPResponseSerializer serializer]; // 加上这行代码,https ssl 验证。
if(openHttpsSSL)
{
[mgr setSecurityPolicy:[self customSecurityPolicy]];
} // 2.发送请求
[mgr GET:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) { //序列化 返回dict
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil]; success(dict);
} } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}]; } /**
* POST请求
*
* @param url 请求路径
* @param params 请求参数
* @param success 请求成功
* @param failure 请求失败
*/
+(void)POST:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{ // 1.创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; //设置加载时间 mgr.requestSerializer.timeoutInterval = 5.0f; mgr.responseSerializer = [AFHTTPResponseSerializer serializer]; // 加上这行代码,https ssl 验证。
if(openHttpsSSL)
{
[mgr setSecurityPolicy:[self customSecurityPolicy]];
} // 2.发送请求
[mgr POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) { //序列化 返回dict
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil]; success(dict);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}]; } + (AFSecurityPolicy*)customSecurityPolicy
{
// /先导入证书
NSString *cerPath = [[NSBundle mainBundle] pathForResource:certificate ofType:@"cer"];//证书的路径
NSData *certData = [NSData dataWithContentsOfFile:cerPath]; // AFSSLPinningModeCertificate 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
// 如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES; //validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
//如置为NO,建议自己添加对应域名的校验逻辑。
securityPolicy.validatesDomainName = NO; securityPolicy.pinnedCertificates = @[certData]; return securityPolicy;
} @end
完毕
最新文章
- Linux基本命令(一)
- bzoj 3262 陌上花开
- linux系统中批量查找文件与文件内容的方法
- 百度,淘宝,腾讯三大巨头HTML页面规范分解
- 给Asp.Net MVC及WebApi添加路由优先级
- Android学习笔记(二十)——自定义内容提供器
- POJ 2406 Power Strings (KMP)
- 使用reportNG替换testNG的默认报告
- Ngrok 内网穿透神器(转载)
- Ajax获得站点文件内容实例
- [转]SGI STL 红黑树(Red-Black Tree)源代码分析
- [转]Laravel 4之验证
- linux修改系统时间date命令加clock -w
- java中try 与catch的使用
- [Go] golang缓冲通道实现资源池
- 用EPPlus 读取excel,代码出错, the given key is not present in the dictionary
- HttpSimpleClient连接服务器
- 盲刷bios
- LeetCode:Sqrt(x) 解题报告
- hdu3038(种类并查集,推荐)
热门文章
- android帧动画,移动位置,缩放,改变透明度等动画讲解
- MySQL学习笔记二:权限管理
- react+redux教程(三)reduce()、filter()、map()、some()、every()、...展开属性
- 分析Mysql 5.6的Dockerfile
- T-Sql(二)事务(Transaction)
- Servlet在启动时加载的tomcat源码(原创)
- POST方式提交表单时,后台接受实体如果继承了父类,将无法映射表单对应数据
- 如何将MyEclipse项目导入eclipse
- Tomcat创建HTTPS访问,java访问https
- rem、em、px的区别