AFNetworking+Nginx+HTTPS自签名服务器安全通信

简介: 摘要: 1.介绍iOS平台用AFNetworking与HTTPS后台接口进行安全通信。 2.介绍后台自签名证书制作步骤。 3.以及Linux平台Nginx配置HTTPS协议接口的Web站点。

这个关于AFNetworking的HTTPS安全通信的问题,很多没有过第一次经验的以及甚至有过一次经验的都会有点不确定。 其实很简单:

A.对于后台服务器所配置动证书如果是经过CA机构认证颁发的,那么用户用AFNetworking来访问后台接口完全无感觉,就和http一样的方式。
B.但是一个HTTPS的证书如果是知名CA机构认证颁发的,那么就会有问题,AFNetworking默认拒绝和这样的后台服务器通信,因为验证通不过,就和大家网页打开12306网站抢票一样,那个证书也不是经过CA颁发的,而是铁道部自己签名的一个证书。所以,对于中小型初创或是成长型公司来说,买一个https的证书也是需要花费不少费用的。所以大家在做后台通信的时候一般都自签名一个证书来实现https接口。自己签名的的证书可以用下面这个openssl命令进行生成:
AI 代码解读
openssl req -new -x509 -nodes -days 365 -newkey rsa:1024  -out tv.diveinedu.com.crt -keyout tv.diveinedu.com.key
AI 代码解读

其中: -days 365是指定证书的有效期时间长度,单位是天,从命令运行的时刻算起; -newkey rsa:1024是指定新生成的证书使用1024位长度的RSA非对称加密算法; -out 指定输出的证书文件名 -keyout 指定输出的私钥文件名 上面这个命令运行后会要输入一些设置信息:

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Hunan
Locality Name (eg, city) :Changsha
Organization Name (eg, company) [Internet Widgits Pty Ltd]:tv.diveinedu.com
Organizational Unit Name (eg, section) :Market
Common Name (e.g. server FQDN or YOUR name) :tv.diveinedu.com
Email Address :diveinedu@qq.com
AI 代码解读

如果对搭建Linux后台HTTPS服务有兴趣,需要把证书和私钥上传到服务器或者直接在服务器生成,把此证书配置到后台服务器中,以Nginx为例进行如下设置:

1.先新增一个Nginx的虚拟主机配置文件,
AI 代码解读
sudo touch /etc/nginx/sites-available/tv.diveinedu.com
AI 代码解读
2.然后使这个配置文件生效:
AI 代码解读
sudo ln -sf /etc/nginx/sites-available/tv.diveinedu.com /etc/nginx/sites-enabled/tv.diveinedu.com
AI 代码解读
3.编辑该文件:
AI 代码解读
sudo vim /etc/nginx/sites-enabled/tv.diveinedu.com
AI 代码解读
4.敲入 i 进入VIM编辑模式,输入这样配置:
AI 代码解读
server {
    listen 80;#HTTP默认端口80
    server_name tv.diveinedu.com;#主机名,与HTTP请求头域的HOST匹配
    access_log  /var/log/nginx/tv.diveinedu.com.log;#访问日志路径
    return 301 https://$server_name$request_uri;#强制把所有http访问跳转到https
}

server {
    listen 443;#HTTPS默认端口443
    ssl on;#打开SSL安全Socket
    ssl_certificate      /etc/nginx/tv.diveinedu.com.crt;#证书文件路径
    ssl_certificate_key  /etc/nginx/tv.diveinedu.com.key;#私钥文件路径

    server_name tv.diveinedu.com;#主机名,与HTTP请求头域的HOST匹配
    access_log  /var/log/nginx/tv.diveinedu.com.log;#访问日志路径
    location / {
        root /var/www/tv.diveinedu.com/;#网站文档根目录
        index index.php index.html;#默认首页
    }
}
AI 代码解读
5.敲ESC后退出VIM的编辑模式,再敲入 x 回车 在Vim保存退出。 然后执行Nginx配置文件语法检查命令检查配置是否有错:
AI 代码解读
nginx -t
AI 代码解读

如果没有错误就会输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
AI 代码解读
6.然后就只需要重启Nginx服务器了
AI 代码解读
sudo service nginx restart
AI 代码解读

然后就去你的域名服务商后台把你的域名解析到服务器到IP地址就可以自由访问了,只不过会浏览器访问会被自动组织并显示警告,手动添加到信任即可。

如果公司有钱想为用户提供更好的服务和体验,最好还是去知名CA认证机构去注册申请一个有效的证书为妙! 不然浏览器(Chome)会这样:

image
image
image

7.证书格式转换 由于iOS端Apple的API需要der格式证书,故用如下命令转换
AI 代码解读
openssl x509 -outform der -in tv.diveinedu.com.crt -out tv.diveinedu.com.der
AI 代码解读
8.iOS工程Info.plist设置
AI 代码解读
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>tv.diveinedu.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>
AI 代码解读

9.iOS端证书验证代码:

    //openssl x509 -outform der -in tv.diveinedu.com.crt -out tv.diveinedu.com.der
    NSString *certFilePath = [[NSBundle mainBundle] pathForResource:@"tv.diveinedu.com" ofType:@"der"];
    NSData *certData = [NSData dataWithContentsOfFile:certFilePath];
    NSSet *certSet = [NSSet setWithObject:certData];
    AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey withPinnedCertificates:certSet];
    policy.allowInvalidCertificates = YES;
    policy.validatesDomainName = YES;


    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.securityPolicy = policy;
    manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

    [manager GET:@"https://tv.diveinedu.com/channel/" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
AI 代码解读

文章转载自 开源中国社区[https://www.oschina.net]

相关文章
安全体检 | 服务器的终极卫士
阿里云的安全体检是为用户提供的一项免费安全检测工具,旨在通过调用云安全中心和配置审计中的安全检测能力,汇总检测结果,涵盖病毒攻击、风险配置和服务器漏洞三方面。该服务帮助用户及时发现并解决潜在的安全问题,提升云上安全水平。与云服务诊断不同,安全体检更侧重于深层次的安全检测,确保服务器的安全稳定运行。
安全体检 | 服务器的终极卫士
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
75 10
阿里云服务器安全攻略参考:基础防护与云安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器除了提供基础的防护之外,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为您介绍阿里云服务器的基础安全防护机制,以及阿里云提供的各类云安全产品,帮助用户全面了解并选择合适的防护手段,为云上业务保驾护航。
125 11
Nginx伪流媒体服务器搭建详细说明以及案例
Nginx伪流媒体服务器搭建步骤如下:1. 安装Nginx,根据系统选择命令;2. 编辑配置文件(/etc/nginx/nginx.conf),添加mp4相关设置;3. 创建视频目录/usr/share/nginx/html/videos并上传视频;4. 重启Nginx应用更改;5. 通过浏览器访问视频,如http://your_server_ip/videos/example.mp4。注意启用mp4模块,确保视频格式支持伪流媒体播放。
当你的nginx服务器和php服务器不在一起的时候,这个nginx 的root目录问题
两个服务器的网站代码目录需要对齐,docker容器里面也是一样
阿里云服务器购买后设置密码、安全组、基础安全服务、挂载云盘等流程简介
对于初次选购阿里云服务器的用户来说,通过阿里云推出的各类活动买到心仪的云服务器仅仅是第一步。为了确保云服务器能够正常运行并承载您的应用,购买之后还需要给云服务器设置远程登录密码、设置安全组规则、设置基础安全、购买并挂载云盘等操作之后,我们才能使用并部署自己的应用到云服务器上。本文将详细介绍在阿里云的活动中购买云服务器后,您必须完成的几个关键步骤,助您快速上手并充分利用云服务器的强大功能。
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
308 61
服务器的使用安全如何保障
德迅卫士主机安全软件,采用自适应安全架构,有效解决传统专注防御手段的被动处境,精准捕捉每一个安全隐患,为您的主机筑起坚不可摧的安全防线
端到端的ECS可观测性方案,助力云上业务安全稳定
本文介绍了云原生时代保障业务系统可靠性的方法和挑战,重点探讨了阿里云ECS在提升业务稳定性、性能监控及自动化恢复方面的能力。文章分为以下几个部分:首先,阐述了业务可靠性的三个阶段(事前预防、事中处理、事后跟进);其次,分析了云上业务系统面临的困难与挑战,并提出了通过更实时的监测和自动化工具有效规避风险;接着,详细描述了ECS实例稳定性和性能问题的解决方案;然后,介绍了即将发布的ECS Lens产品,它将全面提升云上业务的洞察能力和异常感知能力;最后,通过具体案例展示了如何利用OS自动重启和公网带宽自适应调节等功能确保业务连续性。总结部分强调了ECS致力于增强性能和稳定性的目标。
阿里云国际站注册教程:阿里云服务器安全设置
阿里云国际站注册教程:阿里云服务器安全设置 在云计算领域,阿里云是一个备受推崇的品牌,因其强大的技术支持和优质的服务而受到众多用户的青睐。本文将为您介绍阿里云国际站的注册过程,并重点讲解如何进行阿里云服务器的安全设置。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等