原文标题:HTTPS与HTTP的区别?什么是SSL和TLS?
文章来源:三一博客
原文地址:https://www.o0310o.com/kb/425.html
经常访问百度的朋友们都应该注意到了一点:网站的域名前面是 HTTPS 而不是最常见的 HTTP。
一、HTTP
先介绍 HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。通过 HTTP 或者 HTTPS 协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。HTTP 是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用 Web 浏览器、网络爬虫或者其它的工具,客户端发起一个 HTTP 请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如 HTML 文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个「中间层」,比如代理、网关或者隧道(tunnel)。
尽管 TCP/IP 协议是互联网上最流行的应用,HTTP 协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP 假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在 TCP/IP 协议族使用 TCP 作为其传输层。
通常,由 HTTP 客户端发起一个请求,创建一个到服务器指定端口(默认是 80 端口)的 TCP 连接。HTTP 服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如「HTTP/1.1 200 OK」,以及返回的内容,如请求的文件、错误消息、或者其它信息。
HTTP 协议的具体定义复杂专业,在此不进行具体介绍,你只需要搞清楚一点:在只使用 HTTP 协议的情况下,本地浏览器与目标网站之间的数据流是明文的!也就是说,你的 ISP 知道你都干了些什么,而且任何人都可以对你的数据流进行截取监听,你没有任何隐私可言。
这对于需要登录的网站简直是噩梦,账号密码以及在网站上的发言都很容易被盗取,而且要制作一个能骗过多数人的钓鱼网站也很容易,因为本地浏览器并不会去验证目标服务器的真实身份,很容易遭受中间人攻击(攻击者伪装成目标服务器接收数据流,解密监听后在转给真正的目标服务器)。
二、HTTPS
为了增加安全性,HTTPS 横空出世
网景(曾经很强大的收费浏览器公司,后来被微软用免费的IE搞死)在 1994 年创建了 HTTPS,并应用在网景导航者浏览器中。最初,HTTPS 是与 SSL 一起使用的;在 SSL 逐渐演变到 TLS 时,最新的 HTTPS 也由在 2000 年五月公布的 RFC 2818 正式确定下来。(20 年后竟然大多数网站还不支持 HTTPS,这普及速度真是够慢的!)
HTTP 协议和安全协议同属于应用层(OSI 模型的最高层),具体来讲,安全协议工作在 HTTP 之下,运输层之上:安全协议向运行 HTTP 的进程提供一个类似于 TCP 的套接字,供进程向其中注入报文,安全协议将报文加密并注入运输层套接字;或是从运输层获取加密报文,解密后交给对应的进程。严格地讲,HTTPS 并不是一个单独的协议,而是对工作在一加密连接(TLS 或 SSL)上的常规 HTTP 协议的称呼。
HTTPS 报文中的任何东西都被加密,包括所有报头和荷载。除了可能的选择密文攻击之外,一个攻击者所能知道的只有在两者之间有一连接这一事实。
好吧,又多了一堆术语:SSL,TLS,不过也可以看出来 HTTPS 是 HTTP 与 SSL/TLS 的组合协议。
三、SSL
SSL:安全套接层(Secure Sockets Layer,SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。SSL 包含记录层(Record Layer)和传输层,记录层协议确定了传输层数据的封装格式。传输层安全协议使用 X.509 认证,之后利用非对称加密演算来对通讯方做身份认证,之后交换对称金钥作为会谈金钥(session key)。这个会谈金钥是用来将通讯两方交换的资料做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。
SSL 在服务器和客户机两端可同时被支持,目前已成为互联网上保密通讯的工业标准。现行的 Web 浏览器亦普遍将 HTTP 和 SSL 相结合,从而实现安全通信。SSL 协议的优势在于它是与应用层协议独立无关的。高层的应用层协议(例如:HTTP、FTP、Telnet等等)能透明的建立于 SSL 协议之上。SSL 协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
以下简要介绍 SSL 协议的工作方式
客户端要收发几个握手信号:
发送一个「ClientHello」消息,内容包括:支持的协议版本,比如 TLS 1.0 版,一个客户端生成的随机数(稍后用户生成「会话密钥」),支持的加密算法(如 RSA 公钥加密)和支持的压缩算法。
然后收到一个「ServerHello」消息,内容包括:确认使用的加密通信协议版本,比如 TLS 1.0 版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信,一个服务器生成的随机数,稍后用于生成「对话密钥」,确认使用的加密方法,比如 RSA 公钥加密,服务器证书。
当双方知道了连接参数,客户端与服务器交换证书(依靠被选择的公钥系统)。这些证书通常基于 X.509,不过已有草案支持以 OpenPGP 为基础的证书。
服务器请求客户端公钥。客户端有证书即双向身份认证,没证书时随机生成公钥。
客户端与服务器通过公钥保密协商共同的主私钥(双方随机协商),这通过精心谨慎设计的伪随机数功能实现。结果可能使用 Diffie-Hellman 交换,或简化的公钥加密,双方各自用私钥解密。所有其他关键数据的加密均使用这个「主密钥」。
数据传输中记录层(Record layer)用于封装更高层的 HTTP 等协议。记录层数据可以被随意压缩、加密,与消息验证码压缩在一起。每个记录层包都有一个 Content-Type 段用以记录更上层用的协议。
四、TLS
TLS:IETF 将 SSL 作了标准化,即 RFC 2246,并将其称为 TLS(Transport Layer Security),其最新版本是 RFC 5246,版本 1.2。从技术上讲,TLS1.0 与 SSL3.0 的差异非常微小。
TLS 利用密钥算法在互联网上提供端点身份认证与通讯保密,其基础是公钥基础设施(public key infrastructure,PKI)。不过在实现的典型例子中,只有网络服务者被可靠身份验证,而其客户端则不一定。这是因为公钥基础设施普遍商业运营,电子签名证书通常需要付费购买。协议的设计在某种程度上能够使主从架构应用程序通讯本身预防窃听、干扰(Tampering)和消息伪造。
TLS 包含三个基本阶段:
对等协商支援的密钥算法
基于非对称密钥的信息传输加密和身份认证、基于 PKI 证书的身份认证
基于对称密钥的数据传输保密
**在第一阶段,客户端与服务器协商所用密码算法。
当前广泛实现的算法选择如下:**
公钥私钥非对称密钥保密系统:RSA、Diffie-Hellman、DSA;
对称密钥保密系统:RC2、RC4、IDEA、DES、Triple DES、AES 以及 Camellia;
单向散列函数:MD5、SHA1 以及 SHA256。(以上均是加密算法,有兴趣请自行 google)
TLS/SSL 有多样的安全保护措施:
所有的记录层数据均被编号,用于消息验证码校验。
相对而言TLS安全性更高一些,不过两者差别不大。
五、数字证书
现在我们看到了,当使用 HTTPS,传输过程中数据流始终是被强加密的(举例:facebook 采用128位加密技术。该连接采用 TLS 1.2。该连接使用 AES_128_GCM(迄今为止依然很可靠,极难被破解的加密算法)进行加密和身份验证,并使用 ECDHE_ECDSA(迄今为止也很可靠)作为密钥交换机制。twitter 采用 128 位加密技术。该连接采用 TLS 1.2。该连接使用 AES_128_GCM 进行加密和身份验证,并使用 ECDHE_RSA(很可靠)作为密钥交换机制。google plus(所有 google 服务都一样)采用 256 位加密技术。该连接采用 TLS 1.2。该连接使用 CHACHA20_POLY1305(也是让人放心的加密算法)进行加密和身份验证,并使用 ECDHE_ECDSA(迄今为止也很可靠)作为密钥交换机制),只有本地浏览器与目标服务器知道内容,谁也没法进行数据的窃取监听。
而且 HTTPS 还有一个防止中间人攻击和钓鱼的机制,就是数字证书:
1.服务器设置
要使一网络服务器准备好接受HTTPS连接,管理员必须创建一数字证书,并交由证书颁发机构签名以使浏览器接受。证书颁发机构会验证数字证书持有人和其声明的为同一人。浏览器通常都预装了证书颁发机构的证书,所以他们可以验证该签名。
2.获得证书
由证书颁发机构签发的证书有免费的,也有每年收费 13 美元到 1500 美元不等的。
一个组织也可能有自己的证书颁发机构,尤其是当设置浏览器来访问他们自己的网站时(如,运行在公司或学校局域网内的网站)。他们可以容易地将自己的证书加入浏览器中。
此外,还存在一个人到人的证书颁发机构,CAcert。
3.作为访问控制
HTTPS 也可被用作客户端认证手段来将一些信息限制给合法的用户。要做到这样,管理员通常会给每个用户创建证书(通常包含了用户的名字和电子邮件地址)。这个证书会被放置在浏览器中,并在每次连接到服务器时由服务器检查。
当私钥失密时,证书可在其过期前被吊销,通常情况是该证书的私钥已经失密。较新的浏览器如 Google Chrome、Firefox、Opera 和运行在 Windows Vista 上的 Internet Explorer 都实现了在线证书状态协议(OCSP)以排除这种情形:浏览器将网站提供的证书的序列号通过 OCSP 发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。
这样,当假冒的目标服务器试图与本地浏览器取得联系时,浏览器发现假冒的目标服务器没有真实有效的证书,就会拒绝连接并爆出警告。简单来说就是小混混(黑客等)拿着伪造的学生证(伪造的数字证书)想进学校,但被门卫(浏览器的证书验证系统)发现了,就没能进去。
六、总结
对 HTTPS 的最简单描述:我在家(本地浏览器)把信(信息流)放在上了锁的盒子里(SSL/TLS 强加密),再交由邮递员(ISP,路由器等)送到朋友(目标服务器)手中,接收时朋友要出事身份证(数字证书),身份正确才能让朋友接收并打开盒子(解密),路上没有人能够得知信的内容。
HTTPS 严重不利于进行 JIANKONG,所以墙内网站几乎没有支持 HTTPS 的?