HTTPS和HTTP的区别

HTTP和HTTPS的基本概念

  HTTP:是互联网上应用最为普遍的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可使浏览器更加高效,使网络传输减小。html

  HTTPS:HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议。git

是以安全为目标的HTTP通道,简单讲是HTTP的安全版,你也能够说:HTTPS = HTTP + SSL,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。算法

 

  HTTPS协议的主要做用能够分为两种:一种是创建一个信息安全通道,来保证数据传输的安全;另外一种就是确认网站的真实性。浏览器

  HTTPS 在 HTTP 应用层的基础上使用安全套接字层做为子层。安全

关于SSL/TLS 

1、做用服务器

不使用SSL/TLS的HTTP通讯,就是不加密的通讯。全部信息明文传播,带来了三大风险。网络

(1) 窃听风险(eavesdropping):第三方能够获知通讯内容。session

(2) 篡改风险(tampering):第三方能够修改通讯内容。数据结构

(3) 冒充风险(pretending):第三方能够冒充他人身份参与通讯。性能

SSL/TLS协议是为了解决这三大风险而设计的,但愿达到:

(1) 全部信息都是加密传播,第三方没法窃听。

(2) 具备校验机制,一旦被篡改,通讯双方会马上发现。

(3) 配备身份证书,防止身份被冒充。

  互联网是开放环境,通讯双方都是未知身份,这为协议的设计带来了很大的难度。并且,协议还必须可以经受全部匪夷所思的攻击,这使得SSL/TLS协议变得异常复杂。

2、历史

互联网加密通讯协议的历史,几乎与互联网同样长。

  1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,可是未发布。

  1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。

  1996年,SSL 3.0版问世,获得大规模应用。

  1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。

  2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变更是2011年TLS 1.2的修订版

  目前,应用最普遍的是TLS 1.0,接下来是SSL 3.0。可是,主流浏览器都已经实现了TLS 1.2的支持。TLS 1.0一般被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

3、基本的运行过程

  SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,而后用公钥加密信息,服务器收到密文后,用本身的私钥解密。

可是,这里有两个问题。

(1)如何保证公钥不被篡改?

解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

(2)公钥加密计算量太大,如何减小耗用的时间?

  解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。因为"对话密钥"是对称加密,因此运算速度很是快,而服务器公钥只用于加密"对话密钥"自己,这样就减小了加密运算的消耗时间。

所以,SSL/TLS协议的基本过程是这样的:

(1) 客户端向服务器端索要并验证公钥。

(2) 双方协商生成"对话密钥"。

(3) 双方采用"对话密钥"进行加密通讯。

上面过程的前两步,又称为"握手阶段"(handshake)。

4、握手阶段的详细过程

"握手阶段"涉及四次通讯,咱们一个个来看。须要注意的是,"握手阶段"的全部通讯都是明文的。

4.1 客户端发出请求(ClientHello)

  首先,客户端(一般是浏览器)先向服务器发出加密通讯的请求,这被叫作ClientHello请求。

在这一步,客户端主要向服务器提供如下信息。

(1) 支持的协议版本,好比TLS 1.0版。

(2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。

(3) 支持的加密方法,好比RSA公钥加密。

(4) 支持的压缩方法。

  这里须要注意的是,客户端发送的信息之中不包括服务器的域名。也就是说,理论上服务器只能包含一个网站,不然会分不清应该向客户端提供哪个网站的数字证书。这就是为何一般一台服务器只能有一张数字证书的缘由。

  对于虚拟主机的用户来讲,这固然很不方便。2006年,TLS协议加入了一个Server Name Indication扩展,容许客户端向服务器提供它所请求的域名。

4.2 服务器回应(SeverHello)

服务器收到客户端请求后,向客户端发出回应,这叫作SeverHello。服务器的回应包含如下内容。

(1) 确认使用的加密通讯协议版本,好比TLS 1.0版本。若是浏览器与服务器支持的版本不一致,服务器关闭加密通讯。

(2) 一个服务器生成的随机数,稍后用于生成"对话密钥"。

(3) 确认使用的加密方法,好比RSA公钥加密。

(4) 服务器证书。

  除了上面这些信息,若是服务器须要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。好比,金融机构每每只容许认证客户连入本身的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。

4.3 客户端回应

  客户端收到服务器回应之后,首先验证服务器证书。若是证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已通过期,就会向访问者显示一个警告,由其选择是否还要继续通讯。

若是证书没有问题,客户端就会从证书中取出服务器的公钥。而后,向服务器发送下面三项信息。

(1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。

(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的全部内容的hash值,用来供服务器校验。

  上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它之后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。

至于为何必定要用三个随机数,来生成"会话密钥",dog250解释得很好:

  "无论是客户端仍是服务器,都须要随机数,这样生成的密钥才不会每次都同样。因为SSL协议中证书是静态的,所以十分有必要引入一种随机因素来保证协商出来的密钥的随机性。

  对于RSA密钥交换算法来讲,pre-master-key自己就是一个随机数,再加上hello消息中的随机,三个随机数经过一个密钥导出器最终导出一个对称密钥。

  pre master的存在在于SSL协议不信任每一个主机都能产生彻底随机的随机数,若是随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret做为密钥就不合适了,所以必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能彻底不随机,但是是三个伪随机就十分接近随机了,每增长一个自由度,随机性增长的可不是一。"

  此外,若是前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

4.4 服务器的最后回应

服务器收到客户端的第三个随机数pre-master key以后,计算生成本次会话所用的"会话密钥"。而后,向客户端最后发送下面信息。

(1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的全部内容的hash值,用来供客户端校验。

至此,整个握手阶段所有结束。接下来,客户端与服务器进入加密通讯,就彻底是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

为何须要HTTPS?

  超文本传输协议 (HTTP) 是一个用来经过互联网传输和接收信息的协议。HTTP 使用请求/响应的过程,所以信息可在服务器间快速、轻松并且精确的进行传输。当你访问 Web 页面的时候你就是在使用 HTTP 协议,但 HTTP 是不安全的,能够轻松对窃听你跟 Web 服务器之间的数据传输。在不少状况下,客户和服务器之间传输的是敏感歇息,须要防止未经受权的访问。为了知足这个要求,网景公司(Netscape)推出了HTTPS,也就是基于安全套接字层的 HTTP 协议。

 

HTTP与HTTPS有什么区别?

  HTTP协议传输的数据都是未加密的,也就是明文的,所以使用HTTP协议传输隐私信息很是不安全,为了保证这些隐私数据能加密传输,因而网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

HTTPS加密、加密、及验证过程,以下图所示:

简单来讲,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTP和HTTPS的相同点

  大多数状况下,HTTP 和 HTTPS 是相同的,由于都是采用同一个基础的协议,做为 HTTP 或 HTTPS 客户端——浏览器,设立一个链接到 Web 服务器指定的端口。当服务器接收到请求,它会返回一个状态码以及消息,这个回应多是请求信息、或者指示某个错误发送的错误信息。系统使用统一资源定位器 URI 模式,所以资源能够被惟一指定。而 HTTPS 和 HTTP 惟一不一样的只是一个协议头(https)的说明,其余都是同样的。

HTTP和HTTPS的不一样之处

  1. HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
  2. HTTP 是不安全的,而 HTTPS 是安全的
  3. HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
  4. 在 OSI 网络模型中,HTTP 工做于应用层,而 HTTPS 工做在传输层
  5. HTTP 无需加密,而 HTTPS 对传输的数据进行加密
  6. HTTP 无需证书,而 HTTPS 须要认证证书

HTTPS如何工做?

  使用 HTTPS 链接时,服务器要求有公钥和签名的证书。

  当使用 HTTPS 链接,服务器响应初始链接,并提供它所支持的加密方法。做为回应,客户端选择一个链接方法,而且客户端和服务器端交换证书验证彼此身份。完成以后,在确保使用相同密钥的状况下传输加密信息,而后关闭链接。为了提供 HTTPS 链接支持,服务器必须有一个公钥证书,该证书包含通过证书机构认证的密钥信息,大部分证书都是经过第三方机构受权的,以保证证书是安全的。

换句话说,HTTPS 跟 HTTP 同样,只不过增长了 SSL

HTTP 包含以下动做:

  1. 浏览器打开一个 TCP 链接
  2. 浏览器发送 HTTP 请求到服务器端
  3. 服务器发送 HTTP 回应信息到浏览器
  4. TCP 链接关闭

SSL 包含以下动做:

  1. 验证服务器端
  2. 容许客户端和服务器端选择加密算法和密码,确保双方都支持
  3. 验证客户端(可选)
  4. 使用公钥加密技术来生成共享加密数据
  5. 建立一个加密的 SSL 链接
  6. 基于该 SSL 链接传递 HTTP 请求

何时该使用HTTPS?

银行网站、支付网关、购物网站、登陆页、电子邮件以及一些企业部门的网站应该使用 HTTPS,例如:

  • PayPal: https://www.paypal.com
  • Google AdSense: https://www.google.com/adsense/

若是某个网站要求你填写信用卡信息,首先你要检查该网页是否使用 HTTPS 加密链接,若是没有,那么请不要输入任何敏感信息如信用卡号。

 

浏览器集成

  多数浏览器在收到一个无效证书的时候都会显示警告信息,而一些老的浏览器会弹出对话框让用户选择是否继续浏览。新的浏览器通常在整个窗口显示横幅的警告信息,同时在地址栏上显示该网站的安全信息。若是网站中包含加密和非加密的混合内容,多数浏览器会提示警告信息。

=======================================================

  在URL前加https://前缀代表是用SSL加密的。你的电脑与服务器之间收发的信息传输将更加安全。 Web服务器启用SSL须要得到一个服务器证书并将该证书与要使用SSL的服务器绑定。 HTTP和HTTPS使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。

  HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比HTTP协议安全。

  HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,它是一个安全通讯通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来讲它是HTTP的安全版。

  它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操做,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全全套接字层(SSL)做为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通讯。)SSL使用40 位关键字做为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,若是须要的话用户能够确认发送者是谁。
HTTPS和HTTP的区别:
1.HTTPS协议须要到ca申请证书,通常免费证书不多,须要交费。
2.HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具备安全性的ssl加密传输协议
3.HTTP和HTTPS使用的是彻底不一样的链接方式用的端口也不同,前者是80,后者是443。
4.HTTP的链接很简单,是无状态的
5.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比HTTP协议安全
HTTPS解决的问题:
  1 . 信任主机的问题. 采用HTTPS 的server 必须从CA 申请一个用于证实服务器用途类型的证书. 改证书只有用于对应的server 的时候,客户度才信任次主机. 因此目前全部的银行系统网站,关键部分应用都是HTTPS 的. 客户经过信任该证书,从而信任了该主机. 其实这样作效率很低,可是银行更侧重安全. 这一点对咱们没有任何意义,咱们的server ,采用的证书无论本身issue 仍是从公众的地方issue, 客户端都是本身人,因此咱们也就确定信任该server.
  2 . 通信过程当中的数据的泄密和被窜改


  1. 通常意义上的HTTPS, 就是 server 有一个证书.
a) 主要目的是保证server 就是他声称的server. 这个跟第一点同样.
b) 服务端和客户端之间的全部通信,都是加密的.
i. 具体讲,是客户端产生一个对称的密钥,经过server 的证书来交换密钥. 通常意义上的握手过程.
ii. 加下来全部的信息往来就都是加密的. 第三方即便截获,也没有任何意义.由于他没有密钥. 固然窜改也就没有什么意义了.
  2. 少量对客户端有要求的状况下,会要求客户端也必须有一个证书.
a) 这里客户端证书,其实就相似表示我的信息的时候,除了用户名/密码, 还有一个CA 认证过的身份. 应为我的证书通常来讲上别人没法模拟的,全部这样可以更深的确认本身的身份.
b) 目前少数我的银行的专业版是这种作法,具体证书多是拿U盘做为一个备份的载体.
HTTPS 必定是繁琐的.
a) 原本简单的HTTP协议,一个get一个response. 因为https 要还密钥和确认加密算法的须要.单握手就须要6/7 个往返.
i. 任何应用中,过多的round trip 确定影响性能.
b) 接下来才是具体的HTTP协议,每一次响应或者请求, 都要求客户端和服务端对会话的内容作加密/解密.
i. 尽管对称加密/解密效率比较高,但是仍然要消耗过多的CPU,为此有专门的SSL 芯片. 若是CPU 信能比较低的话,确定会下降性能,从而不能serve 更多的请求.
ii. 加密后数据量的影响. 因此,才会出现那么多的安全认证提示.

 

参考文章:

http://blog.csdn.net/whatday/article/details/38147103

http://www.mahaixiang.cn/internet/1233.html

http://blog.csdn.net/he90227/article/details/52034629

相关文章
相关标签/搜索