最近在看OpenSSL相关的资料,看了很久还是感觉有点不得其法,尤其对其与python内的应用还是没多大头绪,
先把知道的整理一下出来,目前会用到的加密方法是基于PKCS7做数字签名,不知道这样的描述算不算准确
SSL(Secure Socket Layer) 是一种加密技术,可以提供对称加密和非对称加密。由于它在协议层里正好是在传输层与应用层之间,这就决定了上层应用必须经过它,这就是它广泛流行和易于实现的原因。
对称加密有md5,sha1。由于md5已被学者证明可以计算出加密冲突,即它有一定的不安全性,所以建议用sha1加密。
非对称性加密有RSA,即密码有一对,一个私钥,一个公钥,公钥可以让所有人知道,私钥只有自己知道。这样理解,服务器产生一对密钥,公钥给别人即客户端,客户端用它来加密,加密后发给服务端,服务端用自己的私钥解密后得到数据。
数字签名就和上面的过程相反,即数据由服务端用私钥加密,客户端用服务端的公钥解密,解得出来就说明这数据包的确是出服务端发过来的。数字签名是由服务端自己签的,但没人去验证这个服务端是不是你所要访问的真实的,所以需要第三方来帮忙检验,就和支付宝处于第三方来协调的位置一样。这个第三方就叫CA。所以服务器产生的公钥就交给CA,CA用CA自己的私钥加密,即数字签名,加密生会生成证书,证书还是要交给服务端,放在服务端那边。当客户端访问服务端时,服务端就会把这个证书安装到客户端上。(数字签名需要确认两点:一、信息是由签名者发送的;二、信息自签发后到收到为止未做过任何修改)
数字签名原理:1. 被发送文件采用hash算法对原始报文进行运算,得到一个固定长度的字符串,称为报文摘要;2.发送方生成报文的报文摘要,用自己的私钥对报文进行加密来形成发送方的数字签名;3.数字签名将作为报文的附件和报文一起发送到接收方;4.接收方首先从接收到的原始报文中用同样的算法计算出新的报文摘要,再用发送方的公钥对报文附件的数字签名进行解密,比较两个报文摘要,若相同则可以确认。
PKCS #7:是由RSA安全体系指定的一组公钥密码学标准,又名加密消息语法标准(Cryptographic Message Syntax Standard)An R