专栏首页APP自动化测试AFNetworking+Python+Flask+pyOpenSSL构建iOS HTTPS客户端&服务器端

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

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

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

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

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

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

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

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

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

证书哪里搞?

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

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

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

1. 安装pyOpenSSL

sudo easy_install pyOpenSSL

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

2. 生成一个Privatekey

openssl genrsa -des3 -out server.key 1024

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 365 -in server.csr -signkey server.key -out server.crt

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

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

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代码如下:

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

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

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

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

给个例子:

 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链就完成了, 不过如果对安全性要求比较高

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx怎么实现https?Nginx 安装 SSL 配置 HTTPS 超详细完整全过程

    文章来源:Nginx怎么实现https?Nginx 安装 SSL 配置 HTTPS 超详细完整全过程

    尊托云数
  • 【HTB系列】靶机Chaos的渗透测试详解

    靶机上运行这http服,pop3 imap 以及它们对应的ssl加密后的服务,还有一个就是监听在1000的MiniServ

    徐焱
  • CoreFTPServer653 Dos 漏洞攻击

    CoreFTP是一款免费,安全的FTP客户端。提供了一种快速,简便,可靠的方式来通过FTP更新和维护网站。它还提供了一种安全的方法(通过SSL,TLS,...

    墙角睡大觉
  • web框架原理,http 协议

    #思考: """ 用户在浏览器中输入网址,浏览器会向服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 无规矩不成方圆, 所以必须有一个统一的规则,让...

    郭大侠
  • hls视频的加解密示例

    hls的加密采用aes-128-cbc, 关于aes-128-cbc, 请参考前文使用openssl命令加解密 aes-128-cbc的简单示例.

    望天
  • 抓取IOS的apsd进程流量

    IOS的apsd是Apple Push Service的相关进程,很多系统服务都跟他有关,比如iMessage、Homekit,因此想抓包查看他是怎么实现的。

    ascii0x03
  • requests访问https站点证书告警问题

    想使用api的方式去访问公司内部azkaban平台,https站点,azkaban的官方api文档使用的curl语句,如下:

    千往
  • FTP服务器

    FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。

    胡齐
  • 教你秒建受信任的本地 SSL 证书,彻底解决开发测试环境的无效证书警告烦恼!

    您是否厌倦了在本地开发项目中使用不受信任的 SSL 证书?维护自己的证书颁发机构(CA)是一个痛苦的事情,这过程中需要用到神秘的程序和命令。在本指南中,我将向您...

    iMike
  • 快速了解Https

    HTTPS:https是http与ssl的结合,为了解决http明文传输导致信息泄露的问题。ssl通过公钥和私钥保证客户端和服务器之间的通讯加密,由权威机构办法...

    用户4372098

扫码关注云+社区

领取腾讯云代金券