oooO ↘┏━┓ ↙ Oooo

( 踩)→┃你┃ ←(死 )

\ ( →┃√┃ ← ) /

_)↗┗━┛ ↖(_/

我觉得https是iOS开发者要踩的最大的一个坑了,每每看他人写的博客都是只讲理论贴代码,却没有一篇是教你一步一步实现,是不是很头大呢。今天来一步一步实现https的正确验证,后面再讲不正确的验证。

步骤:

1.生成私钥 > 生成签名 > 生成证书(服务器端) > 生成证书(iOS端)

2.服务器端设置https接口。(node)

3.iOS端设置证书验证。

Demo

证书

//生产私钥

$ openssl genrsa 2048 > rsa_private_key.pem

//由私钥生产证书请求(签名)

$ openssl req -new -key rsa_private_key.pem -out certificate_request.csr

//通过私钥文件和CSR证书签名生成证书文件(服务器证书)

$ openssl x509 -req -days 365 -in certificate_request.csr -signkey rsa_private_key.pem -out cert.crt

//转换证书(iOS端证书)

$ openssl x509 -in cert.crt -out cert_ios.cer -outform der

//此时得到了我们需要的三个文件

rsa_private_key.pem(私钥)

cert.crt(证书用于服务器端)

cert_ios.cer(证书用于iOS端)

服务器端设置(Node)

需将rsa_private_key.pem 和 cert.crt拷贝至项目中

//index.js

var https = require('https');

var fs = require('fs');

var options = {

key: fs.readFileSync('./rsa_private_key.pem'),

cert: fs.readFileSync('./cert.crt')

};

var params = {

hi : 'Hello World!',

hello : 'Hello Node!'

}

var server = https.createServer(options ,function(req, res){

res.writeHead(200, {'Content-Type': 'application/json'});

res.end(JSON.stringify(params));

}).listen(3000);

//启动服务

$ node index.js

iOS端设置(Xcode)

需将cert_ios.cer拷贝至项目中

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//AFSSLPinningModeCertificate模式与AFSSLPinningModePublicKey模式都会加载项目中所有的.cer后缀的证书文件来进行校验。AFSecurityPolicy需要使用一下方法创建。

manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

//允许使用无效证书(自建证书)

manager.securityPolicy.allowInvalidCertificates = YES;//默认NO

//不需要域名验证

manager.securityPolicy.validatesDomainName = NO;//默认YES

[manager GET:@"https://127.0.0.1:3000" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {

NSLog(@"%@",responseObject);

//将打印:hi : 'Hello World!', hello : 'Hello Node!'字典

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

}];

详解

错误用法

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//AFSSLPinningModeNone模式下设置以下属性将不验证服务器证书真伪。虽然一样能获取解析数据,但对于客户端来说是不安全的。

manager.securityPolicy.allowInvalidCertificates = YES;//默认NO

manager.securityPolicy.validatesDomainName = NO;//默认YES

[manager GET:@"https://127.0.0.1:3000" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {

NSLog(@"%@",responseObject);

//将打印:hi : 'Hello World!', hello : 'Hello Node!'字典

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

}];

ios自己搭建服务器证书,iOS一步一步实现Https自建证书校验相关推荐

  1. 苹果手机ios搭建服务器linux,iOS 利用CocoaHttpServer搭建手机本地服务器

    1.首先导入第三方 目录结构 屏幕快照 2017-07-25 下午1.39.53.png 然后导入你需要加载的html资源 17656F3B-8000-42A3-BA37-182924DAA1CF.p ...

  2. 如何搭建服务器 无线传输,iOS 本地搭建服务器使用http传送(wifi快传)

    1.使用第三方的框架:CocoaHTTPServer 2.调用代码,我的百度网盘 _httpserver = [[HTTPServer alloc] init]; [_httpserver setTy ...

  3. ios获取区域服务器信息,ios获取服务器数据

    ios获取服务器数据 内容精选 换一换 调用API出错后,将不会返回结果数据.调用方可根据每个API对应的错误码来定位错误原因.当调用出错时,HTTP请求返回一个4xx或5xx的HTTP状态码.返回的 ...

  4. ios android跨服务器,阴阳师ios怎么转安卓 阴阳师跨系统角色转移服务介绍_游侠手游...

    阴阳师ios怎么转安卓?阴阳师在2021年1月20日更新后开启了跨系统角色转移服务试行,那么本次跨系统角色转移的规则是什么样的,ios和安卓之间转换需要满足什么条件呢?接下来就让我们一起了解一下吧. ...

  5. iOS微信分享服务器设置,iOS 微信分享 universalLink

    1.注册微信 APPID [WXApi registerApp:WX_AppId universalLink:@"https://xxx.yioks.cn/yioks1/"]; 2 ...

  6. node修改服务器默认端口,用node+express搭建服务器,解决跨域问题,更改端口号...

    在学习前端的过程中,最开始我们需要展示在页面上的数据都是写死在系统里的假数据.然而,实际上前端是要与后台服务器交互进行数据存取的.如何搭建服务器见下文. 一.使用Node.js+express用命令行 ...

  7. https域名安全证书怎么配置

    任何东西都是有保质期的网络安全证书也不例外,失效大多是因为您在浏览器上访问网上银行,银行类,财付通,邮件邮箱等等个人私密性的网站较多时会出现安全证书失效国企的提示,并且弹出安全窗口.接下来我们就看ht ...

  8. 免费SSL证书大全,加速普及网站实现HTTPS加密

    免费SSL证书大全,加速普及网站实现HTTPS加密 SSL 证书用于加密 HTTP 协议,实现网站通过HTTPS加密协议访问.随着国内外各大网站实现全站 HTTPS 协议,以及搜索引擎对使用 HTTP ...

  9. shsh验证服务器,SHSH(Signature HaSH blobs)是由Apple验证服务器根据iOS设备ECID和固件版本产生的一个签名证书...

    SHSH(Signature HaSH blobs)是由Apple验证服务器根据iOS设备ECID和固件版本产生的一个签名证书.当我们用iTunes进行恢复固件操作时,iTunes会向苹果验证服务器提 ...

最新文章

  1. 求求你别再用offset和limit分页了
  2. Web服务评估工具Nikto
  3. mysql查询缓慢原因和解决方案
  4. list Control实现单元格编辑与插入Combo Box
  5. 【已解决】IDEA:Cannot start compiler:the SDK is not specified for module...
  6. 物理内存不够用,临时增大Linux交换分区的方法
  7. 使用jedis访问redis
  8. Windows Phone 使用 HttpWebRequest 对象,通过POST 方式上传图片
  9. 如何区分家里的网线是超五类还是超六类的呢?
  10. cad抛物线lisp程序_数控车宏程序编程实用干货,全在这里了...
  11. MySQL:BlackHole
  12. 风阻能发电装置叶片的动力学仿真
  13. vue 检测ie版本_vue判断当前浏览器为IE低版本,给出升级提示;IE11及其他浏览器正常使用-Go语言中文社区...
  14. towe/ jira / tapd / 禅道 协作平台对比
  15. Linux红外驱动重点解析
  16. 如何才能高效学习,99%的人不知道的高效学习法
  17. IDM6.32的安装与激活IDM Crack 6.32 Build 8 + Patch 2019 free (100% working)
  18. linux lilo_LInux装箱商(LILO)| 免费和开源软件
  19. evga x58服务器芯片组,何谓板皇?四大顶级X58主板巅峰对决
  20. 数据库——MySQL概述

热门文章

  1. 三、Python复习教程(重点)- 前端框架实战
  2. UWP 禁止Pivot swip 手势
  3. 搭建一个socks5代理 解决狗东对ip限制nolanjdc无法获取短信问题(搬运工unke原创)
  4. Mac答疑「7」超详细mac新手教程-Mac界面篇
  5. CCF-CSP_201812(第15次)
  6. 百度搜索引擎结果网址参数_反馈搜索结果用时(rsv_sug4)
  7. 龙迅LT86102SXE 是 Lontium 的第 4 代 2 端口 HDMI/DVI 分配器
  8. python笔记2—day2
  9. 苹果系统虚拟机无usb服务器,win10系统苹果电脑运行虚拟机后无法识别显示U盘的详细方案...
  10. HTML5期末大作业:出行网站设计——西安旅游-高质量(9页) HTML+CSS+JavaScript 学生DW网页设计