从HTTP到HTTPS
从HTTP到HTTPS
HTTP存在的缺陷
- 通信使用明文(不加密),内容可能会被
窃听
- 不验证通信方的身份,因此有可能遭遇
伪装
- 无法证明报文的完整性,所以有可能已遭
篡改
防窃听
通信加密
HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)的组合使用,加密 HTTP 的通信内容。
用SSL建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了。
使用安全通信线路通信,不仅防窃听,还能防篡改。
SSL + HTTP == HTTPS。
内容加密
对 HTTP 协议传输的内容本身加密,即把 HTTP 报文主体内容进行加密处理。为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。
需要注意的是,这里加密的内容仍能被窃听,而且加密的内容仍可能受到中间人攻击,即传输内容有被篡改的风险
。
防伪装
查看证书
SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说异常困难
。所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。
通过使用证书,以证明通信方就是预料中的服务器。这对使用者个人来讲,也减少了个人信息泄露的危险性。
防篡改
散列值校验MD5 + 数字签名
可用MD5和SHA-1等散列值校验的方法以及确认文件的数字签名方法(以PGP创建的数字签名为例)来保证报文的完整性,但是当PGP和MD5本身被篡改时,报文的完整性依旧无法保证
。PGP 是用来证明创建文件的数字签名,MD5 是由单向函数生成的散列值。
认证加密 + 报文摘要
仅靠HTTP保证报文的完整性是非常困难的,需要借助组合SSL协议来实现。SSL 提供认证和加密处理及报文摘要功能,能够保障报文的完整性。
HTTPS概述
HTTPS == HTTP + 加密 + 认证 + 完整性保护。
HTTPS的加密、认证、完整性保护都是通过SSL协议完成的。
因此,HTTPS就是身披SSL协议的HTTP
。只是HTTP的通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。
通常,HTTP直接和TCP通信。使用SSL后,先和SSL通信,再由SSL和TCP通信。
不光是 HTTP 协议,其他运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用。可以说 SSL 是当今世界上应用最为广泛的网络安全技术。
加密技术
共享密钥加密
加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),所以也被叫做对称密钥加密
。
以共享密钥方式加密时必须将密钥也发给对方,而发送密钥就有被窃听的风险,如果密钥被攻击者获得,那加密也就失去了意义。如果不发送,对方就不能解密。再说,密钥若能够安全发送,那数据也应该能安全送达。
公开密钥加密
公开密钥加密使用一对非对称的密钥。一把叫做私钥(private key),另一把叫做公钥(public key)。私钥不能让其他任何人知道,而公钥则可以随意发布,是公开的,可以随意获取。
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理
,对方收到被加密的信息后,再使用自己的私有密钥进行解密
。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
想根据密文和公开密钥,恢复到信息原文是异常困难的, 因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到。
公开密钥正确性验证 —— 防公开密钥伪造
在与某服务器建立公开密钥加密通信时,无法证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输途中,真正的公开密钥已经被攻击者替换掉了。
为了验证公开密钥的正确性,可以使用数字证书认证机构CA和其相关机关颁发的公开密钥证书。
真正安全的公开密钥加密通信过程如下图所示:
混合加密
使用公开密钥加密,能实现信息的安全交换,但公开密钥加密处理起来比共享密钥加密方式更为复杂,因此若在通信时使用公开密钥加密方式,效率就很低。
考虑两种加密方式各自的优势,可以采取混合加密的方式进行通信,即在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式
。
HTTPS通信
从仅使用服务器端公开密钥(服务器证书)建立HTTPS通信的整个过程如下图所示:
- 客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
- 服务器可进行 SSL 通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
- 之后服务器发送 Certificate 报文。报文中包含公开密钥证书。
- 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。
- SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
- 接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
- 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
- 服务器同样发送 Change Cipher Spec 报文。
- 服务器同样发送 Finished 报文。
- 服务器和客户端的 Finished 报文交换完毕之后,SSL 连接就算建立完成。当然,通信会受到 SSL 的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求。
- 应用层协议通信,即发送HTTP 响应。
- 最后由客户端断开连接。断开连接时,发送close_notify报文。
报文完整性保护
在以上流程中,应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要
。MAC 能够查知报文是否遭到篡改, 从而保护报文的完整性。
HTTP vs HTTPS
特性 | HTTP | HTTPS |
---|---|---|
防窃听 | × | √(共享密钥加密) |
防伪装 | × | √(证书) |
防篡改 | × | √(MAC报文摘要) |
通信速度 | 快 | 比HTTP慢2到100倍 |
通信成本 | 低 | 高(多为证书费用) |
从HTTP到HTTPS的更多相关文章
- 【流量劫持】躲避 HSTS 的 HTTPS 劫持
前言 HSTS 的出现,对 HTTPS 劫持带来莫大的挑战. 不过,HSTS 也不是万能的,它只能解决 SSLStrip 这类劫持方式.但仔细想想,SSLStrip 这种算劫持吗? 劫持 vs 钓鱼 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- 7.让网站支持http和https的访问方式
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 怎么让网站在本地支持SSL?http://www.c ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS
一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...
- WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果
前言 话说又来需求了,之前对于在SelfHost中需要嵌套页面并操作为非正常需求,这回来正常需求了,客户端现在加了https,老大过来说WebAPi访问不了了,这是什么情况,我去试了试,还真是这个情况 ...
- 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事
WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...
- 【原创】免费申请SSL证书【用于HTTPS,即是把网站从HTTP改为HTTPS,加密传输数据,保护敏感数据】
今天公司有个网站需要改用https访问,所以就用到SSL证书.由于沃通(以前我是在这里申请的)暂停了免费的SSL证书之后,其网站推荐了新的一个网站来申请证书,所以,今天因为刚好又要申请一个证书,所以, ...
- https 安全验证问题
最近为了满足苹果的 https 要求, 经过努力终于写出了方法 验证 SSL 证书是否满足 ATS 要求 nscurl --ats-diagnostics --verbose https://你的域名 ...
- Ubuntu下配置apache开启https
一.HTTPS简述随着网络的日常,信息安全越来越重要,传统的网站都是http协议明文传输,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 那ht ...
随机推荐
- Educational Codeforces Round 92 (Rated for Div. 2)
A.LCM Problem 题意:最小公倍数LCM(x,y),处于[l,r]之间,并且x,y也处于[l,r]之间,给出l,r找出x,y; 思路:里面最小的最小公倍数就是基于l左端点的,而那个最小公倍数 ...
- centos7安装es6.4.0
一.首先进入到opt文件夹cd opt二.然后下载es安装包wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearc ...
- 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?
摘要:写卡路里计数器带女友减肥,抢票不忘分析系统bug,打造独家游戏只为成为你的另一半,程序员男友"浪漫"起来,谁能招架得住? 本文分享自华为云社区<520特辑丨码神VS爱神 ...
- C++PRIMER第二章前半部分答案
C++PRIMER第二章前半部分答案 哈哈哈,为什么是前半部分呢,后半部分还在学习中,重新系统性的学习c++,共同进步嘛,不多说,跟我一起来看看吧,第三章开始才是新手收割的时候,慢慢来~~ 2.1&a ...
- TCP 中的两个细节点
TCP 超时和重传 没有永远不出错误的通信,这句话表明着不管外部条件多么完备,永远都会有出错的可能.所以,在 TCP 的正常通信过程中,也会出现错误,这种错误可能是由于数据包丢失引起的,也可能是由于数 ...
- [Java] 静态代理 动态代理
原理 静态代理=代理模式 动态代理=代理模式+反射 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强 代理类和被代理类应该共同实现一个接口,或者是共同继承某个类 静态代 ...
- [刷题] 70 Climbing Stairs
要求 楼梯共有n个台阶,每次上一个台阶或两个台阶,一共有多少种上楼梯的方法? 示例 输入:n=3 [1,1,1],[1,2,],[2,1] 输出:n=3 实现 自顶向下(递归) 递归 1 class ...
- 单用户模式修改root密码
单用户模式修改root密码 1.进入引导菜单界面2.按e进入grub,在linux或linux16那行结尾加上 rw init=/bin/bash,按Ctrl+x或F103.进入bash-4.3# , ...
- zabbix监控之自定义监控
自定义监控node1数据库状态,并设置报警 编辑agent客户端的userparameter_mysql.conf 文件,最后一行添加自定义监控内容 [root@node1 ~]# cd /etc/z ...
- STM32的ADC精度提高方法
1.精度稳定低一点参考电压VREF稳定: 2.通过设置不同的ADC时钟 和 采样周期 来确定出最适合自己系统的参数: 3.测试思路: 在同样SMPx下,设定不同的时钟得到不同采样时间值: 在同样时钟下 ...