SSL证书是什么东西?
为什么需要证书?
数字证书原理逻辑链条:
- 加密由加密算法 密钥组成,加密算法公开,于是密钥分发成了关键。(可以试想,若是加密算法私有,自然就没有密钥分发及之后的问题,代之就只加密算法本身的安全问题)
- 对称加密密钥不易分发,也不能每次都一样
- 非对称加密通信,客户端持有服务端的公钥,但服务商的公钥谁都可以得到,服务商给我发的消息,别人虽然不能改,但也可以截获并解密。
- 所以,纯粹的对称加密 和 非对称加密 都是无法做到安全通信的。因此,先使用非对称加密 约定一个对称密钥,再用对称加密交流
- 问题就变成了:客户端如何拿到服务商的公钥? ==> 服务商的公钥如何安全的在网络上传输呢?==> 服务商不直接分发公钥,而是分发经CA私钥加密过的数字证书(包含公钥 服务商域名等信息)。客户端持有CA的公钥,解密后拿到服务商的公钥。
- 从概念上来讲,数字证书是用来验证网络通信参与者的一个文件。这和学校颁发 给学生的毕业证书类似。在学校和学生之间,学校是可信第三方 CA,而学生是通信 参与者。如果社会普遍信任一个学校的声誉的话,那么这个学校颁发的毕业证书,也 会得到社会认可。参与者证书和 CA 证书可以类比毕业证和学校的办学许可证。
- CA的公钥如何安全的在网络上传输呢?给CA 也颁发证书,然后大家都无条件信任root CA,在操作系统、浏览器发布的时候便嵌入了root CA。
就好比谍报战里的接头戏码
- 两个彼此认识的特工接头会轻松一点,双方可能会经常变换下接头方式
- 第一次跟新来的特工接头,上级会告诉你xx点去xx等一个手里拿着xx的人,接头暗号是“hello/world”。此次,双方都认识的上级是CA,“hello/world” 便是对方的CA证书。
证书
- 证书有什么,Chrome可以通过”settings ==> advanced setting ==> https/ssl ==> 管理证书” 查看证书内容。证书基本上是一个文本文件。
- 服务商的公钥
- 服务商的信息
- 对上述信息算一个签名,用ca自己的私钥加密一下
- 如何验证证书?我拥有ca的公钥,对证书上的信息做一个签名, 解密证书上的签名,比对。
- 如果两个签名一样,签名一样,说明证书没被篡改
- 签名可以用ca公钥正确解密,说明是用ca私钥加密的,即证书是ca颁发的
- 结论,证书是可信的,那么证书上的内容,尤其是服务商的公钥是可信的。就好像,毕业证上学校公章是可信的,那么可以相信这个学生的学历是可信的。
总结一下https涉及到的一些加密知识
- 哈希,将任意长度的数据转化为固定长度的,验证数据是否被篡改
- 对称加密,加密和解密使用同一个密钥,对称加密的优点是速度快,缺点是密钥管理不方便,必须共享密钥
- 非对称加密,缺点是速度慢,优点是双方无需共享同一个密钥,密钥管理很方便
- 数字证书,提供可信的服务商公钥
其它
上文提到的都是单向非对称加密,对于安全性很高的场景(比如网银), 不仅客户端要验证服务端的合法性,服务端也要验证每个访问的客户端的合法性,对于这种场景,往往给每个用户发一个U盘,里面装的就是客户端的公钥和私钥对,用于双向非对称加密。
JoySSL官网:https://www.joyssl.com/certificate/select/free.html?nid=3