背景:
如题,最早看到这些关键字的时候已经是两三前年的事了,那时查阅过相关资料简单的了解过它们一下;直到最近在回顾笔记的时候,发现有些地方理解的不是很通透;遂在以前笔记基础上做了一点归纳和总结,顺便在这颗粒机里记录一下。
做过后端开发的童鞋都知道,服务之间的通信基本上都是通过HTTP协议进行的;但有的时候为了安全,我们希望通信时传递的数据是经过加密的,不希望数据在传递过程中被第三方窃取;或者通信双方需要对彼颗粒机此进行认证,来确定对方的身份。这时我们就需要用到HTTPS协议,而提到该协议,就必须了解标题中提到的关键字。
场景:
在开始之前,用最常见的浏览器访问网站的例子来看一个问题 -> 浏览器怎么确定访问目标是颗粒机可信的,而不是被其它第三方假冒的?
示意图(红线连接着假冒的服务)一种办法是: 受访问的服务需要提供能证明自己身份的东西,这就引出了->证书。 但是怎么证明证书是有效的? 假冒的服务器也可以有证书,所以颗粒机证书上要有一个可信的标识,代表它是经过认证的,这个标识就是-> 签名;那这个签名又是咋来的? 总不能服务自己给自己签吧... 所以需要一个特殊的机构来进行,这个机构是大家公认的可靠第三方,只要证书有它颗粒机的签名,就可以信任这个证书,这个机构就是CA(certificate authority)。至此,证书,CA,签名的关系就说完了。 (注: 浏览器对服务器的认证,通常是单向认证-即只校验服务器的证书;颗粒机 在日常开发时,服务与服务之间走HTTPS,都是需要双向认证的-即双方都需要提供自己的证书,并进行校验)
CA,证书,签名之间的关系认证说完后,再来说说如何对数据加解密。一般来说双方需要协商一个加/解算颗粒机法,并使用相同的秘钥对数据进行加/解密。设秘钥为key, 加密算法为encrypt,解密算法为decrypt, 数据为msg, 密文为ciphertext。 加密方: ciphertext=encry颗粒机pt(msg, key);解密方: msg=decrypt(ciphertext, key)。 注意,这里加解密用的key是相同的,这种用相同key进行加解密的方法是对称加密算法。对称加密通信存在一些颗粒机问题: 因为key是相同的,如果key被泄露,作为服务方,你发出的所有消息都可以被持有key的人解密,并且持有key的人还可以假冒你对信息签名。所以需要使用另外一种方案,这种方案需要做到加解密时用的k颗粒机ey是不同的,经过一个key加密的数据,需要另外一个key来解密; 这种加解密方案就是非对称加解密,它需要一对秘钥才能工作,即公/私钥。与之相关的加解密过程是: 加密方: ciphertext=enc颗粒机rypt(msg, publick_key), 解密: msg=decrypt(ciphertext, private_key)。通过这种方式,在需要通信的时候把公钥下发出去,持有公钥的客户端加密的数颗粒机据,只能由持有私钥的服务端解开,客户端无法通过公钥解密其它客户端发送的信息,从而保证数据的安全。
HTTPS请求流程:
解释完标题中的关键字,再看下HTTPS的请求流程,可以加深理解。
步骤:
1.浏览器发起颗粒机https请求
2.服务器返回它的证书
3.浏览器通过CA的公钥对证书签名进行校验,检查证书是否有效
4.浏览器生成一个临时秘钥并用服务器的公钥对它加密,然后将其发送给服务器
5.服务器用私钥解密,得到浏览器颗粒机发送给它的秘钥, 然后用该秘钥对数据进行加密
6.浏览器得到加密数据,并用发给服务端的秘钥进行解密示意图看完这幅图应该会有一些疑问,双方真正通信时用的秘钥,是相同的!也就是说,实际通信时,双方仍然用的是颗粒机对称加密方法。为什么会这样 ? 这也是我最初的疑问,为什么对称加密和非对称加密在HTTPS中都有用到?带这个问题,我们看下这两种加密方法在HTTPS协议中起到的作用。
非对称加密作用: 证书签名(CA的颗粒机私钥签), 验签(用CA的公钥验); 客户端用服务端的公钥对临时秘钥加密,服务端用私钥对数据解密,得到客户端送给它的秘钥。
对称加密的作用: 双方后面交换数据时才会用到。
这里之所以要再生成秘钥,是因为直颗粒机接用私钥对真实数据加密,性能不如对称加密,基于这个理由,后面的通信仍然使用的是对称加密;因为每次通信都会生成临时秘钥,所以对称秘钥只对一次通信有效,不用担心泄露问题。
一些详情:
证书: 在前面的描述中多颗粒机次提到证书,证书里主要有版本号,序列号,签名算法,有效期,所有者(服务端)的公钥... 除此以外,还有CA的签名。
关于签名和验签:
签名: signature=encrypt(hash(text), p颗粒机rivate_key) 解释: 先对信息进行hash生成一个摘要,再对摘要进行加密。(这里的text可以是任何数据, 证书,或其它信息)
验签: 对比 decrypt(signature, public颗粒机_key) == hash(text) 解释: 用公钥对签名解密得到加密前的hash值, 再对明文进行hash, 看看两者的hash值是否一样,如果一样则验签通过,并且内容没有被篡改,如果不一样则验签颗粒机失败。
其它:
如果你看过网上的文章,大家基本都在说公钥加密,私钥解密,私钥总是用作签名;为什么都这样说呢? 回到非对称加密最初的设计 -> 一个key加密的信息,只能由另一个key解密; 基于此,公钥加颗粒机密的信息只能由私钥解开(只有一个人能解开),那么用公钥加密是合乎情理的,因为能解密的只有一人; 反过来,如果私钥对数据加密,但公钥是在网络上广泛流传的,即使加密还是有很多人能够解密,所以用私钥加密数据颗粒机意义不大;基于此,如果用私钥来签名就比较合适了,因为只有你下发的公钥才能解开,其它人下发的公钥无法解开你的签名。
扫描二维码推送至手机访问。
版权声明:本文由木屑颗粒机_燃烧生物颗粒机那里有_生物质燃料颗粒机器设备发布,如需转载请注明出处。