zoukankan      html  css  js  c++  java
  • 数字证书和数字签名

    数字签名

    服务器首先使用RSA算法生成私钥-公钥对,并只公开公钥。

    客户端拿到公钥就可以安全地与服务器通信了。

    举个例子,服务器发送的内容是abc,则有:

    content=abc

    hash值=hash(content)

    数字签名=私钥加密hash值

    客户端验证签名过程:

    1. 公钥解密数字签名得到hash值
    2. 实际hash值=hash(content)

    结果:

    公钥解密出错,有两种情况:一是解密用的公钥是错的;二是数字签名是错的;

    比较签名中的hash值与实际hash值,如果相等说明内容没有被修改过,验签成功;如果不相等说明内容被修改过。

    数字证书

    在客户端验证签名过程中使用的公钥不能保证一定是真的,比如文件损坏,或者其他人替换掉了,都会造成公钥不正确,加以利用后甚至被欺骗。所以服务器的公钥需要一个权威机构认证,就是certificate authority(简称CA),客户端只认CA发布的证书,这样就能保证公钥的正确性。

    数字证书=CA私钥加密(服务器的公钥+相关信息)

    客户端用CA的公钥(一般都会安装)解密数字证书,得到服务器公钥+相关信息,客户端以本地的证书为基础,判断这个公钥是否通过认证。

    例如,客户端如果是浏览器,在浏览器的"证书管理器"有"受信任的根证书颁发机构"列表,浏览器会根据这张列表,查看公钥是否在列表之内,或者判断是否在“证书信任链”中。

  • 相关阅读:
    linux 读写文件 open write lseek的API和应用
    gdb 常用命令
    makefile
    c/c++ 动态库与静态库的制作和使用
    linux 常用命令
    c/c++ 网络编程 陈硕老师视频理解之ttcp
    emacs 高亮
    初识HMTL标签
    Java集合基于JDK1.8的ArrayList源码分析
    Java提高篇——equals()与hashCode()方法详解
  • 原文地址:https://www.cnblogs.com/huangyp/p/4025732.html
Copyright © 2011-2022 走看看