事情的起因是这样的…
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证书可以自行颁发
1 2 3 |
openssl genrsa -des3 -out yourname.key 1024 openssl req -new -key yourname.key -out yourname.csr openssl rsa -in yourname.key -out yourname_nopwd.key |
安装带SSL的nginx
1 |
这里应该有代码,但是! |
我用yum装的时候nginx是带ssl的,所以请自行百度
然后配置nginx.conf
,像我一样稀里糊涂不清楚具体位置可以输入nginx -V
找到nginx.conf的位置
大致配置修改如下,修改前建议备份一下老配置
1 2 3 4 5 6 7 8 9 10 |
server { ... listen 443; ... ssl on; ssl_certificate /path/to/yourname.crt; ssl_certificate_key /path/to/yourname_nopwd.key; ... } |
重启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输入
1 2 |
openssl req -newkey rsa:2048 -keyout yourname.key -out yourname.csr openssl rsa -in yourname.key -out yourdomain_nopwd.key |
最后,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个文件就可以了