Https和证书原理
Https现在基本已经覆盖所有的http请求了
在没有经过任何加密手段的HTTP通信中,面临着三大危险:消息监听、消息篡改、冒充身份 。
证书验证
1.服务器向证书机构申请证书,提供自己的域名、地址、公钥信息。
2.证书机构对服务器的信息使用hash算法得出一份128位的摘要,并对这份摘要使用证书机构的私钥进行非对称加密得到数字证书签名。
3.证书机构把服务器信息(明文是经过hash算法得出的128位摘要)+数字签名+证书机构信息(包含证书机构公钥)发送给服务器。
4.客户端请求服务器时,服务器把证书返回给客户端。
客户端验证证书
1.客户端拿到证书,得到服务器信息(明文)、数字签名、证书机构信息。
2.客户端对服务器信息进行hash算法计算得到一份摘要S1。
3.客户端使用证书机构提供的公钥对数字签名进行解密得到S2。
4.对比S1和S2可辨别证书是否来自服务器且没有经过篡改。
流程图
Server提供(域名、地址、公钥信息)---->CA机构--->hash算法(服务器信息得出128位摘要)--->CA私钥非对称加密(数字证书)----->CA把(服务器信息+数字签名+CA公钥)发送------>Server
Client--->Server---->证书---->Client--->服务器信息进行hash算法得到S1---->使用CA公钥对数字签名解密---->S2---->对比S1/S2确认证书可靠性。
为什么对比S1/S2的一致性可以确认证书的可靠性
- 黑客是否可以使用自己的秘钥加密,并把证书机构的公钥修改成自己的公钥?
1.证书机构不多,系统会内置根证书机构的信息,包括的这些机构的公钥,这些公钥一定程度上是安全可信任的。客户端可以使用公钥对数字签名进行解密
2.系统预装证书机构是有限的,所以有二级证书机构,二级证书机构由根证书机构签发。二级证书再给服务器签发证书。
二级证书验证流程
1.根证书给二级证书签发的时候也会下发一份数字证书,包含了二级证书机构信息、数字签名、根证书机构信息。
2.服务的数字证书包含二级证书机构的数字证书。
3.客户端使用根证书的公钥对二级证书的数字签名进行解密得到摘要S2进行对比。得到二级证书机构的公钥。
4.使用二级证书机构的公钥对服务器证书进行验证~
5.如果有3级、4级也是同理循环
注意事项
1.证书并不是直接对服务器信息进行加密,而是利用hash算法得到服务器摘要,再进行加密的。
总结
http要解决的是网络安全问题
- 防止脚下监听:加密
- 防止消息篡改:CA证书hash算法
- 验证身份:使用数字证书