浅入Https
Https全称为Hypertext Transfer Protocol over Secure Socket Layer,而Http为Hypertext Transfer Protocol,可以看出https就是http增加了一层安全传输加密ssl。ssl默认使用的是443端口,也就是说https使用443端口访问服务器。
因此可以这样简单理解
https = http + ssl
https涉及的相关知识包括对称加密(公钥加密,公钥解密)、非对称加密(公钥加密,私钥解密)以及CA(证书颁发机构),https解决的也主要是http传输过程的明文传输问题,其容易造成信息泄露(钓鱼网站、中间人攻击)
从技术的角度来看,要支持https传输,web服务器(apache、nginx等)需要开启对应的ssl模块,主配置文件加载ssl配置文件,而ssl配置文件加载证书、公钥、**。
如何保证数据传输过程被拦截的话不会泄露信息,就需要使用非对称加密技术,**只有服务器保存,所以信息被拦截了也不必担心信息泄露;
那么如何保证公钥和**就是一对的呢,举个栗子,甲方提供定金(公钥)给乙方,然后乙方为甲方干活,事成之后甲方没钱了不想认了,把公钥和**都换了,不承认之间的合作有效,乙方的公钥也没有对应的私钥证明。这时候就需要签名(证书)了,类似于合同。同时证书也可以保证数据传输过程的有效性。
但是呢,同样证书也是可以由自己生成,会存在上面的问题。所以这时候就需要由权威机构(CA)来颁发证书,这样大家就无异议了,证书指明域名下的哪些具体链接是信任的https传输,当然是基本需要收费的了。然后许多证书是操作系统自带的,可以通过命令(windows)win+r certmgr.msc
查看系统自带的证书,当然证书也可以通过下载安装,不过这样安全性并不高,最好是慎重。
以浏览器访问服务器为例
- 浏览器chrome(https://url)访问服务器进行握手
这时候浏览器判断是https访问,会检查本地是否有url的证书,若没有chrome就会提醒如下图,或者访问了对应的网站,服务器返回的证书与系统的不一致也会提示。在中间人攻击的情况下就会出现,比如你访问某个https网站,但中间被黑客拦截了,但是黑客并不能提供正确的证书给你,这时候浏览器就会进行提醒了。
- 在正常握手的情况下,浏览器会拿到服务器提供的证书和公钥key1
浏览器会随机生成一个公钥key2,下次访问时候,会使用key2加密需要传输的数据,同时使用key1加密key2,然后将数据传输给服务器,服务器使用**拿到key2,使用key2解密实际传输的数据,最后用key2将响应的数据加密传回给浏览器,浏览器使用保存着的key2对数据解密。至于为什么不都使用非对称加密是因为非对称加密比较耗费性能和时间,而对称加密时间消耗不多,并且浏览器生成的是随机的key,并且用户也不会专门把浏览器的key找出来发给别人,所以也不用担心安全问题。
- 接下来就都是循环上面步骤了
备:https详解