zoukankan      html  css  js  c++  java
  • Https

    引:
    HTTP协议传输的数据都是未加密的,也就是明文的,容易受到篡改和窃听。于是后来提出了https

    Https

    网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,之后IETF对SSL 3.0进行了升级,于是出现了TLS(Transport Layer Security) 1.0,定义在RFC 2246。
    (SSL/TLS)

    TLS/SSL中使用了非对称加密,对称加密以及HASH算法.

    服务器把数据加密后,客户端如何读懂这些数据呢?服务器如果将这个对称密钥以明文的方式给客户端,还是会被中间人截获,中间人也会知道对称密钥,依然无法保证通信的保密性。下面这样是不行的:

    因为:

    于是引入了数字证书的概念。

    服务器首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给服务器,给客户端一个数字证书,数字证书中加入了一些数字签名的机制,中间人发送的伪造证书,不能够获得CA的认证,此时,客户端和服务器就知道通信被劫持了。

    综合以上三点:
    非对称加密算法(公钥和私钥)交换对称密钥+
    数字证书验证身份(验证公钥是否是伪造的)+
    利用对称密钥加解密后续传输的数据 =
    安全

    非对称加解密(极端消耗CPU资源)目前只能用来作对称密钥交换或者CA签名

    数字证书有三个作用:
    1、身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。
    2、分发公钥。每个数字证书都包含了注册者生成的公钥。
    3、验证证书合法性。客户端接收到数字证书后,会对证书合法性进行验证。只有验证通过后的证书,才能够进行后续通信过程。

    数字证书验证:

    数字签名是证书的防伪标签,目前使用最广泛的SHA-RSA(SHA用于哈希算法,RSA用于非对称加密算法)。数字签名的制作和验证过程如下:
    1、数字签名的签发。
    首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密。
    2、数字签名的校验。使用CA的公钥解密签名,然后使用相同的签名函数对签名证书内容进行签名,并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。
    ( 秘钥交换:公钥加密,私钥解密。数字签名:私钥加密,公钥解密)

  • 相关阅读:
    【设计模式】责任者模式
    【Java工具方法】给集合按数量分组
    【Spring】非Spring IOC容器下获取Spring IOC上下文的环境
    【Java】模板方法模式
    【RabbitMQ】CentOS安装RabbitMQ,及简单的Java客户端连接
    【RabbitMQ】RabbitMQ的一些基础概念
    【Spring】简单的Spring AOP注解示例
    【Web】URI和URL,及URL的编码
    【加密】对称加密算法
    【Normal Form】数据库表结构设计所遵从的范式
  • 原文地址:https://www.cnblogs.com/xawei/p/6860479.html
Copyright © 2011-2022 走看看