2017年1月1日以后,所有iOS需要访问网页的 App 都要面临一个问题:ATS(App Transport Security)。由于 ATS 要求 HTTPS 访问,换句话来说,还有 13 天,苹果就要对 APP 开发者们关闭 HTTP 的大门了。
1、什么是 ATS?
ATS 全称 App Transport Security,是 iOS 9 引入的一套安全机制,默认行为会强制保证所有的网络请求都使用 HTTPS。
2、绕过 ATS?
由于这样的要求影响非常广,苹果也是考虑到开发者的过渡问题,预留了一些绕过 ATS 的方法。比如,可以通过在 Info.plist
中添加 NSAppTransportSecurity
字典并且将 NSAllowsArbitraryLoads
设置为 YES 来禁用 ATS。
但是到了 WWDC 16 后,苹果对 ATS 的推进力度加大,要求从 2017 年 1 月 1 日起,所有的新提交 app 默认是不允许使用 NSAllowsArbitraryLoads
来绕过 ATS 限制的。
虽然还有其他的一些方法,但是紧随苹果的脚步,采用 HTTPS 传输显然是更好、更安全的一个选择。绕过 ATS 协议并不是一个好的方案,苹果强推 ATS 的目的,也是在于防止意外泄露个人信息,并为应用程序提供默认安全行为。
3、启用 HTTPS
在 APP 的服务器上启用 HTTPS 协议其实并没有想象的那么复杂,只需要通过一些简单的步骤部署 SSL 证书即可完成。
HTTPS,是指超文本传输安全协议(Hypertext Transfer Protocol Secure),是一种在 HTTP 协议基础上进行传输加密的安全协议,能够有效保障数据传输安全。
证书方面,可以选择免费版的 Let's Encrypt,也可以购买权威机构颁发的 CA 证书。后者是一个更加可靠、安全的选择,许多云厂商也提供有类似的 SSL 证书服务,并且可以部署到 CDN 上。
由于笔者个人使用腾讯云的服务比较多,下面以腾讯云为例介绍如何申请、部署 SSL 证书。腾讯云的 SSL 证书是由 GeoTrust 颁发的,可免费使用一年。如果你是阿里云或其他云厂商的用户,可以查看各自对应的证书产品。
3.1、申请证书
登录腾讯云之后,前往 SSL 证书管理控制台,点击申请证书,会弹出证书选择框。目前只能选择 GeoTrust 颁布的证书,后续似乎会开放更多证书厂商的产品。
接下来,需要填写一些申请信息,最重要的是绑定域名。假如你的域名的 abc.com,需要填写的必须是类似 a.abc.com 这样非顶级域名。
下一步,会要求手动进行 DNS 验证。具体的步骤可参考产品文档:域名验证指引。
一般配置正确的话,很快就可以拿到属于自己的免费证书了。据笔者个人的情况来看,大概一刷新就可以通过审核。
3.2、服务器安装证书
审核通过后,可以在SSL 证书管理控制台看到证书下载链接。先将证书下载到本地,并上传到 App的服务器,为服务器上安装证书做好准备。
这里,我们以较为常用 Nginx 为例介绍具体安装过程。如果使用的是 Apache 或 IIS 等其他服务器,请参考官方文档。
3.2.1 获取证书
Nginx文件夹内获得SSL证书文件 1_www.domain.com_bundle.crt
和私钥文件2_www.domain.com.key
:
-
1_www.domain.com_bundle.crt
文件包括两段证书代码 “-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----” -
2_www.domain.com.key
文件包括一段私钥代码“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”。
3.2.2 证书安装
将域名 www.domain.com
的证书文件 1_www.domain.com_bundle.crt
、私钥文件2_www.domain.com.key
保存到同一个目录,例如 /usr/local/nginx/conf
目录下。
更新Nginx根目录下 conf/nginx.conf
文件如下:
server {
listen 443;
server_name www.domain.com; #填写绑定证书的域名
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录
index index.html index.htm;
}
}
配置完成后,先用 bin/nginx –t
来测试下配置是否有误。正确无误的话,重启 nginx,就可以使https://www.domain.com 来访问了。
4. CDN 上部署 HTTPS
很多网站都会使用 CDN 服务,因为云厂商一般有提供一些免费的 CDN 流量额度,比如腾讯云就有 60GB 的免费流量。
对于使用了 CDN 的 App 或网站,还可以将 HTTPS 部署在全网 CDN 节点,实现全网数据加密传输功能。
4.1 配置 HTTPS 的条件:
- 域名管理页面,域名的状态为 部署中 或 已启动。
- 域名不是由 COS 同步而来的 .file.myqcloud.com 后缀域名。
- 域名的接入方式为 自有源 或者 COS源、FTP源。
登录CDN控制台,进入 【域名管理】 页面,点击域名右侧 管理 按钮,进入管理页面:
在 【高级配置】中找到 HTTPS 配置模块
4.2 证书类型
腾讯云 CDN 目前支持两种方式部署证书:
- 自有证书:将自有证书、私钥内容上传至 CDN 进行部署,全程加密传输,证书不落地,保障您的证书安全。
- 腾讯云托管证书:也就是上面咱们已经申请成功的 SSL 证书。
4.3 证书配置
前往CDN高级工具-证书管理界面,
根据情况选择希望配置证书的域名、证书类型和回源方式即可。这里需要满足前面提到的这个条件:域名的状态为 部署中 或 已启动。
勾选“腾讯托管证书”后,可以在证书列表下拉菜单中找到刚才申请到的证书。回源方式选择为 HTTPS,之后提交即可。
证书配置成功后,会出现 强制跳转 开关,开启后,即使用户发起 HTTP 请求,也会强制跳转为 HTTPS进行访问。
检测部署效果
完成上面一系列的操作之后,还需要最后确认部署的 SSL 证书是否符合 ATS 要求。否则,折腾了那么久,最终却是做了无用功的话,那是非常痛苦的一件事。
对此,云厂商也是提供了较为方便的检测方式,只需要输入目标域名即可一键检测。
至此,就完成了 App 服务器的 SSL 证书部署,并满足了苹果 ATS 协议的严格要求。
相关推荐
### HTTPS安全配置详解 #### 一、特性简介 HTTPS(Hypertext Transfer Protocol Secure)是一种安全的HTTP协议,它在HTTP的基础上加入了SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议,使得...
Https请求工具类,Java实现http请求,https请求 本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用...
在互联网通信中,HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP协议的安全版本,主要用于确保数据传输过程中的安全性。HTTPS通过使用SSL/TLS协议来加密通信,保护用户隐私和数据完整性,防止中间人...
### Spring Boot 内置 Tomcat 配置 HTTPS 及 HTTP 自动转向 HTTPS #### 一、Spring Boot 内置 Tomcat 配置 HTTPS 访问 为了实现 Spring Boot 应用程序通过内置 Tomcat 服务器支持 HTTPS 访问,我们需要进行以下几...
Node.js实现HTTPS发起POST请求的知识点涉及多个方面,包括Node.js基础、HTTPS协议、HTTP POST请求以及Node.js内置模块的使用方法。 首先,Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用...
`Delphi Https-Post` 是一个关于使用Delphi编程语言实现HTTPS POST请求的专题。在这个场景中,开发者通常需要向HTTPS服务器发送带有数据的请求,以完成诸如用户认证、数据提交等任务。下面我们将深入探讨这一主题...
Struts2支持HTTPS配置,可以帮助开发者轻松实现基于HTTPS的安全Web应用。 首先,我们需要了解HTTPS的基本原理。HTTPS(Hypertext Transfer Protocol Secure)是HTTP的安全版本,它通过SSL/TLS协议为网络通信提供了...
当涉及到使用HTTPS协议的Web应用时,LoadRunner需要进行特定的配置来处理安全连接。本篇文章将深入探讨如何在LoadRunner中配置HTTPS测试。 首先,了解HTTPS的基本概念至关重要。HTTPS是HTTP协议的安全版本,通过...
在Spring Boot框架中,接收HTTPS(安全套接层超文本传输协议)请求是构建安全Web服务的重要步骤。HTTPS提供了一种加密通信的方式,确保数据在客户端和服务器之间传输时不会被中间人窃取或篡改。本文将详细介绍如何在...
### onlyOffice的HTTPS配置 #### 引言 随着网络安全意识的不断提升,越来越多的企业和个人选择使用HTTPS来保护他们的数据传输安全。对于使用onlyOffice文档服务器的用户来说,将系统配置为支持HTTPS同样非常重要。...
在最新的FFmpeg版本中,对HTTPS的支持是其重要更新之一,这意味着用户现在可以利用FFmpeg通过安全的HTTPS协议进行音视频数据的传输和处理。 首先,让我们深入了解一下HTTPS。HTTPS(HyperText Transfer Protocol ...
在本项目中,我们关注的是如何使用ESP8266发起HTTPS请求来访问安全的API接口。HTTPS是HTTP协议的安全版本,它使用SSL/TLS协议来加密通信,确保数据在传输过程中的安全性。 1. **HTTPS基础**: - HTTPS(Hypertext ...
"C#使用Socket发送HTTP/HTTPS请求的实现代码" C#中使用Socket发送HTTP/HTTPS请求是一种高效的方法,特别是在需要自定义HTTP封包或对HTTP请求进行深入控制时。本文主要介绍了如何使用C#的Socket类来发送HTTP/HTTPS...
启用HTTPS访问是确保Web应用程序传输数据安全的重要步骤,因为HTTPS协议使用SSL/TLS来加密通信,可以保护敏感信息不被窃取或篡改。以下是对"weblogic启用https访问"的详细说明: 1. **SSL/TLS概述**:SSL(Secure ...
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI ...
《HTTPS权威指南》是一本深度探讨网络安全领域中HTTPS协议的重要著作。HTTPS,全称为Hypertext Transfer Protocol Secure,是互联网上应用最广泛的一种安全通信协议,用于在客户端和服务器之间建立安全、加密的数据...
本示例项目“C# HTTP/Https 请求demo”提供了如何在C#中发送HTTP和HTTPS请求的方法,涵盖了GET和POST两种常见的HTTP方法。下面我们将详细探讨这些知识点。 1. **HTTP和HTTPS协议**: - HTTP(超文本传输协议)是...
W5500是一款集成度高的、全硬件的TCP/IP协议栈芯片,支持多种网络协议,包括HTTP和HTTPS。本文将深入探讨如何在使用W5500时扩展HTTPS服务,以实现更安全的网络通信。 首先,理解HTTPS的基础是至关重要的。HTTPS...
Android WebView 加载网页(HTTPS 和 HTTP) Android WebView 加载网页是移动应用开发中的一项基本需求。然而,在加载 HTTPS 和 HTTP 网页时,WebView 可能会出现一些问题,本文将详细介绍这两个错误的解决方法。 ...
用友NCC设置UAP开启HTTPS 本文将详细介绍如何使用Apache 2.4在Windows平台上启用HTTPS,并将用友NCC(UFIDA New Clover Cloud)与Apache集成,以实现UAP(Universal Access Platform)开启HTTPS。 Apache安装与...