zoukankan      html  css  js  c++  java
  • HTTPS与HTTP

          超文本传输协HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

          为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了安全套接字层超文本传输协议HTTPS。

    一、HTTP和HTTPS的基本概念   

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

          HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

          TLS是传输层安全协议(Transport Layer Security)的缩写,是一种对基于网络的传输的加密协议,可以在受信任的第三方公证基础上做双方的身份认证。TLS可以用在TCP上,也可以用在无连接的UDP报文上。SSL是TLS的前身。

    二、HTTPS连接的全过程?

          为了搞懂HTTPS到底有啥不一样,我们看一下HTTPS连接的全过程。


     在这之前,了解一些必要知识。

    1.1 加密算法

    (1)对称加密算法:加密使用的密钥和解密使用的密钥是相同的,不区分公钥和私钥。

    (2)非对称加密算法:加密使用的密钥和解密使用的密钥是不相同的。例如公钥密码体制就是一种非对称加密算法。

    1.2 公钥密码体制

    加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。

    解密:通过解密算法和私钥对密文进行解密,得到明文。

    只有对应的公钥才能解密私钥加密的内容,也只有对应的私钥才能解密公钥加密的内容。

    1.3 数字证书

    • 证书的发布机构 
    • 证书的有效期 
    • 公钥 
    • 证书所有者(Subject) 
    • 签名所使用的算法 
    • 指纹以及指纹算法

    数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,或者说证书可以用来确认对方的身份。 


     了解了这些,我们还要解决几个难题。

          在最开始服务端给客户端派发公钥时,客户端如何确认此公钥来自服务端?数字证书粉墨登场。CA(Certificate Authorities)机构是Https证书签发和管理机构,比如Symantec、Comodo、GoDaddy、GlobalSign。客户端(如浏览器)内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。

          公钥密码体制中,公钥和算法都是公开的,私钥是服务端自己私有保密的。因此客户端都以使用公钥进行加密,但是只有私钥的持有者服务端才能解密。客户端发送给服务端的加密内容是安全的,但是服务端发送给某个客户端的信息却是暴露出来的,因为只要有对应的公钥就可以解密。我们可以使用两套非对称密钥,但是明显复杂度更高,更耗费资源。这种情况下,对称加密解密算法就派上用场了,只需要客户端自己生成一个密钥,用服务端的公钥加密以后发给服务端,服务端收到以后用私钥解密。这之后,他们之间的交流都使用这个密钥进行对称加密解密。


     主要过程描述如下:

    1、客户端发起HTTPS请求 

    这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。

    3、服务端将证书传送给客户端 

    这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

    4、客户端验证证书 

    这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等。如果发现异常,则会弹出一个警告框,提示证书存在问题;如果证书没有问题,那么就生成一个随即值。然后用证书的公钥对该随机值进行加密。

    5、传送加密信息 

    这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行对称算法的加密解密了。

    6、服务端解密信息 

    服务端用私钥解密后,得到了客户端传过来的随机值;

    服务端开始传输,把内容通过该值进行对称加密。

    7、传输加密后的信息 

    这部分信息是服务端用随机值加密后的信息,可以在客户端被还原。

    8、客户端解密信息 

    客户端用之前生成的随机值解密服务段传过来的信息,于是获取了解密后的内容。 

    二、HTTPS和HTTP有啥区别?

    1、http是超文本传输协议,信息是明文传输,https则是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    2、协议端口不同:HTTP协议走的是服务器的80端口,即WEB服务器的默认超文本协议端口,HTTPS协议走的为443端口。

     

  • 相关阅读:
    Eclipse对printf()不能输出到控制台的解决方法
    Eclipse launch failed.Binary not found解决方案
    Windows 7中使用Eclipse 使用CDT and WinGW 开发C/C++(转载)
    assets
    方法对头,报表模板维护其实很简单
    刷机包各个文件都是啥
    开机logo切换逻辑深入研究
    不同分辨率的LCM进行兼容
    SD卡驱动分析(二)
    SD卡驱动分析(一)
  • 原文地址:https://www.cnblogs.com/kikis/p/9771904.html
Copyright © 2011-2022 走看看