http+ssl = https
ssl(Secure Sockets Layer):安全套接层,HTTPS的安全基于SSL
http:数据以明文传输,不安全
https:数据加密后传输,且对服务器进行验证,即当前服务器是不是可以被信任
https流程:
服务器先向CA申请证书,需要把自己的公钥传给CA,之后会放在证书中
证书主要包含:
证书所有人的公开密钥(即服务器的公钥)
证书发行者对证书的签名(即CA用自己的私钥对发行的证书的签名)
证书所使用的签名算法
证书的发行机构的信息
证书所有人的信息
1.客户端发起https请求,连接到服务器的443端口
2.服务器将自己的证书发送给客户端
3.客户端收到后,①用浏览器内置的证书发行者的公钥对证书签名验签,来验证证书的合法性;②如果合法,则取出服务器的公钥;客户端生成对称密钥,用服务器的公钥对其加密,发送给服务器
4.服务器收到后,用自己的私钥解密,取出对称密钥
之后客户端和服务器则用此密钥对传输的信息加密
优点:
防止了中间人攻击,即始终无法拿到服务器的公钥,更不用说用公钥加密的对称密钥了
CA是负责签发证书、认证证书、管理已颁发证书的机关;并不是一个,而是一类
申请证书的公司
申请的证书类型不同,价格不同,多域名型SSL证书、通配符(泛域名)SSL证书,企业型OVSSL和增强型EVSSL证书的费用相对来说较高
CA公司
要进入各个浏览器的根证书列表,CA公司每年必须过 WebTrust 年度审计,是很大的开销
CA链费用:新开的CA公司要等5-10年,才会被普遍信任,才能广泛进入根证书链。要想加快点,就得给别的大牌CA公司掏钱,买次级证书
要具备发放可信SSL证书的资质,这本身就是一个很大的成本
(来自百度)
关键点:发行证书的机构的公钥能够轻易获得,如果能的话,中间人就可以拦截证书进而取出服务器公钥;答案是不能,‘这些厂商跟浏览器和操作系统都有合作,它们的根公钥都默认装到了浏览器或者操作系统环境里,且设置了权限’
根证书与证书链:
就像是交通主管部门与驾校,我们拿到的驾照是由驾校授权的,而驾校是由主管部门授权的,这样就使得我们的驾照被国家承认
根证书就相当于主管部门,CA就相当于驾校,当然了驾校可能有多级授权,这样就产生了证书链
而证书链的顶端就是根证书,根证书是一份特殊的证书,它的签发者是它本身
根证书被内置在浏览器/操作系统中
拿到根证书就可以一层一层的拨开洋葱,最终拿到服务器的公钥
当然CA证书也是可以自签的,就是可以自己做一个证书出来;但没人认可
除非添加进去后,手动设置为被信任
像之前的12306证书就相当于自己做的证书,而非CA签发的证书
fiddler原理
内置根证书,可以拿到服务器公钥,进而拿到对称密钥;
其实就是个中间人攻击。。。
(至于为什么有根证书,就不得而知了)
(ps:有些内容来源于网络,不保证绝对正确,但相对合理)
原文:https://www.cnblogs.com/justaman/p/11385627.html