zoukankan      html  css  js  c++  java
  • http&https&证书&数字签名

    http协议

    http是超文本传输协议,是用来网络间传输数据。底层是tcp协议(传输控制协议)。

    是一种面向连接的主机对主机层的可靠传输,这里的可靠是指数据丢失极小。Tcp建立一次连接需要经过3次握手,然后才开始传输数据。就是请求-回应-再确认,保证发送和接收。

    因此传输数据的效率不及udp数据报文协议(一种非面向连接的不可靠传输协议)。

    http协议传输数据,数据在网络间是明文传输的,因此不是很安全,容易被窃取。

    https协议

    是http协议的安全版,数据传输利用了加密技术,在网络传输中数据就不是处于裸奔状态了。

    对称加密和非对称加密

    加密有两种,对称加密和非对称加密。

    对称加密,即对数据的加密和解密都是用同一个秘钥,这个秘钥由发送方和接收方共同维护。但是共同维护这其中成本较高。

    非对称加密,即对数据的加密和解密用不同的秘钥。一般发送方用一个公钥来对发送的数据加密,接收方用一个秘钥来解密。

    https采用的加密技术就是非对称加密技术,浏览器端使用服务器提供的公钥进行对数据加密发给服务器,服务器用私钥对数据进行解密。解密后又将要返回的数据用秘钥加密,浏览器又用公钥解密。

    有没有发现上面的过程还是有不安全的地方,因为公钥是公开的,在服务器端对数据用秘钥加密后,传输给请求者,这时候其他人就可以截获数据利用公钥解密,这样就可能会发生数据泄露的危险。

    有没有更好的解决办法呢。有,就是请求方和服务器之间协议出一个秘钥(具体过程目前不太清楚)。请求方将这个秘钥夹在数据中公钥加密后传输给服务器,服务器用私钥进行解密,从数据中得到这个私钥,然后将要返回的数据用这个私钥加密后传输给请求方。请求方用之前的协议出的秘钥解密。

    证书和CA

    以上还有一个问题,就是服务器怎么将公钥送到请求者手中呢?就要讲讲证书和CA了。

    证书顾名思义,能证明其身份证书。而CA就是颁发安全证书的权威机构。

    通常是服务器端会将公钥发给CA,CA会产生一个安全证书,证书里面就包含服务器的公钥。

    证书颁发的细节这里先不展开,可以先简单理解为,网站(服务器)向CA提交了申请,CA审核通过后,将证书颁发给网站(服务器),用户访问网站(服务器 )的时候,网站(服务器)将证书给到用户。

    数字签名和摘要

    上面说到证书,就要提一提数字签名和摘要了。

    数字签名和摘要是要来保证证书的合法有效的强力手段。

    摘要就是对传输的内容用hash算法对其计算得到一个固定长度的串,就是摘要了。

    然后对摘要用CA的私钥进行加密就属于数字签名了。

    必须要用CA的公钥才能解密。

    证书包含了如下内容:

    1. 证书包含了颁发证书的机构的名字 -- CA
    2. 证书内容本身的数字签名(用CA私钥加密)
    3. 证书持有者的公钥
    4. 证书签名用到的hash算法

    CA本身有自己的证书,江湖人称“根证书”。这个“根证书”是用来证明CA的身份的,本质是一份普通的数字证书。

    浏览器通常会内置大多数主流权威CA的根证书。

    浏览器内置的CA的根证书包含了如下关键内容:

    1. CA的公钥(非常重要!!!)

    鉴别证书:

    完全伪造的证书

    这种情况比较简单,对证书进行检查:

    1. 证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书
    2. 证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。
    3. 用CA的公钥,对伪造的证书的摘要进行解密,发现解不了。认为是危险证书

    篡改过的证书

    假设代理通过某种途径,拿到XX的证书,然后将证书的公钥偷偷修改成自己的,然后喜滋滋的认为用户要上钩了。然而太单纯了:

    1. 检查证书,根据CA名,找到对应的CA根证书,以及CA的公钥。
    2. 用CA的公钥,对证书的数字签名进行解密,得到对应的证书摘要AA
    3. 根据证书签名使用的hash算法,计算出当前证书的摘要BB
    4. 对比AA跟BB,发现不一致--> 判定是危险证书

     参考了园里大神的文章 http://www.cnblogs.com/chyingp/p/https-introduction.html

  • 相关阅读:
    SQL Server 【应用】行列转换Pivot&Unpivot
    SQL Server 【优化】in & exists & not in & not exists
    SQL Server 【提高】 死锁
    SQL Server 【提高】 锁
    SQL Server 【提高】 游标
    .Net 【基础回顾】关键字
    .Net 【基础回顾】值类型与引用类型
    mysql中point类型数据的操作
    CGI环境配置(Ubuntu)
    CGI环境配置(CentOS)
  • 原文地址:https://www.cnblogs.com/yousen/p/5265232.html
Copyright © 2011-2022 走看看