超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。历史上,HTTPS连接经常用于万维网上的交易支付和企业信息系统中敏感信息的传输。在2000年代末至2010年代初,HTTPS开始广泛使用,以确保各类型的网页真实,保护账户和保持用户通信,身份和网络浏览的私密性。另外,还有一种安全超文本传输协议(S-HTTP)的HTTP安全传输实现,但是HTTPS的广泛应用而成为事实上的HTTP安全传输实现,S-HTTP并没有得到广泛支持。
emsp;现如今一般网址的前缀便可以看出该网站支持的协议类型分别为http:\\
和https:\\
HTTP是一种超文本传输协议,其在网络中传输数据是通过明文进行传输,如果应用程序未对数据进行加密处理,则任何人都可以通过监听或者中间人攻击之类的技术手段查看其内容。HTTPS是在HTTP的基础上对数据进行加密。
在协议栈中http和https都属于应用层,都是基于传输层的TCP协议实现的,https实在http的基础上添加了一层SSL/TLS。
传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器-网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布TLS 1.0标准文件(RFC 2246)。随后又公布TLS 1.1(RFC 4346,2006年)、TLS 1.2(RFC 5246,2008年)和TLS 1.3(RFC 8446,2018年)。在浏览器、电子邮件、即时通信、VoIP、网络传真等应用程序中,广泛使用这个协议。许多网站,如Google、Facebook、Wikipedia等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准。
TLS协议采用主从式架构模型,用于在两个应用程序间透过网络创建起安全的连线,防止在交换数据时受到窃听及篡改。
TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密信道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。TLS协议是可选的,必须配置客户端和服务器才能使用。主要有两种方式实现这一目标:一个是使用统一的TLS协议端口(例如:用于HTTPS的端口443);另一个是客户端请求服务器连接到TLS时使用特定的协议机制(例如:电子邮件常用的STARTTLS)。一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据[1]。通过握手,客户端和服务器协商各种参数用于创建安全连接。
握手过程如下:
可以明显的看到,TLS的我收过程比较复杂。
从上面的握手过程中可以看到,整个过程使用到了两种加密方式:非对称加密和对称加密。
非对称加密:
非对称加密:非对称加密也称公开密钥密码,是密码学的一种算法,分别需要公钥和私钥两个密钥,公钥用于加密,私钥用于解密,因为加密和解密的密钥不同,因此称之为非对称加密。其公钥可以公开,可任意向外发布;私钥不可以公开,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。
常见的非对称加密算法有:RSA、ElGamal、DS、ECDSA、ECC等,其中RSA使用最为广泛。另外多说一句:RSA需要解决的问题是大整数因数分解。
对称加密:
对称加密:对称加密在加密和解密过程中使用相同的密钥,与公开密钥加密相比,要求双方获取相同的密钥是对称密钥加密的主要缺点之一。
常见的对称加密算法有:AES、DES、ChaCha20等。
对称加密和非对称加密的不同:
因此TLS通过融合对称加密和非对称加密的优缺点:使用对称加密加密数据,使用非对称加密进行对称加密的密钥交换。从握手过程中可以看到发生在过程4和5。
优点:
缺点:
由于TLS繁琐的握手和加密过程导致HTTPS的性能不佳,如何调优tls提升https的服务响应是必要的。HTTPS协议包含HTTP、TCP和TLS三部分,因此调优也是从三部分入手。
HTTP协议有两个版本HTTP1.0和HTTP2.0。HTTP2.0是针对HTTP1.0的缺陷设计出的高响应版本。
HTTP1.0的缺陷:
相比而言,HTTP2.0的优点:
因此在协议选择上选择HTTP2.0相比于HTTP1.0性能上更好。
由于TCP拥塞控制算法中的慢启动算法,导致刚开始建立链接的cwnd窗口很小,HTTP的数据包可能被拆分为多个小数据包,而小数据包在网络中传输到达需要再进行重组无疑增加了开销,可以通过修改慢启动的初始窗口值,但是这一步需要考虑到目标网络的状况,需要根据实际的网络状况调整。
TCP链接会在当前链接几乎没有任何流量的时候减小cwnd,开启慢启动算法,在服务端可以通过命令sysctl -w net.ipv4.tcp_slow_start_after_idle=0
禁止空闲慢启动,也可以将其写入/etc/sysctl.conf
使其永久有效。
当然还可以调整TCP的其他参数调优TCP,详情见TCP参数调优详解
HTTPS主要性能瓶颈之一是每个链接开始握手阶段,在资源数允许的情况下尽可能的保持每一个链接存活时间长。现在的趋势是使用事件驱动的 WEB 服务器,通过使用固定的线程池(甚至单个线程)处理所有通讯,从而减少每个连接的成本以及被攻击的可能性。长连接的缺点是在最后一个 HTTP 连接完成之后,服务器在关闭连接之前会等待一定时间,虽然一个连接不会消耗太多的资源,但是降低了服务器的总体伸缩性。长连接适用于客户端突发大量请求的场景。
TLS中设计加密算法和密钥交换算法。
如何选择非对称加密算法,对称加密算法,加密长度,密钥交换算法最好根据实际情况进行权衡。
非对称加密算法常用的有RSA,ECDSA,ECDSA在性能和安全性上要优于 RSA,256位的 ECDSA (128位加密强度)提供和 3072位的 RSA 一样的安全性,却有更好地性能。
目前有两种可用的密钥交换算法:DHE 和 ECDHE。其中 DHE 太慢不推荐使用。 密钥交换算法的性能取决于配置的协商参数长度。对于DHE,常用的1024和2048位,分别提供80和112位安全等级。椭圆曲线迪菲-赫尔曼金钥交换(英语:Elliptic Curve Diffie–Hellman key exchange,缩写为ECDH),是一种匿名的密钥合意协议(Key-agreement protocol),这是迪菲-赫尔曼密钥交换的变种,采用椭圆曲线密码学来加强性能与安全性。在这个协定下,双方利用由椭圆曲线密码学建立的公钥与私钥对,在一个不安全的通道中,建立起安全的共有加密资料。
一次完整的 TLS 握手期间,服务器会把它的证书链发送给客户端验证。证书链的长度和正确性对握手的性能有很大影响。
虽然证书吊销状态在不断变化,并且用户代理对证书吊销的行为差异很大,但是作为服务器,要做的就是尽可能快地传递吊销信息。
如果你的服务器与一些新版本协议的特性(例如TLS 1.2)不兼容,浏览器可能需要通过与服务器进行多次尝试,才能协商一个加密的连接。确保良好的 TLS 性能的最好方式是升级最新的 TLS 协议栈以支持较新的协议版本和扩展。
随着 CPU 速度的不断提高,基于软件的 TLS 实现在普通 CPU 上已经运行得足够快,无需专门的加密硬件就能处理大量的 HTTPS 请求。但安装加速卡或许能够提升速度。
使用 CDN 可以实现世界级的性能,它利用地理上分散的服务器提供边缘缓存和流量优化。
当用户离你的服务器越远,访问网络就越慢,在这种情况下连接建立是一个很大的限制因素。为了服务器尽可能靠近最终用户,CDN 经营着大量的地理分布的服务器,它可以提供两种降低延迟的方式,即边缘缓存和连接管理。
由于 CDN 服务器贴近用户,可以将你的文件提供给用户,就像你的服务器真的在那里一样。
如果你的内容是动态的、用户特定的,那么久无法通过 CDN 缓存数据。但是,一个不错的 CDN 即使没有任何缓存,也能通过连接管理提供帮助,那就是它可以通过长时间保持的长连接消除大部分建立连接的成本。
建立连接期间大部分的时间都花在等待上面。为了尽量较少等待,CDN 通过自己的基础设置将流量路由到距离目的地最近的一个点。因为是 CDN 自己完全可控的服务器,它可以内部保持长连接很长一段时间。
当使用 CDN 时,用户连接到最近的 CDN 节点,这只有很短的距离,TLS 握手的网络延迟也很短;而 CDN 与服务器之间可以直接复用已有的远距离长连接。这意味着与 CDN 快速初始 TLS 握手后,用户与服务器就建立了有效连接。
维基-HTTPS
HTTPS加密(握手)过程
How does https works?
how https works
对称加密和非对称的加密 的优缺点和理解
维基-TLS
HTTP与HTTPS的区别
TCP参数调优详解
HTTP2.0与HTTP1.0的区别
HTTP2的优点
维基-ECDHE
HTTPS 之 TLS 性能调优