HTTPS非对称加密

HTTP协议

HTTP是从万维网传输服务器传输超文本(HTML)到本地浏览器的传输协议。其过程没有任何的加密及身份验证机制,容易遭到窃听、劫持、篡改。

不安全原因主要有以下几点。

1、通信方式使用名文,内容可能被窃听。

2、不验证通信方的身份,因此有可能被伪装。

3、没有验证报文完整性、可能被篡改,加入恶意代码。

HTTPS协议

为解决以上问题,基于HTTP协议,Netscape公司制定了HTTPS协议。通过数据加密、身份认证、安全密钥、数据签名、摘要验证等机制将数据安全封装,再进行传输。减少了在数据传输过程中被窃听、篡改的可能。HTTPS的安全基础是SSL(Secure Socket Layer)安全套接层。其所有业务都使用在SSL握手过程中建立的密钥和算法进行加密。这样就防止了某些用户通过使用IP数据包嗅探工具非法窃听。尽管数据包嗅探仍能捕捉到通信的内容,但却无法破译。

SSL握手协议

        它可以让服务器和客户机在传输应用数据之前,协商加密算法和加密密钥,客户机提出自己能够支持的全部加密算法,服务器选择最适合它的算法。

SSL记录协议

        为SSL连接提供两种服务:

       (1)机密性:握手协议定义了共享的、可用于对SSL有效载荷进行常规加密的密钥。

       (2)报文完整性:握手协议还定义了共享的、可用来形成报文的鉴别码(MAC)的密钥。

使用到的加密技术

对称加密:

        描述:在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

        缺点: 1、密钥传输风险

​                    发送方和接收方必须要使用一个安全的信道建立密钥;消息的通信链路是不安全的。

​                    2、密钥难管理

​                    用户过多时,每对通信都使用不同密钥;想要相互通信,会导致密钥数量太多,假设                      需要通信的人数是n人,则需要管理的密钥个数为:n(n-1)/2个,当人数过多时,密钥                      数量会近指数倍暴增。

非对称加密:

        简单理解:A公钥加密,A私钥解密;B私钥加密,B公钥解密

​        缺点:加密算法比较复杂,影响效率,不能传很大的数据。

        百度百科解释:加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。

CA证书

​        证书合法能被服务器/客户端信任。

        服务器给客户端看:

​            CA证书机构颁发证书给网站

​            浏览器里面会记录这些证书

​        客户端告诉服务器:

​            如:网银

使用到的加密概念

数字签名及数据摘要

        可以参考这个链接,通俗易懂:数字签名是什么? - 阮一峰的网络日志

        签名就是在信息的后面再加上一段内容,一般是对信息做一个hash计算得到一个hash值,注意,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值,所以只要内容一被修改,根据信息内容计算的hash值就会变化。
        原文链接:https://blog.csdn.net/ZZB_Bin/article/details/72967787

HTTPS加密原理图

数据发送端(A)加密

数据接收端(B)解密

实际应用中的SSL

双向身份认证

图中Alice作为服务器,Bob作为客户端

第一步:

客户端发起连接请求Client Hello

  • Random1:服务器生成的第二个随机数

  • Extensions:客户端支持的加密套件

第二步:服务器端发消息

  • Random2:服务器生成的第二个随机数

  • Cipher Suites:支持的加密套件

  • Extensions:服务器选择一个压缩方式

  • Certificate:证书

  • Server Key Exchange:服务器端公钥(S_public)

第三步:客户端发送消息

  • Client Key Exchange:发送预主密钥(经过S_public加密),Pubkey = 加密(预主密钥)

  • change Cipher Spec

  • Encrypted Handshake Message 加密握手消息

双方计算出:对称密钥(S_key)= Random(Client) + Random(Server) + 预主密钥

第四步:服务器响应客户端改变的密码规范,启用加密参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值