zoukankan      html  css  js  c++  java
  • 数据证书、数字签名的理解

    使用场景:客户端与服务端进行数据传输时,需要进行数据加密。

    例:服务端自身创建一对公私密钥(公钥加密的数据只能由对应的私钥进行解密,反之同理),私钥由服务端自身保存(不泄露的前提下,私钥只有只有服务端自身才有),服务端将公钥告知于客户端,从而进行加密数据传输。

    风险:服务端发送公钥给客户端时,被第三方拦截后,第三方可以知道服务端的公钥,并自身进行公私密钥对的创建,然后传递给客户端一个属于第三方的公钥,客户端在不知道公钥被替换的前提下,使用第三方的公钥进行加密数据传输,第三方依旧可以进行拦截,获取加密数据并使用自身的私钥进行数据解密,然后将解密后的真是数据进行篡改,再使用服务端的公钥进行数据加密发送给服务端,最后,服务端收到的数据并非是客户端的真是数据,而是经过篡改了。

    解决方式:加入数字证书

    作用:数据证书包含关键2点(1.加密服务端公钥 2.加密证书签名)

    解释:数字证书颁发机构自身具有对应的公私密钥对,私钥没有人能知道,只有机构自身,公钥各大浏览器都支持,都保存有各大可信证书机构的公钥。

       证书签名:将发送内容使用摘要算法,进行摘要计算,将对应的摘要进行加密(使用CA私钥,后续验证证书可靠性需要),得到签名。

    加入证书后流程:服务端不再直接发送公钥给客户端,而是把公钥交给证书颁发机构,证书颁发机构使用自身的私钥对申请证书时提供的公钥进行加密,并且通过服务端网址等信息生成一个证书签名,证书完成后,把证书发送给服务端,当客户端请求来临时,服务端把申请的证书直接发给客户端,客户端根据自身浏览器中保存的证书公钥,对加密的公钥进行解密,得到服务端实际发布的公钥。

    疑问:如果第三方自身生成一对公私密钥,并且将公钥发送给证书颁发机构进行证书生成,获得可信任证书机构的证书,然后替换服务端的证书发送给客户端呢?客户端依然可以用该信任的机构的公钥进行解密获取第三方的公钥。

    解释:涉及证书的认证机制,客户端收到证书后,不光要解密证书的加密服务端公钥信息(获取服务端公钥),还要进行证书的真实性校验,假如现在客户端收到的证书是第三方的假证书,那么在进行数字签名信息解密时便会出现错误,因为已知的CA公钥只能解密使用对应的CA机构的私钥加密的数字签名,任何人无法伪造。

    校验操作:

    1.验证证书的真伪
    当浏览器拿到一个数字证书,先看发证机关,然后找到相应的发证机关的证书,获得发证机关的公钥

    ,用此公钥解密被加密的MD5,这样就获得了此证书的MD5值,称它为Hash1。然后浏览器用MD5算法对

    此证书重新计算一遍MD5,获得Hash2。然后比较Hash1和Hash2是否相等。如果相等就证明这张证书是

    由发证机关颁发的,并且没有被篡改过.
    2.验证持有者的真伪
    核对持有证书人的身份。这就要依赖证书里面包含的公钥。此公钥是这张证书所有者的公钥(注意,

    这里指的是所有者,而不是持有者!),用此公钥加密一段信息发送给证书的持有者,如果持有者能

    发送回(可以是被私钥加密,也可以是明文,没有关系)被加密的这段信息的话就证明该持有者拥有

    该证书对应的私钥,也就是说,该持有者就是该证书的所有者。
    (接收者收到用公钥加密的信息,能用私钥解密发回或用私钥加密后发回) 
    3.验证证书所有者的姓名

    证书中所有者的名字与认证中心(CA)登记的(Common Name)姓名是否一样(对服务器来说,域名是否一致)

     

     

  • 相关阅读:
    java-泛型及上界下界详解
    【CSDN】Spring+Spring MVC+Mybatis实战项目之云笔记项目
    mybatis
    spring笔记-spring mvc表单
    spring笔记-第一个spring mvc 项目
    巡风源码阅读与分析---AddPlugin()方法
    巡风源码阅读与分析---view.py
    BUGKUctf-web-writeup
    陕西省网络空间安全技术大赛部分题目writeup
    “百度杯”CTF比赛(二月场)-web-writeup
  • 原文地址:https://www.cnblogs.com/zst-blogs/p/10403479.html
Copyright © 2011-2022 走看看