对于HTTPS我在网上找了一堆资料看了下, 各种协议和证书已经有点晕了

最后我现有的感觉是, 在HTTP服务器上放一个证书, 在原本的HTTP访问之前客户端先检查证书是否正确

如果客户端证书检查正确, 说明对 这个服务器就是我要连接的那个server

不对, 就说明这个server是个假冒的

同样也可以在客户端放一个证书, 服务器端检查客户端传来的证书

如果服务器检查证书正确, 就说明这个客户端是我的小弟 我允许他连接进来

不对, 就说明这个客户端是"卧底", 不能放他进来

好了 不扯犊子, 说说我搭建的过程

证书哪里搞?

可以在网上找, 有收费的 也有免费试用的, 也能自己做

看了下不想折腾, 就自己做一个吧

这个就要用上pyOpenSSL了, 方法如下

1. 安装pyOpenSSL

sudo easy_install pyOpenSSL

安装好就可以开始自己做证书了

2. 生成一个Privatekey

openssl genrsa -des3 -out server.key 

3. 生成.csr

openssl req -new -key server.key -out server.csr

4.生成.key

cp server.key server.key.org 
openssl rsa -in server.key.org -out server.key

5.生成.crt

openssl x509 -req -days  -in server.csr -signkey server.key -out server.crt

好了, 这样在当前目录就有server.key & server.crt, 这两个可以直接给服务器用

服务器我是用Python+Flask, 提供一个例子代码:

 from flask import Flask, jsonify
app = Flask(__name__) @app.route('/test', methods=['GET'])
def method():
return jsonify({'Result': 'OK'}) app.run(port=8100,ssl_context=('/Users/jackey/Downloads/BackHomeServer/server.crt', '/Users/jackey/Downloads/BackHomeServer/server.key'))

好了, 上面这些就差不多做了个简单的HTTPS server

用浏览器测试了下, 要手动设置信任这个证书才可以正常连接

接下来就是配置客户端了

在这之前要先把crt证书转换成cer格式, 同样用openSSL代码如下:

openssl x509 -in server.crt -out server.cer -outform der

这样当前目录就多了一个server.cer

把server.cer拖到项目中, 记得Copy item if needed跟Targets都要勾上, 不然会报错

然后就用AFNetworking连接就好了, 只是比一般HTTP连接多了设置证书部分

给个例子:

 manager = [AFHTTPSessionManager manager];

 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy; [manager GET:@"https://localhost:8100/test" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"pass");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"fail"); }];

这样一个简单的HTTPS链就完成了, 不过如果对安全性要求比较高

就要在证书跟验证方式上面调整了

AFNetworking+Python+Flask+pyOpenSSL构建iOS HTTPS客户端&服务器端的更多相关文章

  1. https如何使用python+flask来实现

    摘要:一般http中存在请求信息明文传输,容易被窃听截取:数据的完整性未校验,容易被篡改:没有验证对方身份,存在冒充危险.面对这些问题,怎么破? 一.为什么要用https 一般http中存在如下问题: ...

  2. [Python]Flask构建网站分析应用

    原文Saturday morning hacks: Building an Analytics App with Flask - 由orangleliu友情翻译 ,主要是通过埋点技术来实现web网页的 ...

  3. Python flask构建微信小程序订餐系统

    第1章 <Python Flask构建微信小程序订餐系统>课程简介 本章内容会带领大家通览整体架构,功能模块,及学习建议.让大家在一个清晰的开发思路下,进行后续的学习.同时领着大家登陆ht ...

  4. 【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https

    问题描述 在上篇博文"[Azure 应用服务]App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)"中,实现了通过 HT ...

  5. Python flask构建微信小程序订餐系统☝☝☝

    Python flask构建微信小程序订餐系统☝☝☝ 一.Flask MVC框架结构 1.1实际项目结构 1.2application.py  项目配置文件 Flask之flask-script模块使 ...

  6. Python flask 构建可扩展的restful apl☝☝☝

    Python flask 构建可扩展的restful apl☝☝☝ Flask-RESTful是flask的扩展,增加了对快速构建REST API的支持.Flask-RESTful通过最少的设置鼓励最 ...

  7. Python flask 构建微电影视频网站☝☝☝

    Python flask 构建微电影视频网站☝☝☝ 1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridD ...

  8. Python flask构建微信小程序订餐系统✍✍✍

    Python flask构建微信小程序订餐系统  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...

  9. Python flask 构建可扩展的restful apl✍✍✍

    Python flask 构建可扩展的restful apl  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...

随机推荐

  1. 自己关于cocoapods的使用的一些理解和总结

    老大让我自己学习用一下cocoapods的使用,于是自己上网查了很多的信息,在安装使用过程中,总是出现了很多问题,然后发现有些人的教程好像并不完全好用,我的感觉是应该每个人遇到的问题都不尽相同,所以 ...

  2. 如何用Matlab将cell数据写入文件

    我们知道,一般的文件读写函数是不接受直接将cell内容(非数值)直接写入文件的, 例如:dlmwrite('o.txt', C, 'delimiter', '\t');%C 为cell类型数据,会报错 ...

  3. 移动App崩溃的测试用例设计

    我们的日常生活中对移动设备越来越多的使用意味着移动App测试这个主题已成为需要考虑的一个无法避免的问题.根据最近的调查研究,用户难以容忍有bug的移动App. 移动App Bug的影响是用户体验差.A ...

  4. 接口测试总结<转>

    本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系.但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍为 ...

  5. Java学习笔记 06 数字格式化及数学运算

    一.数字格式化 DecimalFormat类 >>DecimalFormat是NumberFormat的子类,用于格式化十进制数,可以将一些数字格式化为整数.浮点数.百分数等.通过使用该类 ...

  6. JS无刷新分页插件

    本文介绍一个本人自己写的一JS分页插件 <script src="/Js/smart.page.min.js" type="text/javascript" ...

  7. VM12安装OS X10.11步骤及说明

    参考文献: 1. http://www.crsay.com/network/enable-hardware-based-dep.html 2. http://jingyan.baidu.com/art ...

  8. java 枚举类型知识点记录

    在日常开发中,我们常用接口装常量或者在类里面写静态常量,java1.5以后加入了枚举类型enum.枚举类型是由一组固定的常量组成的类型.枚举本质是int值.因为枚举类型没有可以访问的构造器,所以枚举类 ...

  9. 基于VC的ACM音频编程接口压缩Wave音频(一)

    (一)概述 音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要 ...

  10. 一个用shell写的统计目录下统计文件行数的代码

    此代码是用来回忆当初学的shell脚本,很多知识忘了,写这个花了我三个小时的时间 #!/bin/ksh #count *.c file the num of lineg_csum=0g_hsum=0 ...