前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AFNetworking+Python+Flask+pyOpenSSL构建iOS HTTPS客户端&服务器端

AFNetworking+Python+Flask+pyOpenSSL构建iOS HTTPS客户端&服务器端

作者头像
周希
发布2019-10-15 01:07:00
1.3K0
发布2019-10-15 01:07:00
举报
文章被收录于专栏:APP自动化测试APP自动化测试

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

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

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

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

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

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

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

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

证书哪里搞?

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

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

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

1. 安装pyOpenSSL

代码语言:javascript
复制
sudo easy_install pyOpenSSL

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

2. 生成一个Privatekey

代码语言:javascript
复制
openssl genrsa -des3 -out server.key 1024

3. 生成.csr

代码语言:javascript
复制
openssl req -new -key server.key -out server.csr

4.生成.key

代码语言:javascript
复制
cp server.key server.key.org 
代码语言:javascript
复制
openssl rsa -in server.key.org -out server.key

5.生成.crt

代码语言:javascript
复制
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

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

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

代码语言:javascript
复制
1 from flask import Flask, jsonify
2 app = Flask(__name__)
3 
4 @app.route('/test', methods=['GET'])
5 def method():
6     return jsonify({'Result': 'OK'})
7 
8 app.run(port=8100,ssl_context=('/Users/jackey/Downloads/BackHomeServer/server.crt', '/Users/jackey/Downloads/BackHomeServer/server.key'))

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

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

接下来就是配置客户端了

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

代码语言:javascript
复制
openssl x509 -in server.crt -out server.cer -outform der

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

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

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

给个例子:

代码语言:javascript
复制
 1 manager = [AFHTTPSessionManager manager];
 2     
 3 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
 4 securityPolicy.allowInvalidCertificates = YES;
 5 manager.securityPolicy = securityPolicy;
 6 
 7 [manager GET:@"https://localhost:8100/test" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable    responseObject) {
 8         NSLog(@"pass");
 9 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
10         NSLog(@"fail");11 }];

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档