zoukankan      html  css  js  c++  java
  • HTTPS SSL TLS 相关理解

    1,在理解 HTTPS SSL TLS 之前先对常用的加密方式进行一个简述:

      (1),对称加密: 采用一个密钥,对明文进行加密生成密文,相反采用此密钥可对加密后的密文进行解密还原成明文.

                   代表算法有,DES,3DES,AES 等

      (2),非对称加密: 公钥加密,私钥解密. 网上有个比喻很形象(公钥好比一把开着的锁头, 私钥好比这把锁头的钥匙全世界就只有一把钥匙,由你保管,

                   若要与人通信,将锁头给别人好了.别人拿到这个锁头将重要信息锁在起来.然后全世界就只有你一个人能打开这个锁)

                   代表算法有,RSA ,DSA 等.

      (3),摘要算法: 即将明文数据通过摘要算法生成一小段(固定长度)密文数据. 但通过密文无法还原程明文,算法不可逆.

                  通常用来验证明文数据是否完整,是否正确.

                  代表算法:MD5 ,SHA

    2,思考: 了解上述之后我们要登录我们的支付宝,网银等,要怎样去实现.

       (1),采用对称加密???  访问, 支付宝,网银等,服务端和客户端双方约定一个密钥. 服务端客户端通过这个密钥进行加密和解密. 

            问题来了: 服务端和客户端怎么去协商密钥 ? 服务端生成密钥然后告知给客户端 ? 或者客户端生成后发送给服务端?

              当然这样行不通:发送过程中如果被其他人抓到网络包后很容易就看出密钥了.

                           

       (2), 采用非对称加密 ??? , 服务端生成公钥,和私钥.将公钥通过网络传输给客户端,客户端通过公钥将

                  帐号密码等信息加密 发送给服务端 ???

                   问题来了: (1),这个只能单方面客户端发送重要信息给服务端. 如果服务端要发送重要信息给客户端怎么办?

                                 (2),答案有人可能想到了服务端和客户端,都各生成一对公钥和私钥, 然后再交换公钥,这不就妥了.

                                      没错这样是可以进行保密传送. 但是这样也带来了性能上的问题.如果是传送大量的数据时.

                                      可能会影响性能.

     (3),采用摘要算法 : 这就更不可能了.摘要算法只能保证数据的正确性和完整性.

    4,结论:

        通过以上分析.有人可能已经有了结果 : 采用单种的加密方式不能达到目的,如果把他们配合使用不就ok了.

        没错HTTPS ,SSL 就是这样一个东西: 采用 对称加密进行传输加密数据,用非对称加密来交换对称加密所使用的密钥.

        当然为了保证你访问的网站是正确的,即 防止将帐号密码等信息交给钓鱼网站. 数字证书应运而生了.

         数字证书确保您是再与一个可信的人(可信的网站)在交流. 是在与一个值得托付终身的人在恋爱.

                                

          以下具体的步骤来源与互联网, 展示HTTPS SSL 等交互流程

      (1). 客户端发起HTTPS请求

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

      (2). 服务端的配置

      采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

      (3). 传送证书

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

      (4). 客户端解析证书

      这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

      (5). 传送加密信息

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

      (6). 服务段解密信息

      服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

      (7). 传输加密后的信息

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

      (8). 客户端解密信息

      客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

  • 相关阅读:
    [转]当鼠标点击ListView下面的空白区域时,如何使ListView的原item选项仍然为选中状态
    [转]图像处理去噪的方法
    C# 图片上画连线时 自定义两点间的划线段样式
    C# WinForm (笨方法)根据不同的样式配置 设置窗体相关控件的背景 以改变窗体风格
    [转]sqlserver 数据类型 及使用考虑
    C# WinForm 关于窗体最大化时的是否全屏效果与是否遮盖任务栏
    [转]C# 画圆角矩形
    Ruby常用的内部变量
    document.getElementsByClassName的理想实现
    转:ie6与firefox操作iframe中DOM节点的一点不同
  • 原文地址:https://www.cnblogs.com/haide/p/4203436.html
Copyright © 2011-2022 走看看