博文说明【前言】:
本文将通过个人口吻介绍有关非对称加密,公钥私钥,数字签名,OpenSSL及HTTPS等简单概念,在目前时间点【2017年5月8号】下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容。
关于http以及web等概念,欢迎看我的上一篇博文:
实现HTTPS系列第一弹之【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
4、https://www.zhihu.com/question/25912483
正文:
HTTPS是一种网络协议,等于HTTP+TLS(由于历史原因,SSL3.0之后就被TLS1.0替代了)。
而OpenSSL是一套用于实现TLS/SSL协议的开源工具集,主要有两个特性:
1、实现了ssl2,ssl3,TLSv1,TLSv1.1,TLSv1.2协议。
2、实现目前常用的加密算法。
没有一个非常精准的方法来判断HTTPS是否使用openssl,保守估计至少70%以上的网站是使用openssl的。而windows系列的服务器包括IIS,windows server等都是使用其他方式实现,没有使用openssl
原创案例-实战分析1:
接着拿我们宫保鸡丁的例子来说,在这里,宫保鸡丁这道菜不放盐的情况下就是HTTP(肯定能吃,但是不好吃),放盐的情况下就是HTTPS,那么这个多出来的S也就是盐也就是我们的TLS协议,我们知道我们去超市买盐,这个盐的分类就多了,有便宜的有贵的,有海盐有矿盐等等等等。那么这个openssl就是我们最经常买的销量最大的中盐集团(反正我是吃他家的海盐),TLS协议就是中盐集团生产的某款食盐。
总结:也即OpenSSL 是 SSL /TLS的一个开源实现,跟 HTTP 没有关系。你说不加盐的宫保鸡丁和盐有什么关系?
转载案例-实战分析2:
我看到有人举下面这个例子,觉得也是甚好,大家参考下:
1、HTTPS与SSL的关系就像HTTP与TCP的关系
2、SSL/TLS与OpenSSL的关系就像操作系统与Windows的关系
问题1:那么为什么现在不用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之间的关系,接下来我们讲解加密相关知识
---------------------------------------------【分割线】------------------------------------------------
那么什么非对称机密,什么是公钥私钥?
非对称加密:(asymmetric cryptography)也称为公开密钥加密(public-key cryptography)
这是一种密码学算法类型,在这种类型中,需要一对密钥,一个是私人密钥,一个是公开密钥。这两个密钥是数学相关,用某个用户的密钥加密后的信息,只能使用该用户的解密密钥才能进行解密查看。
根据这种公钥公开,私钥隐藏的机制,出现了著名的RSA算法。这是我们在实际应用中最常见的一种公钥加密算法(原理是两个大质数(p,q)乘积(n)难以逆向求解),也就是说公钥使用这种算法对数据进行加密,私钥也用这种算法对数据进行解密。
注意1:只是知道其中一个的密钥(密钥在这里泛指公钥和私钥,如没有特殊说明,公钥和私钥均可以被称为密钥),不能计算出另一个密钥,因此,对外公布一个密钥的内容,不会影响另一个密钥的安全性,也就是说即使公钥在网上被截获,如果没有与之匹配的私钥,也无法解密。在这里,我们将对外公布的密钥称之为公钥,不公开的对内保留的密钥称之为私钥。
注意2:我们也可以使用私钥进行加密,然后用公钥进行解密,没有明确说只能使用公钥加密数据。这种特殊情况我们下面会说到。
对称加密:在这种加密类型中,加密解密都是同一个密钥,也即用户加密数据使用密钥A,其他用户也是使用该密钥A解密该加密数据。其中比较著名对称加密算法是AES算法。
公钥加密系统也就是非对称加密的提出是为了解决对称加密中密钥传递的问题。例如我们现在使用对称加密,只有一个密钥K,加密解密都用它。A要给B发送一段保密信息,A可以用K进行加密,把密文发送给B,B再用K解密,得到信息。
在这里有一个存在风险的地方:B要解密只能用K,而K开始只有A知道,因此A要告诉B密钥K只能是通过明文形式,既然是明文传递,就存在被人截取的风险。
而公钥加密系统里面就不存在这个问题了。它的思路是加密与解密用不同的密钥,这样就不用传递解密的密钥了。关键是不用传递解密时所用的密钥
注意3:我们在实际对数据进行加密传输的时候,真正使用方式的是是对称加密,为什么不使用非对称加密方式来加密数据呢,主要是因为非对称加密算法的时间成本太大(时间耗费为对称加密方式1000倍以上),因此实际情况是:我们使用非对称加密方式加密传输的数据实际上是对称密钥所用的密钥,而且只是在刚开始交互的时候使用,后续一直使用对称加密方式对数据进行加密。
数字签名:但是如果我们使用私钥进行加密数据(私钥永远不对外发布),也可以使用公钥对其进行解密,这用于客户验证拥有私钥的一方发布的数据或者是文件是否是准确完整的,拥有公钥的接收者可以判断这段数据,由此得知发布这段数据的真实身份是否确实是拥有私钥的某人,详细介绍将在下一篇博文阐述,这里只是引入概念。
总结1:数字签名=使用私钥加密的自身数据。目的是供其他验证我的身份合法性
全文总结1:
使用公钥加密数据,使用私钥解密数据的这种操作就叫做非对称加密
加密:既然是加密,那么肯定是不希望别人知道我的消息,所以只有我能解密,那么可以得出是使用公钥负责加密,私钥负责解密。
签名:既然是签名,那肯定是不希望有人冒充我发消息,因此只有我才能发布这个签名,所以可以得出私钥负责签名,公钥负责验证。
全文总结2:
数字签名是将发送信息的摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥(数字证书,所有人都可以获取)才能解密被加密的摘要信息(数字签名)。然后接受者用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比,如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性与正确性。整个过程也即使用数字证书去验证数字签名
结尾:
下一篇:实现HTTPS系列第三弹之【数字签名,数字证书,CA认证等概念理解】
博文地址:http://watchmen.blog.51cto.com/6091957/1924747
感谢阅读,祝有收获的一天,谢谢!