当前架构nginx做一层转发,内网有无数个web服务器,http跑的好好的,为啥要去搞个https呢?来看这一段:
2016年上半年,苹果就在WWDC大会上宣布,自2017年1月1日起,所有iOS应用都必须启用 ATS,全部使用HTTPS安全链接,否则不予通过上架审核。
App Transport Security,简称 ATS,是苹果在 iOS 9 当中首次推出的一项安全功能。在启用 ATS 之后,它会强制应用通过 HTTPS(而不是 HTTP)连接网络服务,这能够通过加密来保障用户数据安全。
HTTPS 当中的“S”代表的是“安全”(secure),在登录银行或电邮账号时,你会常常看到它出现在浏览器地址栏。不过,移动应用在网络连接安全性上面没有那么透明,用户很难知道应用连接网络时使用的是 HTTP 还是 HTTPS。
ATS 要求服务器部署 SSL 证书,启用 HTTPS 加密连接。且需满足以下条件:
① ATS要求服务器必须支持传输层安全(TLS)协议1.2以上版本;
② 通讯中的加密套件配置要求支持列出的正向保密;(以下Apple官方文档列表)
③ 数字证书必须使用SHA256或者更高级的签名哈希算法签名,并且保证密钥是2048位及以上的RSA密钥或者256位及以上的ECC算法。
可见,苹果这次态度坚硬,不搞https都不会让你上架。有人说苹果脑子有抽风了,其实这都是为了用户信息安全。使用https通过算法加密来保障信息安全,但是访问网页的速度肯定下降了。
首先我们需要一张权威机构颁发认证的证书。网上有很多,比如腾讯云,阿里云,godaddy。
那些证书机构颁发的证书能用:苹果官方信任证书
我们的域名就是从godaddy租用的,所以直接在godaddy上买证书吧。打开godaddy官网https://sg.godaddy.com/zh/web-security/ssl-certificate
可以看到他有三种类型,这里我们要做4个域名证书,所以选择第二种。然后按着它的步骤去买吧(这里你需要在服务器上做一张.key的文件,要保存下来,服务器部署的时候有用),证书审核要几天时间。(打电话给客服可以打折哦!)
证书审核完成后打开goddy官网点击我的产品查看SSL证书。
点击管理,添加主题备用名称(这其实就是叫你添加子域名用的),添加完成后保存。
这里要等待审核,验证域名是不是你的。很快,几分钟,就搞定了。然后根据服务器类型下载证书,如果是nginx就选择其他下载。
下载完成后。有两个文件把这两个文件合并。
cat 3d0d797fae35d8cd.crt gd_bundle-g2-g1.crt >test.com.crt
然后把test.com.crt上传到服务器上,这个时候加上你申请是自己做的.key文件,应该有两个文件了。
我是nginx+apache结构,nginx挡在前面,只要在nginx上加上https证书就行了。
打开nginx配置文件。
vi /usr/local/nginx/conf/nginx.conf
加上
server {
listen 443;
server_name test.com; //你的域名
ssl on;
ssl_certificate /usr/local/nginx/conf/test.com.crt; //从godaddy上下载下来合并的文件
ssl_certificate_key /usr/local/nginx/conf/test.com.key; //自己申请证书时做的key
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; //安全协议,iOS ATS只支持TLSv1.2即以上
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://test.com; //这里是我要代理的apache的域名
client_max_body_size 35m;
}
}
保存后,nginx -t 一下,它会检查是否有错误,如果证书弄错了,也会报错。
正确的应该是这样
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
这个时候打开链接https://test.com,
已经使用我们的证书了,而且用的是TLS 1.2协议,苹果认得协议。
当然,访问http://test.com还和原来一样。如果你想访问http的人也跳转到https可以把原来监听80端口的改成这样
server {
listen 80;
server_name test.com;
return 301 https://$server_name$request_uri;
}
如果发现用的是TLS 1.0的协议,或者不能正确使用证书,可能是你的nginx或者openssl的版本太低导致的。可以下载重新安装即可。