HTTPS如何完成数据传输的安全
本文采用先提出问题,再抛出解决办法的叙述方式
首先比如我们在浏览器上打开一个网址,然后浏览器展示网页内容。这中间必定经历了两个步骤:
- 浏览器向服务器传递请求信息,假设就是“https://www.12306.cn/index/”这样一个字符串吧
- 服务器把页面的html返回给浏览器
中间这两次的信息传递经历了无数的站点,比如你家的路由器、网络供应商的各个基站等,特别是之前还有通过伪基站窃取用户信息的事情。我们的要求是只有我和我要访问的服务器知道信息的内容,而中间站不能获取到,或者获取到了也不知道是啥意思。获取不到是不可能的,因为信息传递需要经过无数次的转发,使用我们要做的就是让中间站无法正确获取信息的内容
一、如何在信息传递中隐藏信息的内容
在传递信息之前对信息加密,在收到信息之后对信息进行解密。
二、如何让中间站无法解密,而实际的接收方可以解密
这里需要先了解两个概念:
对称加密:使用同一个密钥对信息加密和解密。使用密钥对信息进行加密之后使用同样的密钥即可将秘文转换成原文
非对称加密:加密和解密使用了不同的密钥。分别是公钥和私钥。使用公钥加密的信息只能通过私钥才能解,使用私钥加密的只能通过公钥解
思考一下,要想安全我们只能使用非对称加密。先将公钥传递给对方,让对方使用公钥对信息进行加密,然后我们自己使用私钥对信息进行解密。由于公钥无法对被公钥加密的信息进行解密,所以被中间站知道了也无所谓。又或者使用非对称加密的方式把对称加密的密钥传递给对方,而中间站无法获得对称加密的密钥
三、如何防范伪装者
如何确定正在与你聊天的人就是你以为的那个人
比如A希望与C进行交流。而有一个中间站B。有没有可能A发送信息“C,我是A,我想与你聊天”,信息到达B的时候B回复A说:“你好,我是C,我们开始聊天吧!”然后B同时给C发信息“C,我是A,我想与你聊天”。
使用证书,对身份进行确认;
SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥,还有CA中心对该证书里面的信息的签名,由于公钥加密的密码只能被在申请证书时生成的私钥解密,因此浏览器在生成密码之前需要先核对当前访问的域名与证书上绑定的域名是否一致
四、证书校验
证书会不会是假冒的?
在电脑或者手机等支持网络的设备上,出厂设置就会安装根证书。用根证书去验证二级证书颁发机构的证书的有效性,然后用二级证书颁发机构的公钥去验证服务器证书的有效性。
根证书的颁发机构用私钥对二级证书颁发机构的证书进行签名,我们用根证书上的公钥解密,即可验证二级证书的有孝心
二级证书颁发机构用私钥对服务器的证书进行签名,我们用二级证书上的公钥解密,即可验证服务器证书的有效性