https大白话

web安全至关重要,https势在必行。https就是web服务的盔甲,防止http裸奔,承担了web传输内容不被第三方窃取和篡改的重任。

https简介

最简单来说,https就是加密的http。https在http和tcp协议层中间加了ssl/tsl层,作用就是给http传输内容加密。

密码概念

  • 密码:一套编/解码的算法
  • 密钥:改变密码行为的参数
  • 对称密钥加密系统: 编/解码使用相同密钥的算法
  • 非对称密钥加密系统: 编/解码使用不同密钥的算法
  • 公开密钥加密系统:一种非对称密钥加密系统,采用公钥和私钥,公钥向外公开,私钥只有使用者私有,私钥加密,公钥可以解密;公钥加密,私钥可以解密。

加密方案

现在的基本情况是这样,密码的算法是众所周知的,保密的关键在于密钥。

协商密钥

首先,服务器要和众多的web客户端通信,两者必须拥有一套匹配的密钥。

  • 对称密钥加密系统:服务器和web客户端要拥有相同的对称密钥。
  • 非对称密钥加密系统:服务器拥有公钥和私钥,web客户端拥有公钥即可。

web客户端需要知道对称密钥或者公钥,它从何地获取?它只能从服务器获取了,也就是说服务器会把密钥发送给web客户端。在发送密钥的过程是为了后续加密用的,这本身是没有加密的,这个就会造成密钥泄露啊,这个怎么解决?

我们想起来非对称加密系统中的公钥本来就是公开的,它泄密了无所谓,所以这里我们可以采用非对称加密系统,服务器把公钥发送给web客户端。然后web客户端用公钥加密传输内容,发送给客户端,由客户端私钥解密。而服务器用私钥加密传输内容,客户端用公钥解密。但是这种方案有两个致命问题:

  1. 第三方知道公钥,可以破解服务器用私钥加密的内容,虽然不能篡改,但是达到了窃取的目的
  2. 第三方可以劫持公钥,用自己的公钥替代服务器的公钥,发送给web客户端,web客户端误把第三方的公钥当成服务器的公钥,那第三方就可以为所欲为了
混合加密系统

首先,我们来解决第一个问题,情况是这样,web客户端用公钥加密的内容,第三方无法破解;而服务器用私钥加密的内容,第三方可以破解。那我们可以利用web客户端用公钥加密的内容,第三方无法破解的特点,在客户端收到正确的密钥后,随机生成一个新的对称密钥,通过公钥加密后,传输给服务器。这样客户端和服务器就用了一个共享的对称密钥,之后就可以通过这个对称密钥去加密通信了。而且对称密钥的加密性能通常是大大优于非对称加密。这实际上是利用非对称加密系统建立了一条web客户端到服务器的单向安全通道,然后利用该安全通道,传输私密的对称密钥来解决这个问题。

数字签名和证书

第二个问题需要解决web客户端收到的公钥到底是不是真正的服务器发出的公钥。也就是要确认发送方是否为服务器,且发送的内容没有被篡改。我们可以想一下实际生活中,我们怎么确保写信人的身份?我们一般会用签名或者按手印的方式,这种方式满足两个特点:

  • 唯一性
  • 只有写信人才拥有,不可模仿

只要满足这两个条件,我们就可以确定写信人的身份。那服务器作为写信人,有什么唯一且不可模仿的东西那?那就是私钥!当然了,我们不可能直接传输私钥,但是用私钥加密的数据,也是具有唯一性的,可以唯一标识服务器,且私钥只有服务器知道,私钥加密的数据不可模仿和篡改。用私钥加密的内容一般是服务器的相关信息。这就是所谓的数字签名,可以唯一标识作者,且不可篡改。

但是服务器的私钥加密的内容,只有服务器公钥可以解开,而客户端并不知道公钥,这个签名其实就是为了给客户端传送公钥,这不是自相矛盾了吗。。。自己解决不了的问题就需要政府出面了,政府机构可以给你办身份证,证明你就是你。我们可以通过受信任的第三方证书颁发机构(CA)给服务器办法证书,标识服务器的身份。证书一般包含以下信息:

  • 证书格式版本号
  • 证书序列号
  • 证书签名算法
  • 证书颁发者
  • 有效期
  • 对象名称
  • 对象的公开密钥
  • 数字签名,由签名颁发机构的私钥加密以上信息

数字证书中包含服务器的信息及其数字签名,数字签名是由颁发机构私钥加密证书其他内容得到的。而浏览器会预先安装很多签名颁发机构的证书,证书中包含签名颁发机构的公钥和相关信息。大部分的浏览器都会对数字证书进行简单的完整性校验,步骤如下:

  • 日期检测,检查证书的起始日期和结束日期,以确保证书仍然有效
  • 签名颁发者可信度检测,每个证书都是由证书颁发机构(CA)颁发的,它们负责为服务器担保。证书有不同的级别,每种证书都要求不同级别的背景验证。非常著名的CA,通常都有非常清晰的流程来验证证书申请人的身份及商业行为的合法性。浏览器会附带一个签名颁发机构的受信列表。浏览器受到未知颁发机构的证书,通常会弹出警告信息。
  • 签名检测,判断证书是可信的之后,浏览器用CA的公钥对证书中的数字签名进行解密,然后和证书中其他信息进行对比是否一致(通常有一定的编码规则)。
  • 站点身份检测,服务器证书中通常会包含服务器域名,浏览器通常会验证证书中的域名和正在通话的域名是否匹配,防止第三方替换为自己在CA机构注册的合法证书来代替服务器证书。
https通信过程

浏览器请求某个web资源时,它会检查url前缀:

  • 如果url是http,客户端就会打开一条到服务器端口80(默认)的连接,并向其发送http命令
  • 如果url是https,客户端就会打开一条道服务器端口443(默认)的连接,然后,初始化ssl层,进行ssl握手,对密钥进行沟通。完成之后进行加密通信。

加密的https事物过程如下:

  1. 建立到服务器端口443的TCP连接
  2. SSL安全参数握手
  3. 在SSL上发送HTTP请求
  4. 在SSL上发送HTTP响应
  5. SSL关闭通知
  6. TCP连接关闭

SSL握手的具体过程如下:

  1. 客户端发送可供选择的密码方案并请求证书
  2. 服务器发送选中的密码方案和证书
  3. 客户端验证证书,验证证书有效之后,发送用服务器公钥加密的随机对称密钥
  4. 客户端和服务器端互相告知,开始加密过程

https就是加密的http,采用非对称密钥系统、数字证书、数字签名协商公钥,然后通过公钥加密传递对称密钥,由对称密钥加密传输请求内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值