一.HTTP协议

安全HTTP又称为HTTPS
为什么安全呢,因为它在HTTP协议层与TCP层之间又加了一层,传输安全层TLS /
SSL对数据进行加密。
HTTP默认端口号:80
HTTPS默认端口号:443

[TOC]

  1.官方概念:

图片 1

主要是 iOS 企业自签名证书总结

    HTTP协议是Hyper Text Transfer
Protocol的缩写,是用于从万维网(WWW:World Wide Web
)服务器传输超文本到本地浏览器的传送协议。(虽然童鞋们将这条概念都看烂了,但是也没办法,毕竟这就是HTTP的权威官方的概念解释,要想彻底理解,请客观目移下侧……)

HTTP 和 HTTPS 协议分层

单项认证

  • 只要求服务器部署 ssl 证书,提供身份认证
  • 任何用户都可以去访问(IP被限制除外)

  2.白话概念:

而这一层是如何工作的呢?
首先介绍下公开密钥加密技术,这一层就是基于这种技术的方案上实现的

双向认证

  • 要求服务器和用户双方都有证书,提供身份认证
  • 服务器允许的客户 才可以访问

    HTTP协议就是服务器和客户端之间进行数据交互的一种形式。我们可以将Server和Client进行拟人化,那么该协议就是Server和Client这两兄弟间指定的一种交互沟通方式。大家都看过智取威虎山中杨子荣和土匪们之间说的黑话吧:

图片 2

SSL 协议 (Google)

  • SSL 协议既用到了公钥加密技术又用到了对称加密技术,
  • 对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。
  • SSL
    的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:
![](https://upload-images.jianshu.io/upload_images/4042439-42227aee7debdde5.jpeg)

ssl.jpeg



  ① 客户端的浏览器向服务器传送客户端 SSL
协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。  
  ② 服务器向客户端传送 SSL
协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。  
  ③
客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的
CA
是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,
通讯将断开;如果合法性验证通过,将继续进行第四步。  
  ④
用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。  
  ⑤
如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。  
  ⑥
如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的
CA 是否可靠,发行 CA 的公钥能否正确解开客户证书的发行 CA
的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密
码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。  
  ⑦ 服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL
协议的安全数据通讯的加解密通讯。同时在 SSL
通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。  
  ⑧
客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。  
  ⑨
服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。  
  ⑩ SSL 的握手部分结束,SSL
安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

双向认证 SSL 协议的具体过程
  ① 浏览器发送一个连接请求给安全服务器。
  ② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
  ③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA
中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。
  ④
接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
  ⑤
服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。
  ⑥ 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
  ⑦
服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。
  ⑧
浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
  ⑨ 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。
  ⑩ 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过的。


      - 土匪:蘑菇,你哪路?什么价?(什么人?到哪里去?)

公开密钥加密技术

HTTPS

  • SSL(Security Socket Layer,安全套接层)
    TLS(Transport Layer Security,传输层安全协议)
  • HTTPS = HTTP + TLS (SSL3.0被TLS1.0替代)

      -
杨子荣:哈!想啥来啥,想吃奶来了妈妈,想娘家的人,孩子他舅舅来了。

一.加密
公开密钥加密技术没有为每个主机使用单独的加密/解密密钥,而是使用了两个非对称密钥:一个用来对主机报文进行编码,另一个用来对主机报文解码,共有加密密钥是大家都知道的,但只有主机才知道私有的解密密钥。

加密

  • 非对称加密:(公开密钥加密)

    • 需要私人密钥和公开密钥。
    • 公钥对外公布。
    • 解密:公钥被公开后没有相对应的 私钥是不能解密的!
      使用公钥加密,用私钥解密,也可以是用私钥加密公钥解密。
  • 对称加密:加密解密都是同一个密钥

    • eg:A 使用发送用 Key 加密的信息给 B,B也要用
      Key来解密这段信息。需要AB知道 Key 这个密钥
  • 数字签名:使用私钥进行加密数据,拥有公钥的接收者可以判断这段数据,由此得知发布这段数据的真实身份是否确实是拥有私钥的某人,
    总结1:数字签名=使用私钥加密的自身数据。目的是供其他验证我的身份合法性

全文总结1:
使用公钥加密数据,使用私钥解密数据的这种操作就叫做非对称加密
加密:既然是加密,那么肯定是不希望别人知道我的消息,所以只有我能解密,那么可以得出是使用公钥负责加密,私钥负责解密。
签名:既然是签名,那肯定是不希望有人冒充我发消息,因此只有我才能发布这个签名,所以可以得出私钥负责签名,公钥负责验证。

全文总结2:
数字签名是将发送信息的摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥(数字证书,所有人都可以获取)才能解密被加密的摘要信息(数字签名)。然后接受者用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比,如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性与正确性。整个过程也即使用数字证书去验证数字签名

      - 杨子荣:拜见三爷!

二.签名
除了加/解报文之外,还可以用公开密钥对报文进行签名,以说明是谁编写的报文,验证报文是否被篡改过。如果有恶意攻击者在报文传输过程中对其进行了修改,那么校验和就不再匹配了。由于校验和只有作者保密的私有密钥才能产生,所以攻击者无法伪造出正确的验证码。

CA(数字证书认证机构,Certificate Authority)

  • CA作用:
    • 为每个使用公开密钥的用户发放一个数字证书
    • 数字证书的作用:
      1. 证明证书中列出的用户合法拥有证书中列出的公开密钥。
      2. 数字证书中的CA数字签名(用CA的私钥对用户申请摘要信息进行加密)使得攻击者不能伪造和篡改证书。
      3. 数字证书=公钥(CA分配)+申请者身份信息+CA的数字签名

      – 土匪:天王盖地虎!(你好大的胆!敢来气你的祖宗?)

这样一来客户端就能很容易的发送安全报文了,而且只需要知道服务器所提供的公开密钥就可以了。

      -
杨子荣:宝塔镇河妖!(要是那样,叫我从山上摔死,掉河里淹死。)
      - 土匪:野鸡闷头钻,哪能上天王山!
      -
杨子荣:地上有的是米,喂呀,有根底!(老子是正牌的,老牌的。)
      - 土匪:拜见过阿妈啦?
      - 杨子荣:他房上没瓦,非否非,否非否!
      - 土匪:嘛哈嘛哈?
      - 杨子荣:正晌午说话,谁还没有家?
      - 土匪:好叭哒!
      - 杨子荣:天下大耷拉!(不吹牛,闯过大队头。)
      - 座山雕:脸红什么?
      - 杨子荣:精神焕发!
      - 座山雕:怎么又黄了?
      - 杨子荣:防冷,涂的蜡!
      - 座山雕:晒哒晒哒。
      - 杨子荣:一座玲珑塔,面向青寨背靠沙!

三.数字证书
到这里大家可能又有疑问了: 怎么获得服务器的公开密钥呢?
这里又要引入一个概念:数字证书

    是不是看到这里,有得童鞋终于知道了传说中的‘天王盖地虎’是真正含义了吧。此黑话其实就是杨子荣和土匪之间进行交互沟通的方式。

在使用HTTPS协议进行通信时,首先Client会向Service请求数字证书
证书内容包括:
1.Web站点的名称和主机名
2.Web站点的公开密钥
3.签名颁发机构的名称
4.来自签名颁发机构的签名

  3.HTTP工作原理:

一般浏览器程序会预先存储一些知名机构签发的数字证书,如果Service下发的证书是个很权威的机构,那么浏览器可能已经知道其公开密钥了,如果浏览器不知道这个证书是否可以信任,他们则会弹出一个窗口让用户确认,看用户是否相信这个证书发布者(相信大家都会有这样的经历)。这样一来客户端对于服务器的公开密钥就到手了。目前大部分证书都遵循X509
v3结构(这里就不详细介绍了)

    HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

如果大家还要去了解一些HTTPS细节部分,推荐给大家一本书《HTTP权威指南》上面描述的非常细致。

                    图片 3**

下面是一些常用的加密算法大家有兴趣可以去研究一下。
RSA
DH
ECDHE
ECDH
DHE

  4.HTTP四点注意事项:

    -
HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

    
HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

    -
HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

    -
HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

  5.HTTP之URL:

    HTTP使用统一资源标识符(Uniform Resource Identifiers,
URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息

URL,全称是UniformResourceLocator,
中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:

*    -
协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在”HTTP”后面的“//”为分隔符*

    -
域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

发表评论

电子邮件地址不会被公开。 必填项已用*标注