zoukankan      html  css  js  c++  java
  • 002. https通信(CA证书认证 + 密钥商定 )

    服务端与客户端建立https通信的过程:

    一、认证:客户端第一次访问服务端时,要求服务端证明自己可被信任


    1.证书:由服务端申请、第三方CA颁发的,存放在服务端的证书;

        证书包含:服务端的公钥、服务端的基本信息(明文)、CA的信息、签名(对服务端公钥、基本信息摘要进行hash计算得到hash值,然后使用CA的秘钥对该hash值进行加密后的密文)


    2.证书作用:当客户端访问服务端时,服务端发送证书(给客户端检查)证明自己已在第三方CA登记,可被信任。

      参考:https://www.cnblogs.com/handsomeBoys/p/6556336.html

            https://blog.csdn.net/lwwl12/article/details/80691746     CA、根证书与数字证书

         https://www.cnblogs.com/fps2tao/p/10036910.html

         https://segmentfault.com/a/1190000002554673

    注意:

    2.1 客户端如何验证服务端发送的证书,证明服务端可被信任

      客户端需要事先安装第三方CA的根证书(CA中心颁发给CA中心自己的证书),该根证书下的所有证书都将被客户端信任。

       客户端拿到服务端的证书后,读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,

    然后利用对应 CA 的公钥(CA根证书)解密签名,得到服务端公钥及其他信息;解密得到的信息与证书中公开的信息对比(),如果一致,则可以确认证书合法(即服务端被信任 ,服务端的公钥是其真实的公钥)

    2.2 客户端可以要求验证服务端,同样,服务端也可以要求验证客户端 (这种情况较少,如金融服务要求验证客户端)

      原理基本相同,客户端有自己CA证书,访问服务端时,发送自己CA证书给服务端检查。

    2.3 证书可以有第三方颁发,也可以由服务端自己制作(服务端自己颁发给自己的)。

      OpenSSL

    二、密钥商定(TLS握手)

    1.密钥商定:对称加密 + 非对称加密 

      得到通信加密的秘钥。

      参考:https://www.cnblogs.com/xiohao/p/9054355.html

    2.开始使用商定的密钥https加密通信

    附录: https 完整的认证+密钥商定过程

    参考:https://segmentfault.com/a/1190000002554673

    假设A与B通信,A是客户端,B是服务器端

    ----------- 加密后的消息放在方括号[]里,以突出明文消息的区别。双方的处理动作的说明用圆括号()括起。

    A:我想和你安全的通话,我这里的对称加密算法有DES,RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA。

    B:我们用DES-RSA-SHA这对组合好了。
    这是我的证书,里面有我的名字和公钥,你拿去验证一下我的身份(把证书发给A)。
    目前没有别的可说的了。

    A:(查看证书上B的名字是否无误,并通过手头早已有的CA的证书验证了B的证书的真实性,如果其中一项有误,发出警告并断开连接,这一步保证了B的公钥的真实性)
    (产生一份秘密消息,这份秘密消息处理后将用作加密密钥,加密初始化向量(IV)和hmac的密钥。将这份秘密消息-协议中称为per_master_secret-用B的公钥加密,封装成称作ClientKeyExchange的消息。由于用了B的公钥,保证了第三方无法窃听)
    我生成了一份秘密消息,并用你的公钥加密了,给你(把ClientKeyExchange发给B)
    注意,下面我就要用加密的办法给你发消息了!
    (将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥)
    [我说完了]

    B:(用自己的私钥将ClientKeyExchange中的秘密消息解密出来,然后将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥,这时双方已经安全的协商出一套加密办法了)
    注意,我也要开始用加密的办法给你发消息了!
    [我说完了]

    A: [我的秘密是...]

    B: [其它人不会听到的...]

  • 相关阅读:
    leetcode 48. Rotate Image
    leetcode 203. Remove Linked List Elements 、83. Remove Duplicates from Sorted List 、82. Remove Duplicates from Sorted List II(剑指offer57 删除链表中重复的结点) 、26/80. Remove Duplicates from Sorted ArrayI、II
    leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes
    leetcode 58. Length of Last Word
    安卓操作的一些问题解决
    leetcode 378. Kth Smallest Element in a Sorted Matrix
    android studio Gradle Build速度加快方法
    禁用gridview,listview回弹或下拉悬停
    Android Studio找不到FragmentActivity类
    安卓获取ListView、GridView等滚动的距离(高度)
  • 原文地址:https://www.cnblogs.com/badboyh2o/p/10229116.html
Copyright © 2011-2022 走看看