浅谈HTTPS
苹果公司要求,从2017年1月起,所有新上线或更新的应用,都应该支持ATS安全标准。什么是ATS?ATS(App Transport Security)是为了提高App与服务器之间安全传输数据一个特性,这个特性从iOS 9和Mac OS X 10.11开始使用,它默认需要满足以下几个条件:
1、服务器必须启用HTTPS,且TLS版本至少是1.2版本
2、连接加密只允许几种先进的加密算法 证书必须使用SHA256或者更好的哈希算法进行签名,要么是2048位或者更长的RSA密钥,要么就是256位或更长的ECC密钥。
除了苹果公司,Google和Mozilla都在加速推进HTTPS。今天我们就来聊聊为什么要推进HTTPS。
一、HTTPS的诞生和定义
我们知道HTTP是明文传输的,可能面临劫持、篡改、监听和窃取的安全风险,为了解决这个问题HTTPS出现了。这里给出维基百科对于HTTPS的定义:
超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。
二、HTTPS的加密技术
HTTPS和HTTP最大的区别之一,是(依赖于SSL/TLS)提供了信息加密、身份验证和完整性校验的功能,可以解决HTTP存在的安全问题。而以上功能的实现离不开加密技术。
我们知道,加密算法根据加密和解密的密钥是否相同,分为两种:对称加密和非对称加密。
对称密钥加密(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥(定义来源于维基百科)。常用的对称加密算法有:
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。
公开密钥加密(英语:public-key cryptography,又译为公开密钥加密),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥(定义来源于维基百科)。常用的非对称加密算法有:
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准)。
ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
对称加密算法和非对称加密算法各有优缺点。对称加密强度很高,只要使用的密钥足够长,破解几乎不可能。优点是速度快,通常在消息发送方需要加密大量数据时使用。缺点是在数据传送前,发送方和接收方必须商定好密钥,然后双方都能保存好密钥,一旦一方的密钥泄漏,加密信息就不安全了。非对称加密算法能解决密钥安全性问题,优点是安全性更高,缺点是速度较慢。
因此HTTPS采用对称加密和非对称加密两者并用的混合加密机制,在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。
非对称加密算法存在一个问题,无法证明密钥本身是否就是真实的密钥,因此实际上挡不住中间人攻击。中间人攻击(Man-in-the-middle attack,缩写:MITM)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制(定义来源于维基百科)。
为解决上述问题,采用HTTPS的服务器必须从CA (Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。服务器在建立安全连接时带上CA的签名。CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等。CA的安全性是由操作系统或者浏览器来认证的。操作系统或者浏览器会在安装的时候带上一个他们认为安全的CA证书列表,只有建立安全连接的一方带有这些CA的签名,操作系统和浏览器才会认为这个链接是安全的,否则就有可能遭到中间人攻击。