关于HTTPS理论和实践

Summary:

HTTP 通信时,可能信息被监听、服务器或客户端身份伪装等安全问题,HTTPS 则能有效解决这些问题。

原始的HTTP连接的时候,因服务器与用户之间是直接进行明文传输,导致用户面临着很多的风险与威胁。攻击者可以轻易的截获或者篡改传输的数据。包括窃取用户的Session信息、注入有害的代码等,乃至于修改用户传送至服务器的数据。

我们并不能替用户选择所使用的网络,他们很有可能使用一个开放的,任何人都可以窃听的网络,譬如一个咖啡馆或者机场里面的开放WiFi网络。普通的 用户很有可能被欺骗地随便连上一个叫免费热点的网络,或者使用一个可以随便被插入广告的网路当中。如果攻击者会窃听或者篡改网路中的数据,那么用户与服务 器交换的数据就好不可信了,幸好HTTPS 的出现则能有效解决这些问题。

HTTPS最早主要用于经融这样安全要求较高的敏感网络,譬如常用的社交网络和搜索引擎。 HTTPS协议使用的是TLS(SSL的升级版本)协议,只要配置与使用得当,就能有效抵御窃听与篡改,从而有效保护我们将要去访问的网站。用技术化的方式说,HTTPS能够有效保障数据机密性与完整性,并且能够完成用户端与客户端的双重验证。

随着面临的风险日渐增多,我们应该将所有的网络数据当做敏感数据并且进行加密传输。已经有很多的浏览器厂商宣称要废弃所有的非HTTPS的请求。目前如果要大范围推广使用HTTPS还是有些难度,现在大范围内使用HTTPS会被认为造成很多计算资源的浪费,不过随着现代硬件与浏览器的发展,这点计算资源已经不足为道。另外,从一个证书认证机构获取证书也会打消一些用户使用HTTPS的念头,不过下面我们介绍的像Let‘s Encrypt这样的免费的服务就可以打破这种障碍。

Why HTTPS?

HTTP日常使用极为广泛的协议,它很优秀且方便,但还是存在一些问题,如:

明文通信,内容可以直接被窃听
无法验证报文的完整性,可能被篡改
通信方身份不验证,可能遇到假的客户端或服务器
中间人攻击与内容窃听

HTTP 不会对请求和响应的内容进行加密,报文直接使用明文发送。报文在服务器与客户端流转中间,会经过若干个结点,这些结点中随时都可能会有窃听行为。因为通信一定会经过中间很多个结点,所以就算是报文经过了加密,也一样会被窃听到,不过是窃听到加密后的内容。要窃听相同段上的通信还是很简单的,比如可以使用常用的抓包工具 Wireshark。这种情况下,保护信息安全最常用的方式就是采取加密了,加密方式可以根据加密对象分以下几种:

(1)通信加密

HTTP 协议基于 TCP/IP 协议族,它没有加密机制。但可以通过 SSL(Secure Socket Layer,安全套接层)建立安全的通信线路,再进行 HTTP 通信,这种与 SSL 结合使用的称为 HTTPS(HTTP Secure,超文本传安全协议)。

(2)内容加密
还可以对通信内容本身加密。HTTP 协议中没有加密机制,但可以对其传输的内容进行加密,也就是对报文内容进行加密。这种加密方式要求客户端对 HTTP 报文进行加密处理后再发送给服务器端,服务器端拿到加密后的报文再进行解密。这种加密方式不同于 SSL 将整个通信线路进行加密,所以它还是有被篡改的风险的。

报文篡改

(1)接收到的内容可能被做假

HTTP 协议是无法证明通信报文的完整性的。因此请求或响应在途中随时可能被篡改而不自知,也就是说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。比如浏览器从某个网站上下载一个文件,它是无法确定下载的文件和服务器上有些话的文件是同一个文件的。文件在传输过程中被掉包了也是不知道的。这种请求或响应在传输途中,被拦截、篡改的攻击就是中间人攻击。比如某运营商或者某些DNS提供商会偷偷地在你的网页中插入广告脚本,就是典型的例子。

(2) 防篡改

也有一些 HTTP 协议确定报文完整性的方法,不过这些方法很不方便,也不太可靠。用得最多的就是 MD5 等散列值校验的方法。很多文件下载服务的网站都会提供相应文件的 MD5 散列值,一来得用户亲自去动手校验(中国估计只有 0.1% 不到的用户懂得怎么做吧),二来如果网站提供的 MD5 值也被改写的话呢?所以这种方法不方便也不可靠。

仿冒服务器/客户端
(1) DDOS攻击与钓鱼网站

在 HTTP 通信时,由于服务器不确认请求发起方的身份,所以任何设备都可以发起请求,服务器会对每一个接收到的请求进行响应(当然,服务器可以限制 IP 地址和端口号)。由于服务器会响应所有接收到的请求,所以有人就利用这一点,给服务器发起海量的无意义的请求,造成服务器无法响应正式的请求,这就是 Dos 攻击(Denial Of Service,拒绝服务攻击)。由于客户端也不会验证服务器是否真实,所以遇到来自假的服务器的响应时,客户端也不知道,只能交由人来判断。钓鱼网站就是利用了这一点。

(2) 身份认证

HTTP 协议无法确认通信方,而 SSL 则是可以的。SSL 不仅提供了加密处理,还提供了叫做“证书”的手段,用于确定通信方的身份。证书是由值得信任的第三方机构颁发(已获得社会认可的企业或组织机构)的,用以证明服务器和客户端的身份。而且伪造证书从目前的技术来看,是一件极为难的事情,所以证书往往可以确定通信方的身份。以客户端访问网页为例。客户端在开始通信之前,先向第三机机构确认 Web 网站服务器的证书的有效性,再得到其确认后,再开始与服务器进行通信。

Definition
HTTPS = HTTP + 加密 + 认证 + 完整性保护,HTTPS 也就是 HTTP 加上加密处理、认证以及完整性保护。使用 HTTPS 通信时,用的是 https://,而不是 http://。另外,当浏览器访问 HTTPS 的 Web 网站时,浏览器地址栏会出现一个带锁的标记。要注意,HTTPS 并非是应用层的新协议,而是 HTTP 通信接口部分用 SSL 协议代替而已。本来,HTTP 是直接基于 TCP 通信。在 HTTPS 中,它先和 SSL 通信,SSL 再和 TCP 通信。所以说 HTTPS 是披了层 SSL 外壳的 HTTP。SSL 是独立于 HTTP 的协议,所以其他类似于 HTTP 的应用层 SMTP 等协议都可以配合 SSL 协议使用,也可以给它们增强安全性

Performance
HTTPS 使用 SSL 通信,所以它的处理速度会比 HTTP 要慢。

一是通信慢。它和 HTTP 相比,网络负载会变慢 2 到 100倍。除去和 TCP 连接、发送 HTTP 请求及响应外,还必须进行 SSL 通信,因此整体上处理通信量会不可避免的增加。

二是 SSL 必须进行加密处理。在服务器和客户端都需要进行加密和解密的去处处理。所以它比 HTTP 会更多地消耗服务器和客户端的硬件资源。

Reference
https://en.wikipedia.org/wiki/HTTP
https://en.wikipedia.org/wiki/Transport_Layer_Security
https://en.wikipedia.org/wiki/HTTPS
https://en.wikipedia.org/wiki/RSA_(cryptosystem)
SSL/TLS Protocol
SSL协议,是一种安全传输协议,最初是由 Netscape 在1996年发布,由于一些安全的原因SSL v1.0和SSL v2.0都没有公开,直到1996年的SSL v3.0。TLS是SSL v3.0的升级版,目前市面上所有的Https都是用的是TLS,而不是SSL。本文中很多地方混用了SSL与TLS这个名词,大家能够理解就好。
其中Handshake protocol,Change Ciper Spec protocol和Alert protocol组成了SSL Handshaking Protocols。

Record Protocol有三个连接状态(Connection State),连接状态定义了压缩,加密和MAC算法。所有的Record都是被当前状态(Current State)确定的算法处理的。

TLS Handshake Protocol和Change Ciper Spec Protocol会导致Record Protocol状态切换。

empty state -------------------> pending state ------------------> current state

Handshake Protocol                Change Cipher Spec
初始当前状态(Current State)没有指定加密,压缩和MAC算法,因而在完成TLS Handshaking Protocols一系列动作之前,客户端和服务端的数据都是明文传输的;当TLS完成握手过程后,客户端和服务端确定了加密,压缩和MAC算法及其参数,数据(Record)会通过指定算法处理。

密码学原理
数据在传输过程中,很容易被窃听。加密就是保护数据安全的措施。一般是利用技术手段把数据变成乱码(加密)传送,到达目的地后,再利用对应的技术手段还原数据(解密)。加密包含算法和密钥两个元素。算法将要加密的数据与密钥(一串数字)相结合,产生不可理解的密文。由此可见,密钥与算法同样重要。对数据加密技术可以分为两类:对称加密(对称密钥加密)和非对称加密(非对称密钥加密)。SSL 采用了 非对称加密(Public-key cryptography)的加密处理方式。

现在的加密方法中,加密算法都是公开的,网上都有各种算法原理解析的内容。加密算法虽然是公开的,算法用到的密钥却是保密的,以此来保持加密方法的安全性。加密和解密都会用到密钥。有了密钥就可以解密了,如果密钥被攻击者获得,加密也就没有意义了。

对称加密/非公开密钥加密

对称加密的意思就是,加密数据用的密钥,跟解密数据用的密钥是一样的。对称加密的优点在于加密、解密效率通常比较高。缺点在于,数据发送方、数据接收方需要协商、共享同一把密钥,并确保密钥不泄露给其他人。此外,对于多个有数据交换需求的个体,两两之间需要分配并维护一把密钥,这个带来的成本基本是不可接受的。

非对称加密/公开密钥加密

非对称加密方式能很好地解决对称加密的困难。非对称加密方式有两把密钥。一把叫做私有密钥(private key),另一把叫做非对称(public key)。私有密钥是一方保管,而非对称则谁都可以获得。这种方式是需要发送密文的一方先获得对方的非对称,使用已知的算法进行加密处理。对方收到被加密的信息后,再使用自己的私有密钥进行解密。这种加密方式有意思是的加密算法的神奇,经过这个公开的算法加密后的密文,即使知道非对称,也是无法对密文还原的。要想对密文进行解决,必须要有私钥才行。所以非对称加密是非常安全的,即使窃听到密文和非对称,却还是无法进行解密。

非对称加密算法用的一般是 RSA 算法(这可能是目前最重要的算法了)。这个算法由3个小伙子在1977年提出,它的主要原理是:将两个大素数相乘很简单,但想要这个乘积进行因式分解极其困难,因此可以将乘积公开作为非对称。不过随着目前的分布式计算和量子计算机的快速发展,说不定在将来也许能破解这个算法了。
证书

在测试的时候我们可以自己创建配置一个证书用于HTTPS认证,不过如果你要提供服务给普通用户使用,那么还是需要从可信的第三方CA机构来获取可信的证 书。对于很多开发者而言,一个免费的CA证书是个不错的选择。当你搜索CA的时候,你可能会遇到几个不同等级的证书。最常见的就是Domain Validation(DV),用于认证一个域名的所有者。再往上就是所谓的Organization Validation(OV)与Extended Validation(EV),包括了验证这些证书的请求机构的信息。虽然高级别的证书需要额外的消耗,不过还是很值得的。

时间: 2024-10-24 14:59:52

关于HTTPS理论和实践的相关文章

我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践

写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听你,清风吹送,田野短笛:第一次看你,半弯新湖,鱼跃翠堤:第一次念你,燕飞巢冷,释怀记忆:第一次梦你,云翔海岛,轮渡迤逦:第一次认你,怨江别续,草桥知己:第一次怕你,命悬一线,遗憾禁忌:第一次悟你,千年菩提,生死一起. 人生有很多的第一次:小时候第一次牙牙学语.第一次学蹒跚学步...长大后第一次上课.第一次逃课.第一次骑自行车.第一次懂事.第一次和喜

浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM

下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P27) 1.从github上下载源码,并解压 Ubuntu上,解压zip,先找到zip文件所在位置,然后运行下面代码,进行解压. unzip slambook-master.zip 解压后,找到ch2文件夹,在文件夹中找到helloSLAM.cpp文件 运行cpp文件 g++ helloSLAM.cpp 如未安

从理论到实践,全方位认识DNS

从理论到实践,全方位认识DNS 2015-11-23 程序员之家 作者:selfboot 原文:http://segmentfault.com/a/1190000003956853 对于 DNS(Domain Name System) 大家肯定不陌生,不就是用来将一个网站的域名转换为对应的IP吗.当我们发现可以上QQ但不能浏览网页时,我们会想到可能是域名服务器挂掉了:当我们用别人提供的hosts文件浏览到一个“不存在”的网页时,我们会了解到域名解析系统的脆弱. 然而关于DNS还有一大堆故事值得我

CAN调度理论与实践分析

CAN调度理论与实践分析 分布式嵌入式系统是当前嵌入式系统的重要发展方向,因为它能提供更强的性能,节约系统的总体成本.但是由于各单个节点必须有通信网络相连才能协调地工作,网络就成了关键部分,没有网络提供及时正确的数据和命令,就谈不上所设计的系统服务了.在汽车的分布式嵌入式系统中,目前主流的通信网络是CAN总线.CAN是事件触发的通信协议,它根据消息的优先等级和节点的状态自动地调度消息的传送.低优先级的消息会因同时发生的高优先级消息太多而不能及时发送,高优先级消息也有可能由于节点状态等的影响而丢失

视频编解码的理论和实践2:Ffmpeg视频编解码

近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 <视频直播关键技术:流畅.拥塞和延时追赶> <视频直播技术详解:直播的推流调度> <音视频通话:小议音频处理与压缩技术> <视频编解码的理论和实践1:基础知识介绍>   1.Ffmpeg介绍 <视频编解码的理论和实践1:基础知识介绍>介绍了视频编码的基础

《分布式机器学习:算法、理论与实践》PDF+刘铁岩+资料学习

<分布式机器学习:算法.理论与实践>旨在全面介绍分布式机器学习的现状,深入分析其中的核心技术问题,并且讨论该领域未来的发展方向. 下载:https://pan.baidu.com/s/1XeOGCQK5qWCba8VK0KU21w<分布式机器学习:算法.理论与实践>PDF,273页,带书签目录,文字可以复制. 人工智能和大数据时代,解决最有挑战性问题的主流方案是分布式机器学习! <分布式机器学习:算法.理论与实践>旨在全面介绍分布式机器学习的现状,深入分析其中的核心技术

数据仓库架构理论和实践,数据仓库建模指南

数据仓库架构理论和实践,数据仓库建模指南 背景 在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据.在互联网企业中,常见的ODS数据有业务日志数据(Log)和业务DB数据(DB)两类.对于业务DB数据来说,从MySQL等关系型数据库的业务数据进行采集,然后导入到Hive中,是进行数据仓库生产的重要环节. 如何准确.高效地把MySQL数据同步到Hive中?一般常用的解决方案是批量取数并Load:直连MySQL去Select表中的

机器学习资料《分布式机器学习算法理论与实践》+《白话机器学习算法》+《Python机器学习基础教程》

机器学习正在迅速改变我们的世界.我们几乎每天都会读到机器学习如何改变日常的生活. 人工智能和大数据时代,解决最有挑战性问题的主流方案是分布式机器学习! <分布式机器学习:算法.理论与实践>电子书资料全面介绍分布式机器学习的现状,深入分析其中的核心技术问题,并且讨论该领域未来的发展方向. 我认为第3章到第8章是核心,讲解分布式机器学习的框架及其各个功能,分别针对其中的数据与模型划分模块.单机优化模块.通信模块.数据与模型聚合模块加以介绍.最有用的是第9章,学习由分布式机器学习框架中不同选项所组合

CV学习资料《卷积神经网络与视觉计算》+《深度学习实践计算机视觉》+《视觉SLAM十四讲从理论到实践》电子资料代码分析

视觉和图形学真是一家,基础都一样! 如果学习图像识别,计算机视觉,推荐电子书<视觉SLAM十四讲:从理论到实践>,系统介绍了视觉SLAM(同时定位与地图构建)所需的基本知识与核心算法,既包括数学理论基础,如三维空间的刚体运动.非线性优化,又包括计算机视觉的算法实现,例如多视图几何.回环检测等. 一个周读完了,代码很清晰!Particle Filtering,KF,EKF, Batch Optimization, Lie Group,ICP,LK光流... 尤其惊喜的是文末作者看好的IMU-SL