事情的起因是这样的…

iOS10即将发布,晚上逛网站,突然发现一篇新闻安全大过天iOS应用将必须支持ATS安全标准

好嘛,这简直不让人玩了
现在开发iOS9的APP都必须在Info.plist里加入App Transport Security Settings -> Allow Arbitrary Loads == YES
否则http请求都不允许你发

对用户来说是好事,对开发者来说就…

先说一下HTTPS为何物
简单来说,HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,是HTTP的安全版
即HTTP下加入SSL层,HTTPS的安全基础是SSL

用户安全了,你们的所有请求都被保护起来了
开发者就头疼了,https证书是收费的,企业级的应用该用上早用上了,个人开发者怎么活呀…

解决方案一:自行颁发证书(速成请直接看方案二)

在Linux/Unix/OSX下,HTTPS的SSL证书可以自行颁发

安装带SSL的nginx

我用yum装的时候nginx是带ssl的,所以请自行百度

然后配置nginx.conf,像我一样稀里糊涂不清楚具体位置可以输入nginx -V找到nginx.conf的位置

大致配置修改如下,修改前建议备份一下老配置

重启nginxsystemctl restart nginx

如果出现ssl模块的问题,则需要重新编译安装nginx,请自行百度

解决方案一的缺陷

现在你可以通过https访问你的网站了,但是你的证书浏览器可不认识
它们一般会向用户发出警告:

嘿,这个网站看起来像个假的,你的信息有可能被泄露,还要继续吗?

OMG!小白用户直接被吓走了好嘛…(此时你一定在想:我一步步照做,你竟然给我看这个?)

解决方案一的改进(这里必须step by step做)

由此可以看见,证书是解决方案一的症结,如何申请让各大浏览器爷爷都认可的证书呢?
我用的是StartSSL

由于每个人情况不同,我这里只讲我用到的所有东西,尽量不遗漏
1. dnspod.cn
2. 腾讯企业邮 添加webmaster@yourdomain.com的用户,准备接受验证码
3. 一台电脑(你:这个我有,不要你讲)

先去StartSSL注册个账号,会发送一个验证码给你邮箱,如果收不到找找你的垃圾邮件里有没有
注册好之后,找到Validations Wizard选择Domain Validation (for SSL certificate)
填入你的域名,然后这里需要验证你的邮箱,我选择的是webmaster@yourdomain.com,这就是一开始让你准备企业邮箱的原因(当然也有别的企业邮箱,据说网易的也不错)
然后邮箱又会收到一个验证码,最后你就验证完了
但是!又是但是,他提示我们这个验证只有90天,之后需要重新验证,这个我还没到90天,我不知道到了之后会有什么样的灾难发生

然后跳到Certificates Wizard选择Web Server SSL/TLS Certificate
在Validated domain(s)中填入你要的域名,比如hello.yourdomain.com
下面的CSR文件,选择Generated by Myself (.cer PEM format certificate)
这里提供了Windows的方法和Linux/Unix的方法
1. Windows用户请直接下载那个exe
2. Linux/Unix输入

最后,Windows下直接记事本打开.csr文件,Linux/Unix下直接cat,把文本黏贴到网页上

最后跳到的网页,会让你click here一定别忘了点
下载下来是一个zip包,打开是4个zip包,找到NginxServer.zip,里面有个hello.yourdomain.com_bundle.crt文件(还好这次不是zip包了,否则就变俄罗斯套娃了)

利用我们这次得到的hello.yourdomain.com_bundle.crt文件和yourdomain_nopwd.key替换解决方案一里面nginx.conf的2个文件就可以了

解决方法二(其实并没有,耐心点看吧,为了孩子)