首页 > 代码库 > 非对称加密,数字签名,公钥私钥,Openssl,https,TLS/SSL等概念说明

非对称加密,数字签名,公钥私钥,Openssl,https,TLS/SSL等概念说明

    本文将通过个人口吻介绍有关公钥私钥,Openssl,https,TLS/SSL等的一些概念及简单配置,在目前时间点(2017年5月7号)下,个人水平有限,存在不少知识理解不够深入,望见谅,后续有新的收获之后将会补充完善该博文。

关于http以及web等基础概念,欢迎看我的另一篇博文:“http,https,www,web等的区别含义”

博文链接地址:http://watchmen.blog.51cto.com/6091957/1922919

本文参考文献引用链接:

1、https://www.zhihu.com/question/23341334

2、https://zh.m.wikipedia.org/zh-hans/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86

3、http://baike.baidu.com/link?url=ida6z7jFkozSq--Z4EWORisdZAZRorbUd5PbTFRoTZug-oDdLzTq4nlzf1yM3AoaSSwiw_PBSpc7jgGse4Gd_IJ1B7cUDz7J-ddBIn4vfwo6ROUznaBPQ-2fvOLzlzYu

4、https://www.zhihu.com/question/25912483


  HTTPS是一种协议,等于HTTP+TLS(由于历史原因,SSL3.0之后就被TLS1.0替代了)。

openssl是一套开源工具集,主要有两个特性:

        1、实现了ssl2,ssl3,TLSv1,TLSv1.1,TLSv1.2协议。

        2、实现目前常用的加密算法。

没有一个非常精准的方法来判断HTTPS是否使用openssl,保守估计至少70%以上的网站是使用openssl的。而windows系列的服务器包括IIS,windows server等都是使用schannel实现,没有使用openssl


    也就是说HTTPS是HTTP的基础上通过TLS(之前是ssl)协议来实现的,而TLS协议所需的公钥私钥等可以由openssl来产生,也可以由其他工具来生成。

    接着拿我们宫保鸡丁的例子来说,在这里宫保鸡丁这道菜不放盐的情况下就是HTTP(肯定能吃,但是不好吃,你要不想吃送过来我吃),放盐的情况下就是HTTPS,那么这个多出来的S也就是盐也就是我们的TLS协议,我们知道我们去超市买盐,这个盐的分类就多了,有便宜的有贵的,有海盐有矿盐等等等等。那么这个openssl就是我们最经常买的销量最大的中盐集团(反正我是吃他家的海盐),公钥私钥就是中盐集团生产的盐。

    也即OpenSSL 是 SSL /TLS的一个开源实现,跟 HTTP 一点关系也没有。

或者也可以说:

HTTPS与SSL的关系就像HTTP与TCP的关系

SSL/TLS与OpenSSL的关系就像操作系统与Windows的关系


    那么为什么现在不用SSL,要使用TLS协议了呢?

    SSL协议由美国 NetScape公司开发, 1996年发布了V3.0版本(最新也是最后版本)。SSL 3.0 已经存在超过 15 年之久,目前绝大多数浏览器都支持该版本。通常用户的浏览器都使用新版本的安全协议与服务器进行连接,为了保持兼容性,当浏览器安全协议连接失败的时候,就会转而尝试老版本的安全协议进行连接,其中就包括SSL 3.0。但是在SSL协议级别,会出现Poodle攻击,原理就是黑客故意制造安全协议连接失败的情况,触发浏览器从TLS往下降级使用 SSL 3.0,然后使用特殊的手段,从 SSL 3.0 覆盖的安全连接下提取到一定字节长度的隐私信息。因此,在谷歌40版本之后,谷歌就取消对了SSL的向下支持。因此现在主流的加密协议使用的都是TLS

    以上内容解释了HTTPS和OpenSSl之间的关系,接下来我们继续讲解加密相关知识



    那么为什么我们要使用HTTPS呢,什么非对称机密,什么是公钥私钥,以及他们的工作原理?


    非对称加密:(asymmetric cryptography)也称为公开密钥加密(public-key cryptography)

(在密码学中,公开钥匙密码学,简称公钥密码学,又称为非对称密码学)这是一种密码学算法类型,在这种类型中,需要一对密钥,一个是私人密钥,一个是公开密钥。这两个密钥是数学相关,用某个用户的密钥加密后的信息,只能使用该用户的解密密钥才能进行解密查看。

    只是知道其中一个的密钥(密钥在这里泛指公钥和私钥,如没有特殊说明,公钥和私钥均可以被称为密钥,在这里请广大读者注意),不能计算出另一个密钥,因此,对外公布一个密钥的内容,不会影响另一个密钥的安全性,因此即使公钥在网上被截获,如果没有与之匹配的私钥,也无法解密。在这里,我们将对外公布的密钥称之为公钥,不公开的对内保留的密钥称之为私钥。

注意:也可以使用私钥进行加密,然后用公钥进行解密,没有明确说只能使用公钥加密数据。这种特殊情况我们下面会说到。

总结:使用公钥加密数据,使用私钥解密数据的这种操作就叫做非对称加密

    

    公钥加密:用户使用公钥对数据进行加密,并将加密后的数据传输给私钥的所有者,这个操作就叫做公钥加密(狭义)。这是正常的选择,下面我们说说刚才说的使用私钥进行加密


    数字签名:但是如果我们使用私钥进行加密数据(私钥永远不对外发布),就可以使用公钥对其进行解密,这用于客户验证拥有私钥的一方发布的数据或者是文件是否是准确完整的,拥有公钥的接收者可以判断这段数据,由此得知发布这段数据的真实身份是否确实是拥有私钥的某人。

    也即:数字签名=使用私钥加密的数据


    数字证书:我们所拥有的公钥是以数字证书的形式保存的。也即:公钥=数据证书


总结:数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥(数字证书,所有人都可以获取)才能解密被加密的摘要信息(数字签名),然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。整个过程也即使用数字证书去验证数字签名

    加密:既然是加密,那么肯定是不希望别人知道我的消息,所以只有我能解密,那么可以得出是使用公钥负责加密,私钥负责解密。

    签名:既然是签名,那肯定是不希望有人冒充我发消息,因此只有我才能发布这个签名,所以可以得出私钥负责签名,公钥负责验证。


    我们在实际应用中最常见的一种公钥加密算法就是RSA(两个大质数(p,q)乘积(n)难以逆向求解),也就是说公钥使用这种算法对数据进行加密,私钥也用这种算法对数据进行解密。






    通过openssl生成密钥实现https的内容以及CA认证相关知识,在我的另一篇博文

博文地址:正在编写,后续补充





本文出自 “清风揽月的博客” 博客,请务必保留此出处http://watchmen.blog.51cto.com/6091957/1923426

非对称加密,数字签名,公钥私钥,Openssl,https,TLS/SSL等概念说明