zoukankan      html  css  js  c++  java
  • 数字证书了解

    公钥密码体制(public-key cryptography):

    加密:只能用加密算法和公钥进行加密,公钥及加密解密算法公开;
    解密:只能用解密算法和私钥进行解密,私钥保密;

    对称加密算法(symmetric key algorithms)

    加密:密钥和加密算法,密钥保密
    解密:相同的密钥和解密算法,密钥保密

    非对称加密算法(asymmetric key algorithms)

    加密:密钥和加密算法
    解密:不同的密钥和解密算法
    上文中的1属于非对称加密

    RSA是一种公钥密码体制

    加密:用公钥或者私钥与加密算法进行运算加密
    解密:只能用私钥或者只能用公钥与解密算法运算进行解密

    签名:在传输信息后加一段内容,用来证明信息未被修改过。方法:对信息做一个hash计算得到一个hash值,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值。

    RSA加密与对称加密搭配使用,保证通信安全。RSA私钥在服务器,RSA公钥在客户端。双方确定对方身份后,由客户端用RSA加密发送对称加密密钥给服务器(因为私钥只有服务器有,公钥所有客户都有),之后用对称加密进行通讯。

    数字证书:可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,或者证书可以用来确认对方的身份。数字证书包含:证书的发布机构,证书的有效期,公钥,证书持有者(Subject),签名所使用的算法,指纹以及指纹算法。

    在上文6中通信之前,服务器发送数字证书给客户表明自己是服务器身份。客户验证证书是没有问题之后,发送一个随即字符串给服务器,服务器将随即字符串用私钥加密后发送给客户,客户用证书中的公钥进行解密,能解密结果与发送的随即字符串一致,则再次确认对方是服务器。

    • 随即字符串为了防止黑客截获,服务器会将字符串进行hash之后用私钥加密并发送,客户端解密这个hash值与自己的随即字符串hash后的值进行对比。降低破解几率。
    • 通信的内容加上一个序号或者一个随机的值,如果“客户”或者“服务器”接收到的信息中有之前出现过的序号或者随机值,那么说明有人在通信过程中重发信息内容进行捣乱,双方会立刻停止通信。此法用来防止干扰。
    • 发送信息时,先对信息的内容进行一个hash计算得出一个hash值,将信息的内容和这个hash值一起加密后发送。接收方在收到后进行解密得到明文的内容和hash值,然后接收方再自己对收到信息内容做一次hash计算,与收到的hash值进行对比看是否匹配,判断是否有人修改内容。

    证书构成:

    -. Issuer (证书的发布机构)

    -. Valid from , Valid to (证书的有效期)

    -. Public key (公钥)、Subject (主题,证书持有者)

    -. Signature algorithm (签名所使用的算法,就是指的这个数字证书的数字签名所使用的加密算法,这样就可以使用证书发布机构的证书里面的公钥,根据这个算法对指纹进行解密。指纹的加密结果就是数字签名)

    -. Thumbprint, Thumbprint algorithm (指纹以及指纹算法,这个是用来保证证书的完整性的,也就是说确保证书没有被修改过。 其原理就是在发布证书时,发布者根据指纹算法(一个hash算法)计算整个证书的hash值(指纹)并和证书放在一起,使用者在打开证书时,自己也根据指纹算法计算一下证书的hash值(指纹),如果和刚开始的值对得上,就说明证书没有被修改过,因为证书的内容被修改后,根据证书的内容计算的出的hash值(指纹)是会变化的。 注意,这个指纹会使用"SecureTrust CA"这个证书机构的私钥用签名算法(Signature algorithm)加密后和证书放在一起。)

    证书中指纹的解密:为了保证安全,在证书的发布机构发布证书时,证书的指纹和指纹算法,都会加密后再和证书放到一起发布,以防有人修改指纹后伪造相应的数字证书。这里问题又来了,证书的指纹和指纹算法用什么加密呢?他们是用证书发布机构的私钥进行加密的。可以用证书发布机构的公钥对指纹和指纹算法解密,也就是说证书发布机构除了给别人发布证书外,他自己本身也有自己的证书。证书发布机构的证书是哪里来的呢???这个证书发布机构的数字证书(一般由他自己生成)在我们的操作系统刚安装好时(例如windows xp等操作系统),这些证书发布机构的数字证书就已经被微软(或者其它操作系统的开发机构)安装在操作系统中了,微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认就安装在操作系统里面了,并且设置为操作系统信任的数字证书。这些证书发布机构自己持有与他自己的数字证书对应的私钥,他会用这个私钥加密所有他发布的证书的指纹作为数字签名。

    参考这里

  • 相关阅读:
    QT多个UI文件加入一个项目
    【Go语言】学习资料
    MVC如何在Pipeline中接管请求的?
    ASP.NET MVC路由(5)
    C# dll 事件执行 js 回调函数
    初识Identity
    SpringMVC拦截器
    UrlRouting的理解
    ASP.NET MVC路由
    ASP.NET MVC Module
  • 原文地址:https://www.cnblogs.com/mercycnblog/p/9005551.html
Copyright © 2011-2022 走看看